Merge branch 'release/1.2.0'
This commit is contained in:
@@ -115,6 +115,10 @@ Options:
|
||||
|
||||
// Подключение себя, как клиента, к серверу обновлений
|
||||
"bucServer": false
|
||||
|
||||
// Сcылка для открытия в новом окне брауpера по клику на кнопку "Сетевая библиотека"
|
||||
// Если не задано, открывается внутренний менеджер библиотек с использванием фрейма
|
||||
"networkLibraryLink": "http://samlib.ru/"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ class Misc {
|
||||
async loadConfig() {
|
||||
|
||||
const query = {params: [
|
||||
'name', 'version', 'mode', 'maxUploadFileSize', 'useExternalBookConverter', 'acceptFileExt', 'bucEnabled', 'branch',
|
||||
'name', 'version', 'mode', 'maxUploadFileSize', 'useExternalBookConverter', 'acceptFileExt', 'bucEnabled', 'branch', 'networkLibraryLink',
|
||||
]};
|
||||
|
||||
const config = await wsc.message(await wsc.send(Object.assign({action: 'get-config'}, query)));
|
||||
|
||||
@@ -1032,6 +1032,11 @@ class Reader {
|
||||
}
|
||||
|
||||
libsToogle() {
|
||||
if (this.config.networkLibraryLink) {
|
||||
window.open(this.config.networkLibraryLink, '_blank');
|
||||
return;
|
||||
}
|
||||
|
||||
this.libsActive = !this.libsActive;
|
||||
if (this.libsActive) {
|
||||
this.$refs.libsPage.init();//no await
|
||||
@@ -1379,6 +1384,7 @@ class Reader {
|
||||
found = (found ? _.cloneDeep(found) : found);
|
||||
|
||||
if (found) {
|
||||
//если такой файл уже не загружен (path не совпадают)
|
||||
if (wasOpened.sameBookKey != found.sameBookKey) {
|
||||
//спрашиваем, надо ли объединить файлы
|
||||
const askResult = bookManager.keysEqual(found.path, addedBook.path) ||
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
|
||||
<div
|
||||
class="del-button self-end row justify-center items-center clickable"
|
||||
@click="handleDel(item.key)"
|
||||
@click="handleDel(item)"
|
||||
>
|
||||
<q-icon class="la la-times" size="12px" />
|
||||
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
|
||||
@@ -212,7 +212,7 @@
|
||||
<div
|
||||
v-show="showArchive"
|
||||
class="restore-button self-start row justify-center items-center clickable"
|
||||
@click="handleRestore(item.key)"
|
||||
@click="handleRestore(item)"
|
||||
>
|
||||
<q-icon class="la la-arrow-left" size="14px" />
|
||||
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
|
||||
@@ -593,21 +593,46 @@ class RecentBooksPage {
|
||||
}
|
||||
}
|
||||
|
||||
async handleDel(key) {
|
||||
if (!this.showArchive) {
|
||||
await bookManager.delRecentBook({key});
|
||||
this.$root.notify.info('Перенесено в архив');
|
||||
async handleDel(item) {
|
||||
if (item.group) {
|
||||
const keys = [{key: item.key}];
|
||||
for (const book of item.group)
|
||||
keys.push({key: book.key});
|
||||
|
||||
if (!this.showArchive) {
|
||||
await bookManager.delRecentBooks(keys);
|
||||
this.$root.notify.info(`Группа книг (всего ${keys.length}) перенесена в архив`);
|
||||
} else {
|
||||
if (await this.$root.stdDialog.confirm(`Подтвердите удаление группы книг (всего ${keys.length}) из архива:`, ' ')) {
|
||||
await bookManager.delRecentBooks(keys, 2);
|
||||
this.$root.notify.info('Группа книг удалена безвозвратно');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (await this.$root.stdDialog.confirm('Подтвердите удаление из архива:', ' ')) {
|
||||
await bookManager.delRecentBook({key}, 2);
|
||||
this.$root.notify.info('Удалено безвозвратно');
|
||||
if (!this.showArchive) {
|
||||
await bookManager.delRecentBooks([{key: item.key}]);
|
||||
this.$root.notify.info('Книга перенесена в архив');
|
||||
} else {
|
||||
if (await this.$root.stdDialog.confirm('Подтвердите удаление книги из архива:', ' ')) {
|
||||
await bookManager.delRecentBooks([{key: item.key}], 2);
|
||||
this.$root.notify.info('Книга удалено безвозвратно');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async handleRestore(key) {
|
||||
await bookManager.restoreRecentBook({key});
|
||||
this.$root.notify.info('Восстановлено из архива');
|
||||
async handleRestore(item) {
|
||||
if (item.group) {
|
||||
const keys = [{key: item.key}];
|
||||
for (const book of item.group)
|
||||
keys.push({key: book.key});
|
||||
|
||||
await bookManager.restoreRecentBooks(keys);
|
||||
this.$root.notify.info(`Группа книг (всего ${keys.length}) восстановлена из архива`);
|
||||
} else {
|
||||
await bookManager.restoreRecentBooks([{key: item.key}]);
|
||||
this.$root.notify.info('Книга восстановлена из архива');
|
||||
}
|
||||
}
|
||||
|
||||
async loadBook(item, force = false) {
|
||||
|
||||
@@ -467,7 +467,7 @@ class BookManager {
|
||||
async getRecentBook(value) {
|
||||
return this.recent[value.key];
|
||||
}
|
||||
|
||||
/*
|
||||
async delRecentBook(value, delFlag = 1) {
|
||||
const item = this.recent[value.key];
|
||||
item.deleted = delFlag;
|
||||
@@ -479,13 +479,37 @@ class BookManager {
|
||||
await this.recentSetItem(item);
|
||||
this.emit('recent-deleted', value.key);
|
||||
}
|
||||
*/
|
||||
async delRecentBooks(values, delFlag = 1) {
|
||||
for (const value of values) {
|
||||
const item = this.recent[value.key];
|
||||
item.deleted = delFlag;
|
||||
|
||||
if (this.recentLastKey == value.key) {
|
||||
await this.recentSetLastKey(null);
|
||||
}
|
||||
|
||||
await this.recentSetItem(item);
|
||||
}
|
||||
|
||||
this.emit('recent-deleted');
|
||||
}
|
||||
/*
|
||||
async restoreRecentBook(value) {
|
||||
const item = this.recent[value.key];
|
||||
item.deleted = 0;
|
||||
|
||||
await this.recentSetItem(item);
|
||||
}
|
||||
*/
|
||||
async restoreRecentBooks(values) {
|
||||
for (const value of values) {
|
||||
const item = this.recent[value.key];
|
||||
item.deleted = 0;
|
||||
|
||||
await this.recentSetItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
async setCheckBuc(value, checkBuc) {
|
||||
const item = this.recent[value.key];
|
||||
|
||||
@@ -1,4 +1,18 @@
|
||||
export const versionHistory = [
|
||||
{
|
||||
version: '1.2.0',
|
||||
releaseDate: '2024-03-25',
|
||||
showUntil: '2024-03-24',
|
||||
content:
|
||||
`
|
||||
<ul>
|
||||
<li>в списке загруженных, книга в архив (из архива) переносится теперь со всей группой своих версий</li>
|
||||
<li>добавлена возможность задавать в конфиге любую ссылку для кнопки "Сетевая библиотека", параматр networkLibraryLink (#47)</li>
|
||||
</ul>
|
||||
|
||||
`
|
||||
},
|
||||
|
||||
{
|
||||
version: '1.1.3',
|
||||
releaseDate: '2023-02-06',
|
||||
|
||||
8635
package-lock.json
generated
8635
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
66
package.json
66
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "liberama",
|
||||
"version": "1.1.3",
|
||||
"version": "1.2.0",
|
||||
"author": "Book Pauk <bookpauk@gmail.com>",
|
||||
"license": "CC0-1.0",
|
||||
"repository": "bookpauk/liberama",
|
||||
@@ -25,41 +25,41 @@
|
||||
"scripts": "server/config/*.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.20.5",
|
||||
"@babel/eslint-parser": "^7.19.1",
|
||||
"@babel/eslint-plugin": "^7.19.1",
|
||||
"@babel/plugin-proposal-decorators": "^7.20.5",
|
||||
"@babel/preset-env": "^7.20.2",
|
||||
"@babel/core": "^7.23.5",
|
||||
"@babel/eslint-parser": "^7.23.3",
|
||||
"@babel/eslint-plugin": "^7.23.5",
|
||||
"@babel/plugin-proposal-decorators": "^7.23.5",
|
||||
"@babel/preset-env": "^7.23.5",
|
||||
"@vue/compiler-sfc": "^3.2.22",
|
||||
"babel-loader": "^9.1.0",
|
||||
"babel-loader": "^9.1.3",
|
||||
"copy-webpack-plugin": "^11.0.0",
|
||||
"css-loader": "^6.7.3",
|
||||
"css-loader": "^6.8.1",
|
||||
"css-minimizer-webpack-plugin": "^4.2.2",
|
||||
"eslint": "^8.29.0",
|
||||
"eslint-plugin-vue": "^9.8.0",
|
||||
"html-webpack-plugin": "^5.5.0",
|
||||
"mini-css-extract-plugin": "^2.7.2",
|
||||
"pkg": "^5.8.0",
|
||||
"eslint": "^8.55.0",
|
||||
"eslint-plugin-vue": "^9.19.2",
|
||||
"html-webpack-plugin": "^5.5.4",
|
||||
"mini-css-extract-plugin": "^2.7.6",
|
||||
"pkg": "^5.8.1",
|
||||
"showdown": "^2.1.0",
|
||||
"terser-webpack-plugin": "^5.3.6",
|
||||
"vue-eslint-parser": "^9.1.0",
|
||||
"vue-loader": "^17.0.1",
|
||||
"terser-webpack-plugin": "^5.3.9",
|
||||
"vue-eslint-parser": "^9.3.2",
|
||||
"vue-loader": "^17.3.1",
|
||||
"vue-style-loader": "^4.1.3",
|
||||
"webpack": "^5.75.0",
|
||||
"webpack-cli": "^5.0.1",
|
||||
"webpack-dev-middleware": "^6.0.1",
|
||||
"webpack-hot-middleware": "^2.25.3",
|
||||
"webpack-merge": "^5.8.0",
|
||||
"workbox-webpack-plugin": "^6.5.4"
|
||||
"webpack": "^5.89.0",
|
||||
"webpack-cli": "^5.1.4",
|
||||
"webpack-dev-middleware": "^6.1.1",
|
||||
"webpack-hot-middleware": "^2.25.4",
|
||||
"webpack-merge": "^5.10.0",
|
||||
"workbox-webpack-plugin": "^6.6.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@quasar/extras": "^1.15.8",
|
||||
"@vue/compat": "^3.2.45",
|
||||
"@quasar/extras": "^1.16.9",
|
||||
"@vue/compat": "^3.3.10",
|
||||
"axios": "^0.27.2",
|
||||
"base-x": "^4.0.0",
|
||||
"chardet": "^1.5.0",
|
||||
"chardet": "^1.6.0",
|
||||
"compression": "^1.7.4",
|
||||
"dayjs": "^1.11.7",
|
||||
"dayjs": "^1.11.10",
|
||||
"express": "^4.18.2",
|
||||
"fg-loadcss": "^3.1.0",
|
||||
"fs-extra": "^10.1.0",
|
||||
@@ -68,23 +68,23 @@
|
||||
"jembadb": "^5.1.7",
|
||||
"localforage": "^1.10.0",
|
||||
"lodash": "^4.17.21",
|
||||
"minimist": "^1.2.7",
|
||||
"minimist": "^1.2.8",
|
||||
"multer": "^1.4.5-lts.1",
|
||||
"pako": "^2.1.0",
|
||||
"path-browserify": "^1.0.1",
|
||||
"pidusage": "^3.0.2",
|
||||
"quasar": "^2.10.2",
|
||||
"quasar": "^2.14.1",
|
||||
"safe-buffer": "^5.2.1",
|
||||
"sanitize-html": "^2.8.0",
|
||||
"sanitize-html": "^2.11.0",
|
||||
"sjcl": "^1.0.8",
|
||||
"tar-fs": "^2.1.1",
|
||||
"unbzip2-stream": "^1.4.3",
|
||||
"vue": "^3.2.37",
|
||||
"vue-router": "^4.1.6",
|
||||
"vue-router": "^4.2.5",
|
||||
"vuex": "^4.1.0",
|
||||
"vuex-persist": "^3.1.3",
|
||||
"webdav": "^4.11.2",
|
||||
"ws": "^8.11.0",
|
||||
"zip-stream": "^4.1.0"
|
||||
"webdav": "^4.11.3",
|
||||
"ws": "^8.14.2",
|
||||
"zip-stream": "^4.1.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ module.exports = {
|
||||
|
||||
useExternalBookConverter: false,
|
||||
acceptFileExt: '.fb2, .fb3, .html, .txt, .zip, .bz2, .gz, .rar, .epub, .mobi, .rtf, .doc, .docx, .pdf, .djvu, .jpg, .jpeg, .png',
|
||||
webConfigParams: ['name', 'version', 'mode', 'maxUploadFileSize', 'useExternalBookConverter', 'acceptFileExt', 'bucEnabled', 'branch'],
|
||||
webConfigParams: ['name', 'version', 'mode', 'maxUploadFileSize', 'useExternalBookConverter', 'acceptFileExt', 'bucEnabled', 'branch', 'networkLibraryLink'],
|
||||
|
||||
jembaDb: [
|
||||
{
|
||||
@@ -74,5 +74,6 @@ module.exports = {
|
||||
accessToken: '',
|
||||
}
|
||||
*/
|
||||
networkLibraryLink: '',
|
||||
};
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ const propsToSave = [
|
||||
'remoteStorage',
|
||||
'bucEnabled',
|
||||
'bucServer',
|
||||
'networkLibraryLink',
|
||||
];
|
||||
|
||||
let instance = null;
|
||||
|
||||
Reference in New Issue
Block a user