소스 검색

Синхронизация recent, пока не оптимизировано

Book Pauk 6 년 전
부모
커밋
737ae75c28
3개의 변경된 파일37개의 추가작업 그리고 19개의 파일을 삭제
  1. 10 3
      client/components/Reader/Reader.vue
  2. 3 2
      client/components/Reader/ServerStorage/ServerStorage.vue
  3. 24 14
      client/components/Reader/share/bookManager.js

+ 10 - 3
client/components/Reader/Reader.vue

@@ -294,10 +294,13 @@ class Reader extends Vue {
         this.debouncedUpdateRoute();
     }
 
-    bookManagerEvent(eventName) {
+    async bookManagerEvent(eventName) {
         const serverStorage = this.$refs.serverStorage;
         if (eventName == 'load-meta-finish') {
             serverStorage.init();
+            const result = await bookManager.cleanRecentBooks();
+            if (result)
+                this.debouncedSaveRecent();
         }
 
         if (eventName == 'recent-changed') {
@@ -305,8 +308,12 @@ class Reader extends Vue {
                 const oldBook = this.mostRecentBookReactive;
                 const newBook = bookManager.mostRecentBook();
 
-                if (oldBook && newBook && oldBook.key != newBook.key) {
-                    await this.loadBook(newBook);
+                if (oldBook && newBook) {
+                    if (oldBook.key != newBook.key) {
+                        await this.loadBook(newBook);
+                    } else if (oldBook.bookPos != newBook.bookPos) {
+                        this.bookPosChanged({bookPos: newBook.bookPos});
+                    }
                 }
 
                 this.debouncedSaveRecent();

+ 3 - 2
client/components/Reader/ServerStorage/ServerStorage.vue

@@ -403,8 +403,9 @@ class ServerStorage extends Vue {
 
                 if (result.state == 'reject') {
                     await this.loadRecent(true);
-                    const newRecent = utils.applyObjDiff(bm.recent, diff);
-                    await bm.setRecent(newRecent);
+                    //похоже это лишнее
+                    /*const newRecent = utils.applyObjDiff(bm.recent, diff);
+                    await bm.setRecent(newRecent);*/
                 }
 
                 tries++;

+ 24 - 14
client/components/Reader/share/bookManager.js

@@ -99,7 +99,9 @@ class BookManager {
             }
         }*/
         await this.cleanBooks();
-        await this.cleanRecentBooks();
+
+        //очистка позже
+        //await this.cleanRecentBooks();
 
         this.booksCached = {};
         for (const key in this.books) {
@@ -316,12 +318,17 @@ class BookManager {
 
         const sorted = this.getSortedRecent();
 
+        let isDel = false;
         for (let i = 1000; i < sorted.length; i++) {
             await bmRecentStore.removeItem(sorted[i].key);
             delete this.recent[sorted[i].key];
+            isDel = true;
         }
 
         this.sortedRecentCached = null;
+        await bmCacheStore.setItem('recent', this.recent);
+
+        return isDel;
     }
 
     mostRecentBook() {
@@ -356,16 +363,19 @@ class BookManager {
         return result;
     }
 
-    async setRecent(newRecent) {
-        //this.recent = newRecent;
+    async setRecent(value) {
         const mergedRecent = _.cloneDeep(this.recent);
 
-        Object.assign(mergedRecent, newRecent);
+        Object.assign(mergedRecent, value);
+        const newRecent = {};
         for (const rec of Object.values(mergedRecent)) {
-            await bmRecentStore.setItem(rec.key, rec);
+            if (rec.key) {
+                await bmRecentStore.setItem(rec.key, rec);
+                newRecent[rec.key] = rec;
+            }
         }
 
-        this.recent = mergedRecent;
+        this.recent = newRecent;
         await bmCacheStore.setItem('recent', this.recent);
 
         this.recentLast = null;
@@ -375,18 +385,18 @@ class BookManager {
         this.emit('recent-changed');
     }
 
-    async setRecentRev(newRecentRev) {
-        await bmRecentStore.setItem('recent-rev', newRecentRev);
-        this.recentRev = newRecentRev;
+    async setRecentRev(value) {
+        await bmRecentStore.setItem('recent-rev', value);
+        this.recentRev = value;
     }
 
-    async setRecentLast(newRecentLast) {
-        this.recentLast = newRecentLast;
+    async setRecentLast(value) {
+        this.recentLast = value;
     }
 
-    async setRecentLastRev(newRecentLastRev) {
-        bmRecentStore.setItem('recent-last-rev', newRecentLastRev);
-        this.recentLastRev = newRecentLastRev;
+    async setRecentLastRev(value) {
+        bmRecentStore.setItem('recent-last-rev', value);
+        this.recentLastRev = value;
     }
 
     addEventListener(listener) {