diff --git a/client/components/Reader/HistoryPage/HistoryPage.vue b/client/components/Reader/HistoryPage/HistoryPage.vue index 1da95ace..04a87888 100644 --- a/client/components/Reader/HistoryPage/HistoryPage.vue +++ b/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(); } diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index 3678313f..df7849bb 100644 --- a/client/components/Reader/Reader.vue +++ b/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; } diff --git a/client/components/Reader/share/bookManager.js b/client/components/Reader/share/bookManager.js index c6658b4d..30a51b9e 100644 --- a/client/components/Reader/share/bookManager.js +++ b/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() {