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