Procházet zdrojové kódy

Работа над BookUpdateChecker

Book Pauk před 2 roky
rodič
revize
35e46d0685

+ 1 - 1
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 {

+ 51 - 2
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;

+ 7 - 0
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)

+ 1 - 1
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: [
         {