diff --git a/client/components/Reader/ProgressPage/ProgressPage.vue b/client/components/Reader/ProgressPage/ProgressPage.vue index 8ebd77eb..339be584 100644 --- a/client/components/Reader/ProgressPage/ProgressPage.vue +++ b/client/components/Reader/ProgressPage/ProgressPage.vue @@ -43,7 +43,7 @@ class ProgressPage extends Vue { this.visible = true; } - async hide() { + hide() { this.visible = false; } diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index 740e6b36..72c05795 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -43,7 +43,7 @@ - + @@ -157,6 +157,34 @@ class Reader extends Vue { }); } + parseBook(meta) { + this.progressActive = true; + this.$nextTick(async() => { + if (await bookManager.hasBookParsed(meta)) { + this.progressActive = false; + return; + } + + const progress = this.$refs.page; + progress.show(); + progress.setState({state: 'parse'}); + try { + const isParsed = await bookManager.getBook(meta, (prog) => { + progress.setState({progress: prog}); + }); + + progress.hide(); this.progressActive = false; + + if (!isParsed) { + this.loadBook({url: meta.url}); + } + } catch (e) { + progress.hide(); this.progressActive = false; + this.$alert(e.message, 'Ошибка', {type: 'error'}); + } + }); + } + keyHook(event) { if (this.$root.rootRoute == '/reader') { if (this.$refs.page && this.$refs.page.keyHook) diff --git a/client/components/Reader/TextPage/TextPage.vue b/client/components/Reader/TextPage/TextPage.vue index 4d1c3dde..dca8353d 100644 --- a/client/components/Reader/TextPage/TextPage.vue +++ b/client/components/Reader/TextPage/TextPage.vue @@ -1,7 +1,6 @@ @@ -14,11 +13,30 @@ import bookManager from '../share/bookManager'; export default @Component({ }) class TextPage extends Vue { + parsedBook = null; + created() { this.commit = this.$store.commit; this.dispatch = this.$store.dispatch; this.config = this.$store.state.config; this.reader = this.$store.state.reader; + + this.book = null; + } + + activated() { + const last = this.lastOpenedBook; + if (last) { + (async() => { + const isParsed = await bookManager.hasBookParsed(last); + if (!isParsed) { + this.$emit('parse-book', last); + return; + } + const book = await bookManager.getBook(last); + this.book = book.parsed; + })(); + } } get lastOpenedBook() { diff --git a/client/components/Reader/share/BookParser.js b/client/components/Reader/share/BookParser.js index 8fd38156..6a4d1c3c 100644 --- a/client/components/Reader/share/BookParser.js +++ b/client/components/Reader/share/BookParser.js @@ -172,6 +172,8 @@ export default class BookParser { this.para = para; callback(100); + await sleep(10); + return {fb2}; } } \ No newline at end of file diff --git a/client/components/Reader/share/bookManager.js b/client/components/Reader/share/bookManager.js index 1326bb2d..0aeffd5c 100644 --- a/client/components/Reader/share/bookManager.js +++ b/client/components/Reader/share/bookManager.js @@ -64,6 +64,17 @@ class BookManager { return result; } + hasBookParsed(meta) { + if (!this.books) + return false; + if (!meta.url) + return false; + if (!meta.key) + meta.key = this.keyFromUrl(meta.url); + let book = this.books[meta.key]; + return (book && book.parsed); + } + async getBook(meta, callback) { if (!this.books) await this.init();