Добавлен запрос на объединение позиций при

обнаружении похожего файла в загруженных
This commit is contained in:
Book Pauk
2022-07-10 19:54:00 +07:00
parent 25cad81c50
commit 33fc553c55
2 changed files with 45 additions and 5 deletions

View File

@@ -1090,10 +1090,10 @@ class Reader {
progress.show();
progress.setState({state: 'parse'});
// есть ли среди недавних
// есть ли среди загруженных
let wasOpened = bookManager.findRecentByUrlAndPath(url, opts.path);
wasOpened = (wasOpened ? _.cloneDeep(wasOpened) : {});
wasOpened = Object.assign(wasOpened, {
path: (opts.path !== undefined ? opts.path : wasOpened.path),
bookPos: (opts.bookPos !== undefined ? opts.bookPos : wasOpened.bookPos),
@@ -1166,6 +1166,31 @@ class Reader {
progress.setState({progress: prog});
});
// sameBookKey
if (url.indexOf('disk://') == 0) {
//ищем такой файл в загруженных
let found = bookManager.findRecentBySameBookKey(wasOpened.uploadFileName);
found = (found ? _.cloneDeep(found) : found);
if (found) {
//спрашиваем, надо ли объединить файлы
const askResult = (wasOpened.path == found.path) ||
await this.$root.stdDialog.askYesNo(`
Файл с именем "${wasOpened.uploadFileName}" уже есть в загруженных.
<br>Объединить позицию?`, 'Найдена похожая книга');
if (askResult) {
wasOpened.bookPos = found.bookPos;
wasOpened.bookPosSeen = found.bookPosSeen;
wasOpened.sameBookKey = found.sameBookKey;
}
} else {
wasOpened.sameBookKey = wasOpened.uploadFileName;
}
} else {
wasOpened.sameBookKey = addedBook.url;
}
// добавляем в историю
await bookManager.setRecentBook(Object.assign(wasOpened, addedBook));
this.mostRecentBook();
@@ -1217,7 +1242,7 @@ class Reader {
progress.hide(); this.progressActive = false;
await this.loadBook({url, uploadFileName: opts.file.name, force: true});
await this._loadBook({url, uploadFileName: opts.file.name, force: true});
} catch (e) {
progress.hide(); this.progressActive = false;
this.loaderActive = true;

View File

@@ -499,8 +499,23 @@ class BookManager {
for (const key in this.recent) {
const book = this.recent[key];
if (!book.deleted && book.url == url && book.addTime > max) {
max = book.addTime;
if (!book.deleted && book.url == url && book.touchTime > max) {
max = book.touchTime;
result = book;
}
}
return result;
}
findRecentBySameBookKey(sameKey) {
let max = 0;
let result = null;
for (const key in this.recent) {
const book = this.recent[key];
if (!book.deleted && book.sameBookKey == sameKey && book.touchTime > max) {
max = book.touchTime;
result = book;
}
}