11const path = require ( 'path' ) ;
2+ const fs = require ( 'fs' ) ;
23const { EventEmitter} = require ( 'events' ) ;
34
45const downloadHelper = require ( './scripts/download-helper.js' ) ;
@@ -23,6 +24,11 @@ class UpdateSubscriber extends EventEmitter {
2324 } , updateTimer ) ;
2425 this . checkUpdates ( ) ;
2526
27+ // Clean up failed download files
28+ fs . rmdir ( downloadPath + '-tmp' , { recursive : true } , e => {
29+ // folder did not exist
30+ } ) ;
31+
2632 return this ;
2733 }
2834
@@ -48,14 +54,23 @@ class UpdateSubscriber extends EventEmitter {
4854 this . downloading = true ;
4955 this . emit ( 'downloading' ) ;
5056
51- downloadHelper . fetchDatabases ( downloadPath ) . then ( ( ) => {
52- return downloadHelper . verifyAllChecksums ( downloadPath ) ;
53- } ) . then ( ( ) => {
54- this . emit ( 'update' , downloadHelper . getEditions ( ) ) ;
55- } ) . catch ( error => {
56- console . warn ( 'geolite2 self-update error:' , error ) ;
57- } ) . finally ( ( ) => {
58- this . downloading = false ;
57+ fs . mkdir ( downloadPath + '-tmp' , ( ) => {
58+ downloadHelper . fetchDatabases ( downloadPath + '-tmp' ) . then ( ( ) => {
59+ return downloadHelper . verifyAllChecksums ( downloadPath + '-tmp' ) ;
60+ } ) . then ( ( ) => {
61+ fs . rmdir ( downloadPath , { recursive : true } , e => {
62+ if ( e ) throw ( e ) ;
63+ fs . rename ( downloadPath + '-tmp' , downloadPath , e => {
64+ if ( e ) throw ( e ) ;
65+ this . emit ( 'update' , downloadHelper . getEditions ( ) ) ;
66+ } ) ;
67+ } ) ;
68+ } ) . catch ( error => {
69+ console . warn ( 'geolite2 self-update error:' , error ) ;
70+ fs . rmdir ( downloadPath + '-tmp' , { recursive : true } ) ;
71+ } ) . finally ( ( ) => {
72+ this . downloading = false ;
73+ } ) ;
5974 } ) ;
6075 }
6176
0 commit comments