diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index 4edc1a92..dd0e294d 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -1092,24 +1092,28 @@ class Reader { // есть ли среди недавних let wasOpened = bookManager.findRecentByUrlAndPath(url, opts.path); - wasOpened = (wasOpened ? wasOpened : {}); - const bookPos = (opts.bookPos !== undefined ? opts.bookPos : wasOpened.bookPos); - const bookPosSeen = (opts.bookPos !== undefined ? opts.bookPos : wasOpened.bookPosSeen); - const uploadFileName = (opts.uploadFileName ? opts.uploadFileName : ''); + wasOpened = (wasOpened ? _.cloneDeep(wasOpened) : {}); + + wasOpened = Object.assign(wasOpened, { + path: (opts.path !== undefined ? opts.path : wasOpened.path), + bookPos: (opts.bookPos !== undefined ? opts.bookPos : wasOpened.bookPos), + bookPosSeen: (opts.bookPos !== undefined ? opts.bookPos : wasOpened.bookPosSeen), + uploadFileName: (opts.uploadFileName ? opts.uploadFileName : wasOpened.uploadFileName), + }); let book = null; if (!opts.force) { // пытаемся загрузить и распарсить книгу в менеджере из локального кэша - const bookParsed = await bookManager.getBook({path: (opts.path ? opts.path : wasOpened.path)}, (prog) => { + const bookParsed = await bookManager.getBook(wasOpened, (prog) => { progress.setState({progress: prog}); }); // если есть в локальном кэше if (bookParsed) { - await bookManager.setRecentBook(Object.assign({bookPos, bookPosSeen}, bookParsed)); + await bookManager.setRecentBook(Object.assign(wasOpened, bookParsed)); this.mostRecentBook(); - this.addAction(bookPos); + this.addAction(wasOpened.bookPos); this.loaderActive = false; progress.hide(); this.progressActive = false; this.blinkCachedLoadMessage(); @@ -1140,7 +1144,7 @@ class Reader { if (!book) { book = await readerApi.loadBook({ url, - uploadFileName, + uploadFileName: wasOpened.uploadFileName, enableSitesFilter: this.enableSitesFilter, skipHtmlCheck: (this.splitToPara ? true : false), isText: (this.splitToPara ? true : false), @@ -1157,14 +1161,15 @@ class Reader { // добавляем в bookManager progress.setState({state: 'parse', step: 5}); + const addedBook = await bookManager.addBook(book, (prog) => { progress.setState({progress: prog}); }); // добавляем в историю - await bookManager.setRecentBook(Object.assign({bookPos, bookPosSeen, uploadFileName}, addedBook)); + await bookManager.setRecentBook(Object.assign(wasOpened, addedBook)); this.mostRecentBook(); - this.addAction(bookPos); + this.addAction(wasOpened.bookPos); this.updateRoute(true); this.loaderActive = false; diff --git a/client/components/Reader/share/bookManager.js b/client/components/Reader/share/bookManager.js index c7b1fe38..b9d0b29e 100644 --- a/client/components/Reader/share/bookManager.js +++ b/client/components/Reader/share/bookManager.js @@ -53,7 +53,8 @@ class BookManager { if (this.recentItem) this.recent[this.recentItem.key] = this.recentItem; - this.convertRecent(); + //конвертируем в новые ключи + await this.convertRecent(); this.recentLastKey = await bmRecentStoreNew.getItem('recent-last-key'); if (this.recentLastKey) { @@ -72,12 +73,14 @@ class BookManager { } //TODO: убрать в 2025г - convertRecent() { - let converted = false; + async convertRecent() { + const converted = await bmRecentStoreNew.getItem('recent-converted'); + + if (converted) + return; for (const key in this.recent) { const book = this.recent[key]; - if (!book.path) { continue; } @@ -85,20 +88,18 @@ class BookManager { const newKey = this.keyFromPath(book.path); if (!book.deleted && key !== newKey) { - this.recent[newKey] = _.cloneDeep(this.recent[key]); - this.recent[key].deleted = 1; - converted = true; + this.recent[newKey] = _.cloneDeep(book); + book.deleted = 1; } } //console.log(converted); - if (converted) { - (async() => { - await utils.sleep(5000); - this.saveRecent(); - this.emit('recent-changed'); - })(); - } + (async() => { + await utils.sleep(3000); + this.saveRecent(); + this.emit('recent-changed'); + await bmRecentStoreNew.setItem('recent-converted', true); + })(); } //Ленивая асинхронная загрузка bmMetaStore @@ -486,12 +487,19 @@ class BookManager { } findRecentByUrlAndPath(url, bookPath) { + if (bookPath) { + const key = this.keyFromPath(bookPath); + const book = this.recent[key]; + if (book && !book.deleted) + return book; + } + let max = 0; let result = null; for (const key in this.recent) { const book = this.recent[key]; - if (!book.deleted && book.url == url && book.addTime > max && (!bookPath || book.path == bookPath)) { + if (!book.deleted && book.url == url && book.addTime > max) { max = book.addTime; result = book; }