From 299e5215614583c7adec89bfea33b5b2d9cea348 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Mon, 11 Feb 2019 01:35:04 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B2=D0=BE=D1=81=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B5=D0=BA=20=D1=81=D1=82=D0=B0=D1=80=D0=BE=D0=B3=D0=BE=20Omn?= =?UTF-8?q?iReader?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/Reader.vue | 8 ++- client/components/Reader/share/bookManager.js | 10 ++- .../Reader/share/restoreOldSettings.js | 70 +++++++++++++++++++ 3 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 client/components/Reader/share/restoreOldSettings.js diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index 683fdb30..f7b422a8 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -97,6 +97,7 @@ import bookManager from './share/bookManager'; import readerApi from '../../api/reader'; import _ from 'lodash'; import {sleep} from '../../share/utils'; +import restoreOldSettings from './share/restoreOldSettings'; export default @Component({ components: { @@ -198,6 +199,8 @@ class Reader extends Vue { mounted() { (async() => { await bookManager.init(); + await restoreOldSettings(this.settings, bookManager, this.commit); + if (this.$root.rootRoute == '/reader') { if (this.routeParamUrl) { this.loadBook({url: this.routeParamUrl, bookPos: this.routeParamPos}); @@ -615,6 +618,7 @@ class Reader extends Vue { wasOpened = (wasOpened ? wasOpened : {}); const bookPos = (opts.bookPos !== undefined ? opts.bookPos : wasOpened.bookPos); const bookPosSeen = (opts.bookPos !== undefined ? opts.bookPos : wasOpened.bookPosSeen); + const bookPosPercent = wasOpened.bookPosPercent; let book = null; @@ -626,7 +630,7 @@ class Reader extends Vue { // если есть в локальном кэше 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.addAction(bookPos); 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.addAction(bookPos); this.updateRoute(true); diff --git a/client/components/Reader/share/bookManager.js b/client/components/Reader/share/bookManager.js index 8568cd0e..bb6acd88 100644 --- a/client/components/Reader/share/bookManager.js +++ b/client/components/Reader/share/bookManager.js @@ -154,10 +154,16 @@ class BookManager { return utils.stringToHex(url); } - async setRecentBook(value) { + async setRecentBook(value, noTouch) { if (!this.recent) 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; await bmRecentStore.setItem(result.key, result); diff --git a/client/components/Reader/share/restoreOldSettings.js b/client/components/Reader/share/restoreOldSettings.js new file mode 100644 index 00000000..d6b00679 --- /dev/null +++ b/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); + } +} \ No newline at end of file