diff --git a/CHANGELOG.md b/CHANGELOG.md
index d4cb90e..e806d0f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+1.5.4 / 2023-04-12
+
+- Добавлена возможность поиска по типу файла
+- Улучшена работа с inpx, теперь понимает файлы в каталогах (без zip-архива)
+- В readme добавлен раздел "Запуск без сборки релиза" для запуска inpx-web на любых платформах
+- Исправления мелких багов
+
1.5.3 / 2023-03-02
- OPDS: исправление проблемы поиска для koreader
diff --git a/README.md b/README.md
index eb574cd..d0957c7 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,8 @@ OPDS-сервер доступен по адресу [http://127.0.0.1:12380/opd
* [Удаленная библиотека](#remotelib)
* [Фильтр по авторам и книгам](#filter)
* [Настройка https с помощью nginx](#https)
-* [Сборка проекта](#build)
+* [Сборка релизов](#build)
+* [Запуск без сборки релиза](#native_run)
* [Разработка](#development)
@@ -321,7 +322,7 @@ sudo service nginx reload
-### Сборка проекта
+### Сборка релизов
Сборка только в среде Linux.
Необходима версия node.js не ниже 16.
@@ -331,15 +332,36 @@ sudo service nginx reload
git clone https://github.com/bookpauk/inpx-web
cd inpx-web
npm i
-```
-
-#### Релизы
-```sh
npm run release
```
Результат сборки будет доступен в каталоге `dist/release`
+
+
+### Запуск без сборки релиза
+Т.к. сборщик pkg поддерживает не все платформы, то не всегда удается собрать релиз.
+Однако, можно скачать и запустить inpx-web нативным путем, с помощью nodejs.
+Ниже пример для Ubuntu, для других линуксов различия не принципиальны:
+
+```sh
+# установка nodejs v16 и выше:
+curl -s https://deb.nodesource.com/setup_16.x | sudo bash
+sudo apt install nodejs -y
+
+# подготовка
+git clone https://github.com/bookpauk/inpx-web
+cd inpx-web
+npm i
+npm run build:client && node build/prepkg.js linux
+
+# удалим файл development-среды, чтобы запускался в production-режиме
+rm ./server/config/application_env
+
+# запуск inpx-web, тут же будет создан каталог .inpx-web
+node server --app-dir=.inpx-web
+```
+
### Разработка
diff --git a/client/components/Search/AuthorList/AuthorList.vue b/client/components/Search/AuthorList/AuthorList.vue
index bc22ac2..271b51d 100644
--- a/client/components/Search/AuthorList/AuthorList.vue
+++ b/client/components/Search/AuthorList/AuthorList.vue
@@ -126,9 +126,9 @@
-
![]()
-
diff --git a/client/components/Search/ExtendedList/ExtendedList.vue b/client/components/Search/ExtendedList/ExtendedList.vue
index 19a19d5..b34035a 100644
--- a/client/components/Search/ExtendedList/ExtendedList.vue
+++ b/client/components/Search/ExtendedList/ExtendedList.vue
@@ -14,9 +14,9 @@
-
+
- Поиск не дал результатов
+ {{ (error ? error : 'Поиск не дал результатов') }}
@@ -74,6 +74,7 @@ class ExtendedList extends BaseList {
if (this.refreshing)
return;
+ this.error = '';
this.refreshing = true;
(async() => {
@@ -103,7 +104,12 @@ class ExtendedList extends BaseList {
this.highlightPageScroller(query);
}
} catch (e) {
- this.$root.stdDialog.alert(e.message, 'Ошибка');
+ this.list.queryFound = 0;
+ this.list.totalFound = 0;
+ this.searchResult = {found: []};
+ await this.updateTableData();
+ //this.$root.stdDialog.alert(e.message, 'Ошибка');
+ this.error = `Ошибка: ${e.message}`;
}
}
} finally {
diff --git a/client/components/Search/Search.vue b/client/components/Search/Search.vue
index 90d71e9..585e79f 100644
--- a/client/components/Search/Search.vue
+++ b/client/components/Search/Search.vue
@@ -160,7 +160,7 @@
@@ -171,6 +171,21 @@
{{ librateNames }}
+
+
+
+
+
+
+
+
+ {{ search.ext }}
+
+
+{{ extendedParamsMessage }}
@@ -331,6 +346,7 @@
+
@@ -351,6 +367,7 @@ import SelectGenreDialog from './SelectGenreDialog/SelectGenreDialog.vue';
import SelectLangDialog from './SelectLangDialog/SelectLangDialog.vue';
import SelectLibRateDialog from './SelectLibRateDialog/SelectLibRateDialog.vue';
import SelectDateDialog from './SelectDateDialog/SelectDateDialog.vue';
+import SelectExtDialog from './SelectExtDialog/SelectExtDialog.vue';
import BookInfoDialog from './BookInfoDialog/BookInfoDialog.vue';
import SelectExtSearchDialog from './SelectExtSearchDialog/SelectExtSearchDialog.vue';
@@ -384,6 +401,7 @@ const componentOptions = {
SelectLangDialog,
SelectLibRateDialog,
SelectDateDialog,
+ SelectExtDialog,
BookInfoDialog,
SelectExtSearchDialog,
Dialog,
@@ -495,6 +513,7 @@ class Search {
selectLangDialogVisible = false;
selectLibRateDialogVisible = false;
selectDateDialogVisible = false;
+ selectExtDialogVisible = false;
bookInfoDialogVisible = false;
selectExtSearchDialogVisible = false;
@@ -531,6 +550,7 @@ class Search {
genreTree = [];
genreMap = new Map();
langList = [];
+ extList = [];
genreTreeInpxHash = '';
showTooltips = true;
@@ -561,7 +581,7 @@ class Search {
this.commit = this.$store.commit;
this.api = this.$root.api;
- this.generateDefaults(this.search, ['author', 'series', 'title', 'genre', 'lang', 'date', 'librate']);
+ this.generateDefaults(this.search, ['author', 'series', 'title', 'genre', 'lang', 'date', 'librate', 'ext']);
this.search.setDefaults(this.search);
this.loadSettings();
@@ -705,6 +725,7 @@ class Search {
result.push(s.genre ? 'Жанр' : '');
result.push(s.date ? 'Дата поступления' : '');
result.push(s.librate ? 'Оценка' : '');
+ result.push(s.ext ? 'Тип файла' : '');
return result.filter(s => s).join(', ');
}
@@ -941,6 +962,11 @@ class Search {
this.selectLibRateDialogVisible = true;
}
+ selectExt() {
+ this.hideTooltip();
+ this.selectExtDialogVisible = true;
+ }
+
selectExtSearch() {
this.hideTooltip();
this.selectExtSearchDialogVisible = true;
@@ -1079,6 +1105,7 @@ class Search {
lang: (typeof(query.lang) == 'string' ? query.lang : this.langDefault),
date: query.date,
librate: query.librate,
+ ext: query.ext,
page: parseInt(query.page, 10),
limit: parseInt(query.limit, 10) || this.search.limit,
@@ -1170,6 +1197,7 @@ class Search {
}
this.langList = result.langList;
+ this.extList = result.extList;
this.genreTreeInpxHash = result.inpxHash;
}
} catch (e) {
diff --git a/client/components/Search/SelectExtDialog/SelectExtDialog.vue b/client/components/Search/SelectExtDialog/SelectExtDialog.vue
new file mode 100644
index 0000000..60c3c14
--- /dev/null
+++ b/client/components/Search/SelectExtDialog/SelectExtDialog.vue
@@ -0,0 +1,187 @@
+