1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-06-18 23:07:45 +02:00

Desktop: Fixes #3729: Fix lock issue when device does not have the right time

This commit is contained in:
Laurent Cozic
2020-09-08 23:57:48 +01:00
parent 3a33e5f416
commit 1f70a76c7e
5 changed files with 203 additions and 4 deletions

View File

@ -0,0 +1,46 @@
const ntpClient = require('lib/vendor/ntp-client');
const Mutex = require('async-mutex').Mutex;
let lastSyncTime = 0;
let timeOffset = 0;
const fetchingTimeMutex = new Mutex();
const server = {
domain: 'pool.ntp.org',
port: 123,
};
async function networkTime():Promise<Date> {
return new Promise(function(resolve:Function, reject:Function) {
ntpClient.getNetworkTime(server.domain, server.port, function(error:any, date:Date) {
if (error) {
reject(error);
return;
}
resolve(date);
});
});
}
function shouldSyncTime() {
return !lastSyncTime || Date.now() - lastSyncTime >= 5 * 1000;
}
export default async function():Promise<Date> {
if (shouldSyncTime()) {
const release = await fetchingTimeMutex.acquire();
try {
if (shouldSyncTime()) {
const date = await networkTime();
lastSyncTime = Date.now();
timeOffset = date.getTime() - Date.now();
}
} finally {
release();
}
}
return new Date(Date.now() + timeOffset);
}