Browse Source

Добавление событий, рефакторинг

Book Pauk 6 years ago
parent
commit
090ffa9921

+ 1 - 8
client/components/Reader/HistoryPage/HistoryPage.vue

@@ -127,7 +127,6 @@ class HistoryPage extends Vue {
 
     init() {
         this.updateTableData();
-        this.mostRecentBook = bookManager.mostRecentBook();
         this.$nextTick(() => {
             this.$refs.input.focus();
         });
@@ -239,13 +238,7 @@ class HistoryPage extends Vue {
         await bookManager.delRecentBook({key});
         this.updateTableData();
 
-        const newRecent = bookManager.mostRecentBook();
-
-        if (!(this.mostRecentBook && newRecent && this.mostRecentBook.key == newRecent.key))
-            this.$emit('load-book', newRecent);
-
-        this.mostRecentBook = newRecent;
-        if (!this.mostRecentBook)
+        if (!bookManager.mostRecentBook())
             this.close();
     }
 

+ 12 - 0
client/components/Reader/Reader.vue

@@ -207,6 +207,7 @@ class Reader extends Vue {
     mounted() {
         (async() => {
             await bookManager.init(this.settings);
+            bookManager.addEventListener(this.bookManagerEvent);
             await this.$refs.serverStorage.init();
 
             if (this.$root.rootRoute == '/reader') {
@@ -288,6 +289,17 @@ class Reader extends Vue {
         this.debouncedUpdateRoute();
     }
 
+    bookManagerEvent(eventName) {
+        if (eventName == 'recent-changed') {
+            const oldBook = this.mostRecentBookReactive;
+            const newBook = bookManager.mostRecentBook();
+
+            if (oldBook && newBook && oldBook.key != newBook.key) {
+                this.loadBook(newBook);
+            }
+        }
+    }
+
     get toolBarActive() {
         return this.reader.toolBarActive;
     }

+ 8 - 3
client/components/Reader/share/bookManager.js

@@ -255,16 +255,20 @@ class BookManager {
         await bmRecentStore.setItem(result.key, result);
 
         //кэшируем, аккуратно
+        let saveRecent = false;
         if (!(this.recentLast && this.recentLast.key == result.key)) {
             await bmCacheStore.setItem('recent', this.recent);
-            this.emit('recent-changed');
+            saveRecent = true;
         }
         this.recentLast = result;
         await bmCacheStore.setItem('recent-last', this.recentLast);
-        this.emit('recent-last-changed');
 
         this.mostRecentCached = result;
         this.recentChanged2 = true;
+
+        if (saveRecent)
+            this.emit('save-recent');
+        this.emit('recent-changed');
         return result;
     }
 
@@ -281,10 +285,11 @@ class BookManager {
         this.recent[value.key].deleted = 1;
         await bmRecentStore.setItem(value.key, this.recent[value.key].deleted);
         await bmCacheStore.setItem('recent', this.recent);
-        this.emit('recent-changed');
 
         this.mostRecentCached = null;
         this.recentChanged2 = true;
+
+        this.emit('recent-changed');
     }
 
     async cleanRecentBooks() {