11'use strict' ;
22
3- const unzip = require ( 'node-unzip-2' ) ;
3+ const path = require ( 'path' ) ;
4+ const fs = require ( 'fs-extra' ) ;
5+ const unzip = require ( 'adm-zip' ) ;
46const config = require ( './config' ) ;
57const axios = require ( 'axios' ) ;
68
79// Downloads the zip file from github and extracts it to folder
8- exports . download = ( path ) => {
9- const url = config . get ( ) . repository ;
10+ exports . download = ( loc , lang ) => {
11+ // If the lang is english then keep the url simple, otherwise add language.
12+ const suffix = ( lang === 'en' ? '' : '.' + lang ) ;
13+ const url = config . get ( ) . repositoryBase + suffix + '.zip' ;
14+ const folderName = path . join ( loc , 'pages' + suffix ) ;
15+ const REQUEST_TIMEOUT = 10000 ;
1016
11- // Creating the extractor
12- const extractor = unzip . Extract ( { path } ) ;
13-
14- let req = axios ( {
17+ return axios ( {
1518 method : 'get' ,
1619 url : url ,
1720 responseType : 'stream' ,
18- headers : { 'User-Agent' : 'tldr-node-client' }
19- } ) . then ( function ( response ) {
20- response . data . pipe ( extractor ) ;
21- } ) ;
21+ headers : { 'User-Agent' : 'tldr-node-client' } ,
22+ timeout : REQUEST_TIMEOUT ,
23+ } ) . then ( ( response ) => {
24+ return new Promise ( ( resolve , reject ) => {
25+ let fileName = path . join ( loc , 'download_' + lang + '.zip' ) ;
2226
23- return new Promise ( ( resolve , reject ) => {
24- req . catch ( ( err ) => {
25- reject ( err ) ;
26- } ) ;
27- extractor . on ( 'error' , ( ) => {
28- reject ( new Error ( 'Cannot update from ' + url ) ) ;
29- } ) ;
30- extractor . on ( 'close' , ( ) => {
31- resolve ( ) ;
27+ const writer = fs . createWriteStream ( fileName ) ;
28+ response . data . pipe ( writer ) ;
29+
30+ writer . on ( 'finish' , ( ) => {
31+ writer . end ( ) ;
32+ const zip = new unzip ( fileName ) ;
33+
34+ zip . extractAllTo ( folderName , true ) ;
35+ fs . unlinkSync ( fileName ) ;
36+ resolve ( ) ;
37+ } ) . on ( 'error' , ( err ) => {
38+ reject ( err ) ;
39+ } ) ;
3240 } ) ;
41+ } ) . catch ( ( err ) => {
42+ return Promise . reject ( err ) ;
3343 } ) ;
34- } ;
44+ } ;
0 commit comments