diff --git a/client/api/misc.js b/client/api/misc.js index 16b7a368..141fd3cf 100644 --- a/client/api/misc.js +++ b/client/api/misc.js @@ -9,7 +9,7 @@ class Misc { async loadConfig() { const query = {params: [ - 'name', 'version', 'mode', 'maxUploadFileSize', 'useExternalBookConverter', 'acceptFileExt', 'branch', + 'name', 'version', 'mode', 'maxUploadFileSize', 'useExternalBookConverter', 'acceptFileExt', 'bucEnabled', 'branch', ]}; try { diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index 7b9ac5a9..4fd3b7a8 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -309,6 +309,8 @@ class Reader { donationVisible = false; dualPageMode = false; + bucEnabled = false; + created() { this.rstore = rstore; this.loading = true; @@ -416,14 +418,26 @@ class Reader { await this.$refs.dialogs.init(); })(); + //проверки обновлений читалки (async() => { this.isFirstNeedUpdateNotify = true; //вечный цикл, запрашиваем периодически конфиг для проверки выхода новой версии читалки - while (true) {// eslint-disable-line no-constant-condition + while (1) {// eslint-disable-line no-constant-condition await this.checkNewVersionAvailable(); await utils.sleep(3600*1000); //каждый час } - //дальше кода нет + //дальше хода нет + })(); + + //проверки обновлений книг + (async() => { + await utils.sleep(1*1000); //подождем неск. секунд перед первым запросом + //вечный цикл, запрашиваем периодически обновления + while (1) {// eslint-disable-line no-constant-condition + await this.checkBuc(); + await utils.sleep(70*60*1000); //каждые 70 минут + } + //дальше хода нет })(); } @@ -445,6 +459,7 @@ class Reader { this.pdfQuality = settings.pdfQuality; this.dualPageMode = settings.dualPageMode; this.userWallpapers = settings.userWallpapers; + this.bucEnabled = settings.bucEnabled; this.readerActionByKeyCode = utils.userHotKeysObjectSwap(settings.userHotKeys); this.$root.readerActionByKeyEvent = (event) => { @@ -542,6 +557,36 @@ class Reader { } } + async checkBuc() { + if (!this.bothBucEnabled) + return; + + try { + const sorted = bookManager.getSortedRecent(); + + //выберем все кандидиаты на обновление + const updateUrls = new Set(); + for (const book of sorted) { + if (!book.deleted && book.checkBuc && book.url && book.url.indexOf('disk://') !== 0) + updateUrls.add(book.url); + } + + //теперь по кусочкам запросим сервер + const arr = Array.from(updateUrls); + const chunkSize = 100; + for (let i = 0; i < arr.length; i += chunkSize) { + const chunk = arr.slice(i, i + chunkSize); + + const data = await readerApi.checkBuc(chunk); +console.log(data); + await utils.sleep(1000);//чтобы не ддосить сервер + } +console.log('checkBuc finished', arr); + } catch (e) { + console.error(e); + } + } + checkSetStorageAccessKey() { const q = this.$route.query; @@ -620,6 +665,10 @@ class Reader { return versionHistory[0].version; } + get bothBucEnabled() { + return this.$store.state.config.bucEnabled && this.bucEnabled; + } + get routeParamUrl() { let result = ''; const path = this.$route.fullPath; diff --git a/client/store/modules/reader.js b/client/store/modules/reader.js index dadada1b..33c9c63f 100644 --- a/client/store/modules/reader.js +++ b/client/store/modules/reader.js @@ -192,7 +192,14 @@ const settingDefaults = { recentShowSameBook: false, recentSortMethod: '', + //Book Update Checker + bucEnabled: true, // общее включение/выключение проверки обновлений + bucSizeDiff: 1000, // разница в размерах файла, при которой показывать наличие обновления + bucSetOnNew: true, // автоматически включать проверку обновлений для вновь загружаемых файлов + + //для SettingsPage needUpdateSettingsView: 0, + }; for (const font of fonts) diff --git a/server/config/base.js b/server/config/base.js index d11c1a5b..efea21af 100644 --- a/server/config/base.js +++ b/server/config/base.js @@ -23,7 +23,7 @@ module.exports = { useExternalBookConverter: false, acceptFileExt: '.fb2, .fb3, .html, .txt, .zip, .bz2, .gz, .rar, .epub, .mobi, .rtf, .doc, .docx, .pdf, .djvu, .jpg, .jpeg, .png', - webConfigParams: ['name', 'version', 'mode', 'maxUploadFileSize', 'useExternalBookConverter', 'acceptFileExt', 'branch'], + webConfigParams: ['name', 'version', 'mode', 'maxUploadFileSize', 'useExternalBookConverter', 'acceptFileExt', 'bucEnabled', 'branch'], jembaDb: [ {