瀏覽代碼

Рефакторинг

Book Pauk 3 年之前
父節點
當前提交
26ab5d6765
共有 2 個文件被更改,包括 38 次插入25 次删除
  1. 15 10
      client/components/Reader/Reader.vue
  2. 23 15
      client/components/Reader/share/bookManager.js

+ 15 - 10
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;

+ 23 - 15
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;
             }