Добавлена кнопка 'Обновить с разбиением на параграфы'

This commit is contained in:
Book Pauk
2020-11-01 16:42:20 +07:00
parent 9a4a84a367
commit c8c0e9ec1a
4 changed files with 33 additions and 6 deletions

View File

@@ -39,6 +39,10 @@
<q-icon name="la la-copy" size="32px"/> <q-icon name="la la-copy" size="32px"/>
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">{{ rstore.readerActions['copyText'] }}</q-tooltip> <q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">{{ rstore.readerActions['copyText'] }}</q-tooltip>
</button> </button>
<button ref="splitToPara" v-show="showToolButton['splitToPara']" class="tool-button" :class="buttonActiveClass('splitToPara')" @click="buttonClick('splitToPara')" v-ripple>
<q-icon name="la la-indent" style="transform: rotate(0.5turn); top: 1px" size="32px"/>
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">{{ rstore.readerActions['splitToPara'] }}</q-tooltip>
</button>
<button ref="refresh" v-show="showToolButton['refresh']" class="tool-button" :class="buttonActiveClass('refresh')" @click="buttonClick('refresh')" v-ripple> <button ref="refresh" v-show="showToolButton['refresh']" class="tool-button" :class="buttonActiveClass('refresh')" @click="buttonClick('refresh')" v-ripple>
<q-icon name="la la-sync" size="32px" :class="{clear: !showRefreshIcon}"/> <q-icon name="la la-sync" size="32px" :class="{clear: !showRefreshIcon}"/>
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">{{ rstore.readerActions['refresh'] }}</q-tooltip> <q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">{{ rstore.readerActions['refresh'] }}</q-tooltip>
@@ -699,6 +703,12 @@ class Reader extends Vue {
} }
} }
refreshBookSplitToPara() {
if (this.mostRecentBook()) {
this.loadBook({url: this.mostRecentBook().url, skipCheck: true, isText: true, force: true});
}
}
recentBooksClose() { recentBooksClose() {
this.recentBooksActive = false; this.recentBooksActive = false;
} }
@@ -816,6 +826,7 @@ class Reader extends Vue {
case 'scrolling': case 'scrolling':
case 'search': case 'search':
case 'copyText': case 'copyText':
case 'splitToPara':
case 'refresh': case 'refresh':
case 'libs': case 'libs':
case 'recentBooks': case 'recentBooks':
@@ -847,8 +858,9 @@ class Reader extends Vue {
case 'copyText': case 'copyText':
classResult = classDisabled; classResult = classDisabled;
break; break;
case 'recentBooks': case 'splitToPara':
case 'refresh': case 'refresh':
case 'recentBooks':
if (!this.mostRecentBookReactive) if (!this.mostRecentBookReactive)
classResult = classDisabled; classResult = classDisabled;
break; break;
@@ -1001,9 +1013,16 @@ class Reader extends Vue {
// не удалось, скачиваем книгу полностью с конвертацией // не удалось, скачиваем книгу полностью с конвертацией
let loadCached = true; let loadCached = true;
if (!book) { if (!book) {
book = await readerApi.loadBook({url, enableSitesFilter: this.enableSitesFilter}, (state) => { book = await readerApi.loadBook({
progress.setState(state); url,
}); skipCheck: (opts.skipCheck ? true : false),
isText: (opts.isText ? true : false),
enableSitesFilter: this.enableSitesFilter
},
(state) => {
progress.setState(state);
}
);
loadCached = false; loadCached = false;
} }
@@ -1122,6 +1141,9 @@ class Reader extends Vue {
case 'copyText': case 'copyText':
this.copyTextToggle(); this.copyTextToggle();
break; break;
case 'splitToPara':
this.refreshBookSplitToPara();
break;
case 'refresh': case 'refresh':
this.refreshBook(); this.refreshBook();
break; break;

View File

@@ -10,6 +10,7 @@ const readerActions = {
'setPosition': 'Установить позицию', 'setPosition': 'Установить позицию',
'search': 'Найти в тексте', 'search': 'Найти в тексте',
'copyText': 'Скопировать текст со страницы', 'copyText': 'Скопировать текст со страницы',
'splitToPara': 'Обновить с разбиением на параграфы',
'refresh': 'Принудительно обновить книгу', 'refresh': 'Принудительно обновить книгу',
'offlineMode': 'Автономный режим (без интернета)', 'offlineMode': 'Автономный режим (без интернета)',
'libs': 'Библиотека', 'libs': 'Библиотека',
@@ -37,6 +38,7 @@ const toolButtons = [
{name: 'setPosition', show: true}, {name: 'setPosition', show: true},
{name: 'search', show: true}, {name: 'search', show: true},
{name: 'copyText', show: false}, {name: 'copyText', show: false},
{name: 'splitToPara', show: true},
{name: 'refresh', show: true}, {name: 'refresh', show: true},
{name: 'libs', show: true}, {name: 'libs', show: true},
{name: 'recentBooks', show: true}, {name: 'recentBooks', show: true},
@@ -55,6 +57,7 @@ const hotKeys = [
{name: 'setPosition', codes: ['P']}, {name: 'setPosition', codes: ['P']},
{name: 'search', codes: ['Ctrl+F']}, {name: 'search', codes: ['Ctrl+F']},
{name: 'copyText', codes: ['Ctrl+C']}, {name: 'copyText', codes: ['Ctrl+C']},
{name: 'splitToPara', codes: ['Shift+R']},
{name: 'refresh', codes: ['R']}, {name: 'refresh', codes: ['R']},
{name: 'offlineMode', codes: ['O']}, {name: 'offlineMode', codes: ['O']},
{name: 'libs', codes: ['L']}, {name: 'libs', codes: ['L']},

View File

@@ -19,7 +19,9 @@ class ReaderController extends BaseController {
throw new Error(`key 'url' is empty`); throw new Error(`key 'url' is empty`);
const workerId = this.readerWorker.loadBookUrl({ const workerId = this.readerWorker.loadBookUrl({
url: request.url, url: request.url,
enableSitesFilter: (request.hasOwnProperty('enableSitesFilter') ? request.enableSitesFilter : true) enableSitesFilter: (request.hasOwnProperty('enableSitesFilter') ? request.enableSitesFilter : true),
skipCheck: (request.hasOwnProperty('skipCheck') ? request.skipCheck : false),
isText: (request.hasOwnProperty('isText') ? request.isText : false),
}); });
const state = this.workerState.getState(workerId); const state = this.workerState.getState(workerId);
return (state ? state : {}); return (state ? state : {});

View File

@@ -200,7 +200,7 @@ class ConvertHtml extends ConvertBase {
titleInfo['book-title'] = title; titleInfo['book-title'] = title;
//подозрение на чистый текст, надо разбить на параграфы //подозрение на чистый текст, надо разбить на параграфы
if (isText || pars.length < buf.length/2000) { if (isText || (buf.length > 30*1024 && pars.length < buf.length/2000)) {
let total = 0; let total = 0;
let count = 1; let count = 1;
for (let i = 0; i < spaceCounter.length; i++) { for (let i = 0; i < spaceCounter.length; i++) {