diff --git a/client/api/reader.js b/client/api/reader.js index 7d45eada..52bfbde6 100644 --- a/client/api/reader.js +++ b/client/api/reader.js @@ -11,11 +11,11 @@ const workerApi = axios.create({ }); class Reader { - async loadBook(url, callback) { + async loadBook(opts, callback) { const refreshPause = 300; if (!callback) callback = () => {}; - let response = await api.post('/load-book', {type: 'url', url}); + let response = await api.post('/load-book', opts); const workerId = response.data.workerId; if (!workerId) diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index b3055709..e227627d 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -356,6 +356,7 @@ class Reader extends Vue { this.showWhatsNewDialog = settings.showWhatsNewDialog; this.showMigrationDialog = settings.showMigrationDialog; this.showToolButton = settings.showToolButton; + this.enableSitesFilter = settings.enableSitesFilter; this.updateHeaderMinWidth(); } @@ -1003,7 +1004,7 @@ class Reader extends Vue { // не удалось, скачиваем книгу полностью с конвертацией let loadCached = true; if (!book) { - book = await readerApi.loadBook(url, (state) => { + book = await readerApi.loadBook({url, enableSitesFilter: this.enableSitesFilter}, (state) => { progress.setState(state); }); loadCached = false; diff --git a/client/components/Reader/SettingsPage/SettingsPage.vue b/client/components/Reader/SettingsPage/SettingsPage.vue index 301345bc..b407cd4a 100644 --- a/client/components/Reader/SettingsPage/SettingsPage.vue +++ b/client/components/Reader/SettingsPage/SettingsPage.vue @@ -304,6 +304,19 @@ + + + + Включить html-фильтр для сайтов + + @@ -688,6 +701,10 @@ class SettingsPage extends Vue { this.$notify.warning({message: 'Необходимо обновить страницу (F5), чтобы изменения возымели эффект'}); } + needTextReload() { + this.$notify.warning({message: 'Необходимо обновить книгу в обход кэша, чтобы изменения возымели эффект'}); + } + close() { this.$emit('settings-toggle'); } diff --git a/client/store/modules/reader.js b/client/store/modules/reader.js index 9ad4c8ae..154021e5 100644 --- a/client/store/modules/reader.js +++ b/client/store/modules/reader.js @@ -183,6 +183,7 @@ const settingDefaults = { showServerStorageMessages: true, showWhatsNewDialog: true, showMigrationDialog: true, + enableSitesFilter: true, fontShifts: {}, showToolButton: {}, diff --git a/server/controllers/ReaderController.js b/server/controllers/ReaderController.js index 7811dc94..1fd19366 100644 --- a/server/controllers/ReaderController.js +++ b/server/controllers/ReaderController.js @@ -15,7 +15,10 @@ class ReaderController extends BaseController { try { if (!request.url) throw new Error(`key 'url' is empty`); - const workerId = this.readerWorker.loadBookUrl(request.url); + const workerId = this.readerWorker.loadBookUrl({ + url: request.url, + enableSitesFilter: (request.hasOwnProperty('enableSitesFilter') ? request.enableSitesFilter : true) + }); const state = workerState.getState(workerId); return (state ? state : {}); } catch (e) { diff --git a/server/core/BookConverter/ConvertSamlib.js b/server/core/BookConverter/ConvertSamlib.js index 31fe9067..a690ade7 100644 --- a/server/core/BookConverter/ConvertSamlib.js +++ b/server/core/BookConverter/ConvertSamlib.js @@ -20,6 +20,9 @@ class ConvertSamlib extends ConvertBase { } async run(data, opts) { + if (!opts.enableSitesFilter) + return false; + const checkResult = this.check(data, opts); if (!checkResult) return false; diff --git a/server/core/BookConverter/ConvertSites.js b/server/core/BookConverter/ConvertSites.js index f829c665..cba41d7e 100644 --- a/server/core/BookConverter/ConvertSites.js +++ b/server/core/BookConverter/ConvertSites.js @@ -29,6 +29,9 @@ class ConvertSites extends ConvertHtml { } async run(data, opts) { + if (!opts.enableSitesFilter) + return false; + const checkResult = this.check(data, opts); if (!checkResult) return false; diff --git a/server/core/BookConverter/index.js b/server/core/BookConverter/index.js index 4b719ec1..66657a25 100644 --- a/server/core/BookConverter/index.js +++ b/server/core/BookConverter/index.js @@ -25,13 +25,14 @@ class BookConverter { } } - async convertToFb2(inputFiles, outputFile, url, callback) { + async convertToFb2(inputFiles, outputFile, opts, callback) { const selectedFileType = await this.detector.detectFile(inputFiles.selectedFile); const data = await fs.readFile(inputFiles.selectedFile); + const convertOpts = Object.assign({}, opts, {inputFiles, callback, dataType: selectedFileType}); let result = false; for (const convert of this.convertFactory) { - result = await convert.run(data, {inputFiles, url, callback, dataType: selectedFileType}); + result = await convert.run(data, convertOpts); if (result) { await fs.writeFile(outputFile, result); break; @@ -39,14 +40,14 @@ class BookConverter { } if (!result && inputFiles.nesting) { - result = await this.convertToFb2(inputFiles.nesting, outputFile, url, callback); + result = await this.convertToFb2(inputFiles.nesting, outputFile, opts, callback); } if (!result) { if (selectedFileType) throw new Error(`Этот формат файла не поддерживается: ${selectedFileType.mime}`); else { - throw new Error(`Не удалось определить формат файла: ${url}`); + throw new Error(`Не удалось определить формат файла: ${opts.url}`); } } diff --git a/server/core/ReaderWorker.js b/server/core/ReaderWorker.js index 1a2868b2..24038693 100644 --- a/server/core/ReaderWorker.js +++ b/server/core/ReaderWorker.js @@ -32,7 +32,8 @@ class ReaderWorker { } } - async loadBook(url, wState) { + async loadBook(opts, wState) { + const url = opts.url; let errMes = ''; let decompDir = ''; let downloadedFilename = ''; @@ -77,7 +78,7 @@ class ReaderWorker { //конвертирование в fb2 wState.set({state: 'convert', step: 3, progress: 0}); convertFilename = `${this.config.tempDownloadDir}/${tempFilename2}`; - await this.bookConverter.convertToFb2(decompFiles, convertFilename, url, progress => { + await this.bookConverter.convertToFb2(decompFiles, convertFilename, opts, progress => { wState.set({progress}); }); @@ -105,12 +106,12 @@ class ReaderWorker { } } - loadBookUrl(url) { + loadBookUrl(opts) { const workerId = workerState.generateWorkerId(); const wState = workerState.getControl(workerId); wState.set({state: 'start'}); - this.loadBook(url, wState); + this.loadBook(opts, wState); return workerId; }