Улучшения механизма запуска периодических задач
This commit is contained in:
@@ -393,6 +393,9 @@ class Reader {
|
||||
this.recentItemKeys = [];
|
||||
//сохранение в удаленном хранилище
|
||||
await this.$refs.serverStorage.saveRecent(itemKeys);
|
||||
|
||||
//periodicTasks
|
||||
this.periodicTasks();//no await
|
||||
} catch (e) {
|
||||
if (!this.offlineModeActive)
|
||||
this.$root.notify.error(e.message);
|
||||
@@ -442,26 +445,15 @@ class Reader {
|
||||
this.$refs.recentBooksPage.init();
|
||||
})();
|
||||
|
||||
//проверки обновлений читалки
|
||||
//единственный запуск periodicTasks при инициализации
|
||||
//дальнейшие запуски periodicTasks выполняются из debouncedSaveRecent
|
||||
//т.е. только по действию пользователя
|
||||
(async() => {
|
||||
await utils.sleep(15*1000);
|
||||
this.isFirstNeedUpdateNotify = true;
|
||||
//вечный цикл, запрашиваем периодически конфиг для проверки выхода новой версии читалки
|
||||
while (1) {// eslint-disable-line no-constant-condition
|
||||
await this.checkNewVersionAvailable();
|
||||
await utils.sleep(60*60*1000); //каждый час
|
||||
}
|
||||
//дальше хода нет
|
||||
})();
|
||||
|
||||
//проверки обновлений книг
|
||||
(async() => {
|
||||
await utils.sleep(15*1000); //подождем неск. секунд перед первым запросом
|
||||
//вечный цикл, запрашиваем периодически обновления
|
||||
while (1) {// eslint-disable-line no-constant-condition
|
||||
await this.checkBuc();
|
||||
await utils.sleep(70*60*1000); //каждые 70 минут
|
||||
}
|
||||
//дальше хода нет
|
||||
this.allowPeriodicTasks = true;
|
||||
this.periodicTasks();//no await
|
||||
})();
|
||||
}
|
||||
|
||||
@@ -560,11 +552,45 @@ class Reader {
|
||||
}
|
||||
}
|
||||
|
||||
async checkNewVersionAvailable() {
|
||||
if (!this.checkingNewVersion && this.showNeedUpdateNotify) {
|
||||
this.checkingNewVersion = true;
|
||||
async periodicTasks() {
|
||||
if (!this.allowPeriodicTasks || this.doingPeriodicTasks)
|
||||
return;
|
||||
|
||||
this.doingPeriodicTasks = true;
|
||||
try {
|
||||
await utils.sleep(15*1000); //подождем 15 секунд, чтобы прогрузился ServiceWorker при выходе новой версии
|
||||
if (!this.taskList) {
|
||||
const taskArr = [
|
||||
['checkNewVersionAvailable', 60], //проверки обновлений читалки, каждый час
|
||||
['checkBuc', 70], //проверки обновлений книг, каждые 70 минут
|
||||
];
|
||||
|
||||
this.taskList = [];
|
||||
for (const task of taskArr) {
|
||||
const [method, period] = task;
|
||||
this.taskList.push({method, period, lastRunTime: 0});
|
||||
}
|
||||
}
|
||||
|
||||
for (const task of this.taskList) {
|
||||
if (Date.now() - task.lastRunTime >= task.period*60*1000) {
|
||||
try {
|
||||
//console.log('task run', task.method);
|
||||
await this[task.method]();
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
task.lastRunTime = Date.now();
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
} finally {
|
||||
this.doingPeriodicTasks = false;
|
||||
}
|
||||
}
|
||||
|
||||
async checkNewVersionAvailable() {
|
||||
if (this.showNeedUpdateNotify) {
|
||||
const config = await miscApi.loadConfig();
|
||||
this.commit('config/setConfig', config);
|
||||
|
||||
@@ -575,11 +601,7 @@ class Reader {
|
||||
|
||||
if (this.version != this.clientVersion)
|
||||
this.$root.notify.info(`Вышла новая версия (v${this.version}) читалки.<br>Пожалуйста, обновите страницу${againMes}.`, 'Обновление');
|
||||
} catch(e) {
|
||||
console.error(e);
|
||||
} finally {
|
||||
this.checkingNewVersion = false;
|
||||
}
|
||||
|
||||
this.isFirstNeedUpdateNotify = false;
|
||||
}
|
||||
}
|
||||
@@ -588,7 +610,6 @@ class Reader {
|
||||
if (!this.bothBucEnabled)
|
||||
return;
|
||||
|
||||
try {
|
||||
const sorted = bookManager.getSortedRecent();
|
||||
|
||||
//выберем все кандидиаты на обновление
|
||||
@@ -661,9 +682,6 @@ class Reader {
|
||||
}
|
||||
|
||||
await this.$refs.recentBooksPage.updateTableData();
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
updateCountChanged(event) {
|
||||
@@ -1409,8 +1427,6 @@ class Reader {
|
||||
if (!this.showHelpOnErrorIfNeeded(url)) {
|
||||
this.$root.stdDialog.alert(e.message, 'Ошибка', {color: 'negative'});
|
||||
}
|
||||
} finally {
|
||||
this.checkNewVersionAvailable();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user