22/* eslint-disable max-len */
33const { join } = require ( 'path' ) ;
44const Emitter = require ( 'events' ) . EventEmitter ;
5- const https = require ( 'https' ) ;
65
76const basePath = join ( __dirname , '..' , '..' ) ;
87// eslint-disable-next-line import/no-dynamic-require
@@ -22,37 +21,6 @@ let checking = false;
2221const accuracyThreshold = 50 ;
2322const timeToWaitForSecond = 60 * 1000 ;
2423
25- const getCurrentTime = ( cb ) => {
26- const options = {
27- hostname : 'timeapi.io' ,
28- path : '/api/time/current/zone?timeZone=GMT' ,
29- method : 'GET' ,
30- headers : {
31- Accept : 'application/json' ,
32- } ,
33- } ;
34-
35- const req = https . request ( options , ( res ) => {
36- let data = '' ;
37- res . on ( 'data' , ( chunk ) => {
38- data += chunk ;
39- } ) ;
40- res . on ( 'end' , ( ) => {
41- try {
42- cb ( JSON . parse ( data ) ) ;
43- } catch ( e ) {
44- cb ( null , e ) ;
45- }
46- } ) ;
47- } ) ;
48-
49- req . on ( 'error' , ( error ) => {
50- cb ( null , error ) ;
51- } ) ;
52-
53- req . end ( ) ;
54- } ;
55-
5624const storeForceData = ( type , query , cb ) => {
5725 storage . do ( type , query , ( errSet ) => {
5826 if ( errSet ) {
@@ -63,35 +31,35 @@ const storeForceData = (type, query, cb) => {
6331 } ) ;
6432} ;
6533
66- const dateDifference = ( date , secondDate ) => {
67- const timeDiff = date . getTime ( ) - secondDate . getTime ( ) ;
68- const diffHours = timeDiff / ( 1000 * 3600 ) ;
69- return diffHours ;
70- } ;
71-
72- const check24TimeLoop = ( time , timeStoraged , cb ) => {
73- const dateTime = new Date ( time ) ;
74- const dateTimeStoraged = new Date ( timeStoraged ) ;
75- const diff = dateDifference ( dateTime , dateTimeStoraged ) ;
76- logger . debug ( `Diff: ${ diff } ` ) ;
77- if ( diff > 24 ) {
78- cb ( true ) ;
79- } else cb ( false ) ;
34+ const checkOneDayDifference = ( time , timeStoraged , cb ) => {
35+ let timeDate ;
36+ let timeStoragedDate ;
37+ try {
38+ timeDate = new Date ( time ) ;
39+ timeStoragedDate = new Date ( timeStoraged ) ;
40+ } catch ( ex ) {
41+ return cb ( false ) ;
42+ }
43+ if ( timeDate > timeStoragedDate ) {
44+ if ( timeDate . getDate ( ) !== timeStoragedDate . getDate ( ) ) {
45+ return cb ( true ) ;
46+ }
47+ }
48+ cb ( false ) ;
8049} ;
8150
82- const writeStorage = ( external , local , cb ) => {
51+ const writeStorage = ( local , cb ) => {
8352 storage . do ( 'query' , { type : 'keys' , column : 'id' , data : 'last_force_datetime' } , ( err , stored ) => {
84- if ( err ) logger . error ( 'Error getting the last force location datetime' ) ;
53+ if ( err ) {
54+ logger . error ( 'Error getting the last force location datetime' ) ;
55+ return cb ( false , err ) ;
56+ }
8557 if ( stored && stored . length > 0 ) {
8658 const data = JSON . parse ( stored [ 0 ] . value ) ;
8759 logger . debug ( `Last force location datetime: ${ JSON . stringify ( data ) } ` ) ;
88- if ( ( external === null || data . externalDateTime === 'null' ) ) {
89- check24TimeLoop ( local , data . localDateTime , cb ) ;
90- } else {
91- check24TimeLoop ( external , data . externalDateTime , cb ) ;
92- }
60+ checkOneDayDifference ( local , data . localDateTime , cb ) ;
9361 } else {
94- const dataToStore = { value : JSON . stringify ( { localDateTime : local , externalDateTime : external } ) } ;
62+ const dataToStore = { value : JSON . stringify ( { localDateTime : local } ) } ;
9563 storeForceData ( 'set' , { type : 'keys' , id : 'last_force_datetime' , data : dataToStore } , ( errStoreSet ) => {
9664 if ( errStoreSet ) return cb ( null , new Error ( 'Unable to set db keys last force location values' ) ) ;
9765 cb ( true ) ;
@@ -160,7 +128,7 @@ const fetchLocation = (typeFetch, callback) => {
160128 let callBackStored = null ;
161129 if ( typeFetch === 'force' ) callBackStored = { callback } ;
162130 if ( callback && typeFetch !== 'force' && typeof callback === 'function' ) locCallbacks . push ( callback ) ;
163- if ( checking ) return ;
131+ if ( checking && typeFetch !== 'force' ) return ;
164132
165133 const fireCallbacks = ( err , coords ) => {
166134 if ( callBackStored && ( err || ! coords ) ) callBackStored . callback ( err , coords ) ;
@@ -236,23 +204,19 @@ const fetchLocation = (typeFetch, callback) => {
236204} ;
237205
238206const forceLocation = ( ) => {
239- getCurrentTime ( ( res , error ) => {
240- let externalTime = '' ;
241- if ( res && ! error ) externalTime = `${ res . dateTime } Z` ;
242- const dataToUpdate = { externalDateTime : externalTime , localDateTime : new Date ( ) . toISOString ( ) } ;
243- writeStorage ( dataToUpdate . externalDateTime , dataToUpdate . localDateTime , ( respWrite ) => {
244- if ( ! respWrite ) return ;
245- fetchLocation ( 'force' , ( err ) => {
246- if ( err ) return ;
247- storeForceData ( 'update' , {
248- type : 'keys' , id : 'last_force_datetime' , columns : [ 'value' ] , values : [ JSON . stringify ( dataToUpdate ) ] ,
249- } , ( errStoredUpdate ) => {
250- if ( errStoredUpdate ) {
251- logger . error ( 'Unable to update db keys last force location values' ) ;
252- return ;
253- }
254- logger . info ( 'Updated db keys last force location values' ) ;
255- } ) ;
207+ const dataToUpdate = { localDateTime : new Date ( ) . toISOString ( ) } ;
208+ writeStorage ( dataToUpdate . localDateTime , ( respWrite ) => {
209+ if ( ! respWrite ) return ;
210+ fetchLocation ( 'force' , ( err ) => {
211+ if ( err ) return ;
212+ storeForceData ( 'update' , {
213+ type : 'keys' , id : 'last_force_datetime' , columns : [ 'value' ] , values : [ JSON . stringify ( dataToUpdate ) ] ,
214+ } , ( errStoredUpdate ) => {
215+ if ( errStoredUpdate ) {
216+ logger . error ( 'Unable to update db keys last force location values' ) ;
217+ return ;
218+ }
219+ logger . info ( 'Updated db keys last force location values' ) ;
256220 } ) ;
257221 } ) ;
258222 } ) ;
@@ -291,3 +255,5 @@ exports.events = [];
291255exports . current = current ;
292256exports . send_location = sendLocation ;
293257exports . post_it = postIt ;
258+ exports . checkOneDayDifference = checkOneDayDifference ;
259+ exports . writeStorage = writeStorage ;
0 commit comments