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-фильтр вырезает лишние элементы со
+ страницы для определенных сайтов, таких как:
+ samlib.ru
+ www.fanfiction.net
+ archiveofourown.org
+ и других
+
+ Включить 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;
}