Ver código fonte

Добавил восстановление настроек старого OmniReader

Book Pauk 6 anos atrás
pai
commit
299e521561

+ 6 - 2
client/components/Reader/Reader.vue

@@ -97,6 +97,7 @@ import bookManager from './share/bookManager';
 import readerApi from '../../api/reader';
 import readerApi from '../../api/reader';
 import _ from 'lodash';
 import _ from 'lodash';
 import {sleep} from '../../share/utils';
 import {sleep} from '../../share/utils';
+import restoreOldSettings from './share/restoreOldSettings';
 
 
 export default @Component({
 export default @Component({
     components: {
     components: {
@@ -198,6 +199,8 @@ class Reader extends Vue {
     mounted() {
     mounted() {
         (async() => {
         (async() => {
             await bookManager.init();
             await bookManager.init();
+            await restoreOldSettings(this.settings, bookManager, this.commit);
+
             if (this.$root.rootRoute == '/reader') {
             if (this.$root.rootRoute == '/reader') {
                 if (this.routeParamUrl) {
                 if (this.routeParamUrl) {
                     this.loadBook({url: this.routeParamUrl, bookPos: this.routeParamPos});
                     this.loadBook({url: this.routeParamUrl, bookPos: this.routeParamPos});
@@ -615,6 +618,7 @@ class Reader extends Vue {
                 wasOpened = (wasOpened ? wasOpened : {});
                 wasOpened = (wasOpened ? wasOpened : {});
                 const bookPos = (opts.bookPos !== undefined ? opts.bookPos : wasOpened.bookPos);
                 const bookPos = (opts.bookPos !== undefined ? opts.bookPos : wasOpened.bookPos);
                 const bookPosSeen = (opts.bookPos !== undefined ? opts.bookPos : wasOpened.bookPosSeen);
                 const bookPosSeen = (opts.bookPos !== undefined ? opts.bookPos : wasOpened.bookPosSeen);
+                const bookPosPercent = wasOpened.bookPosPercent;
 
 
                 let book = null;
                 let book = null;
 
 
@@ -626,7 +630,7 @@ class Reader extends Vue {
 
 
                     // если есть в локальном кэше
                     // если есть в локальном кэше
                     if (bookParsed) {
                     if (bookParsed) {
-                        await bookManager.setRecentBook(Object.assign({bookPos, bookPosSeen}, bookManager.metaOnly(bookParsed)));
+                        await bookManager.setRecentBook(Object.assign({bookPos, bookPosSeen, bookPosPercent}, bookManager.metaOnly(bookParsed)));
                         this.mostRecentBook();
                         this.mostRecentBook();
                         this.addAction(bookPos);
                         this.addAction(bookPos);
                         this.loaderActive = false;
                         this.loaderActive = false;
@@ -669,7 +673,7 @@ class Reader extends Vue {
                 });
                 });
 
 
                 // добавляем в историю
                 // добавляем в историю
-                await bookManager.setRecentBook(Object.assign({bookPos, bookPosSeen}, bookManager.metaOnly(addedBook)));
+                await bookManager.setRecentBook(Object.assign({bookPos, bookPosSeen, bookPosPercent}, bookManager.metaOnly(addedBook)));
                 this.mostRecentBook();
                 this.mostRecentBook();
                 this.addAction(bookPos);
                 this.addAction(bookPos);
                 this.updateRoute(true);
                 this.updateRoute(true);

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

@@ -154,10 +154,16 @@ class BookManager {
         return utils.stringToHex(url);
         return utils.stringToHex(url);
     }
     }
 
 
-    async setRecentBook(value) {
+    async setRecentBook(value, noTouch) {
         if (!this.recent) 
         if (!this.recent) 
             await this.init();
             await this.init();
-        const result = Object.assign({}, value, {touchTime: Date.now()});
+        const result = Object.assign({}, value);
+        if (!noTouch)
+            Object.assign(result, {touchTime: Date.now()});
+
+        if (result.textLength && !result.bookPos && result.bookPosPercent)
+            result.bookPos = Math.round(result.bookPosPercent*result.textLength);
+
         this.recent[result.key] = result;
         this.recent[result.key] = result;
 
 
         await bmRecentStore.setItem(result.key, result);
         await bmRecentStore.setItem(result.key, result);

+ 70 - 0
client/components/Reader/share/restoreOldSettings.js

@@ -0,0 +1,70 @@
+export default async function restoreOldSettings(settings, bookManager, commit) {
+    const oldSets = localStorage['colorSetting'];
+    let isOld = false;
+    for (let i = 0; i < localStorage.length; i++) {
+        let key = unescape(localStorage.key(i));
+        if (key.indexOf('bpr-book-') == 0)
+            isOld = true;
+    }
+
+    if (isOld || oldSets) {
+        let newSettings = null;
+        if (oldSets) {
+            const [textColor, backgroundColor, lineStep, , , statusBarHeight, scInt] = unescape(oldSets).split('|');
+
+            const fontSize = Math.round(lineStep*0.8);
+            const scrollingDelay = fontSize*scInt;
+
+            newSettings = Object.assign({}, settings, {
+                textColor,
+                backgroundColor,
+                fontSize,
+                statusBarHeight: statusBarHeight*1,
+                scrollingDelay,
+            });
+        }
+
+        for (let i = 0; i < localStorage.length; i++) {
+            let key = localStorage.key(i);
+            if (key.indexOf('bpr-') == 0) {
+                let v = unescape(localStorage[key]);
+                key = unescape(key);
+
+                if (key.lastIndexOf('=timestamp') == key.length - 10) {
+                    continue;
+                }
+
+                if (key.indexOf('bpr-book-') == 0) {
+                    const url = key.substr(9);
+                    const [scrollTop, scrollHeight, ] = v.split('|');
+
+                    const bookPosPercent = scrollTop*1/(scrollHeight*1 + 1);
+                    const title = unescape(localStorage[`bpr-title-${escape(url)}`]);
+                    const author = unescape(localStorage[`bpr-author-${escape(url)}`]);
+                    const time = unescape(localStorage[`bpr-book-${escape(url)}=timestamp`]).split(';')[0];
+                    const touchTime = Date.parse(time);
+
+                    const bookKey = bookManager.keyFromUrl(url);
+                    const recent = await bookManager.getRecentBook({key: bookKey});
+
+                    if (!recent) {
+                        await bookManager.setRecentBook({
+                            key: bookKey,
+                            touchTime,
+                            bookPosPercent,
+                            url,
+                            fb2: {
+                                bookTitle: title,
+                                lastName: author,
+                            }
+                        }, true);
+                    }
+                }
+            }
+        }
+
+        localStorage.clear();
+        if (oldSets)
+            commit('reader/setSettings', newSettings);
+    }
+}