-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
105 changed files
with
8,105 additions
and
5,407 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
/node_modules | ||
/server/data | ||
/server/public | ||
/server/ipfs | ||
/dist | ||
/node_modules | ||
/server/.liberama* | ||
/dist | ||
dev*.sh | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,43 +1,156 @@ | ||
# Liberama | ||
|
||
Браузерная онлайн-читалка книг и децентрализованная библиотека. | ||
Браузерная онлайн-читалка книг. | ||
|
||
Читалка <img src="https://omnireader.ru/favicon.ico" width="14px"/>[OmniReader](https://omnireader.ru) является частью данного проекта, размещенной на VPS: | ||
Выглядит соледующим образом: <img src="https://omnireader.ru/favicon.ico" width="14px"/>[OmniReader](https://omnireader.ru) | ||
|
||
![](docs/assets/face.jpg) | ||
![](docs/assets/reader.jpg) | ||
|
||
## VPS | ||
Для разворачивания читалки на чистом VPS с нуля смотрите [docs/omnireader.ru](docs/omnireader.ru/README.md) | ||
При запуске приложения, по умолчанию веб-сервер доступен по адресу [http://127.0.0.1:44080](http://127.0.0.1:44080) | ||
|
||
## Сборка проекта | ||
Необходима версия node.js не ниже 14. | ||
Для указания местоположения рабочей директории, воспользуйтесь [параметрами командной строки](#cli). | ||
Дополнительные параметры сервера настраиваются в [конфигурационном файле](#config). | ||
|
||
``` | ||
$ git clone https://github.com/bookpauk/liberama | ||
$ cd liberama | ||
$ npm i | ||
``` | ||
[Отблагодарить автора проекта](https://donatty.com/liberama) | ||
|
||
## | ||
* [Возможности читалки](#capabilities) | ||
* [Использование](#usage) | ||
* [Параметры командной строки](#cli) | ||
* [Конфигурация](#config) | ||
* [Разворачивание на VPS](#vps) | ||
* [Сборка проекта](#build) | ||
* [Разработка](#development) | ||
|
||
<a id="capabilities" /> | ||
|
||
## Возможности читалки | ||
- загрузка любой страницы интернета | ||
- синхронизация данных (настроек и читаемых книг) между различными устройствами | ||
- работа в автономном режиме (без связи) | ||
- изменение цвета фона, текста, размер и тип шрифта и прочее | ||
- установка и запоминание текущей позиции и настроек в браузере и на сервере | ||
- кэширование файлов книг на клиенте и на сервере | ||
- открытие книг с локального диска | ||
- плавный скроллинг текста | ||
- анимация перелистывания | ||
- поиск по тексту и копирование фрагмента | ||
- запоминание недавних книг, скачивание книги из читалки в формате fb2 | ||
- управление кликом и с клавиатуры | ||
- регистрация не требуется | ||
- поддерживаемые браузеры: Google Chrome, Mozilla Firefox последних версий | ||
- релизы сервера под Linux, MacOS и Windows | ||
|
||
<a id="usage" /> | ||
|
||
## Использование | ||
Приложение представляет собой полноценный веб-сервер в виде единого исполнимого файла. | ||
При первом запуске, будет создана рабочая директория `.liberama` (по умолчанию - в той же папке, где исполнимый файл), | ||
в которой хранится конфигурационный файл `config.json`, файлы веб-приложения, файлы базы данных, журналы и прочее. | ||
Изменить рабочую директорию можно с помощью cli-параметра --app-dir | ||
|
||
### Windows | ||
По умолчанию веб-интерфейс будет доступен по адресу [http://127.0.0.1:44080](http://127.0.0.1:44080) | ||
|
||
<a id="cli" /> | ||
|
||
### Параметры командной строки | ||
Запустите `liberama --help`, чтобы увидеть список опций: | ||
```console | ||
Usage: liberama [options] | ||
|
||
Options: | ||
--help Показать опции командной строки | ||
--app-dir=<dirpath> Задать рабочую директорию, по умолчанию: <execDir>/.liberama | ||
--auto-repair Починить БД приложения при запуске, если она повреждена | ||
``` | ||
$ npm run build:win | ||
|
||
<a id="config" /> | ||
|
||
### Конфигурация | ||
При первом запуске в рабочей директории будет создан конфигурационный файл `config.json`: | ||
```js | ||
{ | ||
// Максимальный размер файла загружаемой книги (в байтах) | ||
"maxUploadFileSize": 52428800, | ||
|
||
// Максимальный размер каталога <appDir>/public-files/tmp для хранения конвертированных | ||
// файлов книг пользователей (в байтах) | ||
"maxTempPublicDirSize": 536870912, | ||
|
||
// Максимальный размер каталога <appDir>/public-files/upload для хранения | ||
// загруженных в /upload (кнопка "Загрузить файл с диска") файлов книг пользователей (в байтах) | ||
"maxUploadPublicDirSize": 209715200, | ||
|
||
// Использование внешних конвертеров (только в среде Linux) | ||
// Без них читалка может работать только с файлами формата fb2, txt, html, xml | ||
// Инструкции установки внешних конвертеров см. в docs/omnireader.ru/README.md | ||
"useExternalBookConverter": false, | ||
|
||
// Настройки для списка серверов. | ||
// Приложение может запускать одновременно несколько веб-серверов на разных портах | ||
"servers": [ | ||
{ | ||
// Произвольное название сервера | ||
"serverName": "1", | ||
|
||
// Режим работы сервера: | ||
// "reader" - обычная читалка | ||
// "omnireader" - модификации для сайта omnireader.ru | ||
// "liberama" - модификации для сайта liberama.top | ||
// "book_update_checker" - сервер обновлений | ||
"mode": "reader", | ||
|
||
// Хост, порт сервера | ||
"ip": "0.0.0.0", | ||
"port": "44080" | ||
} | ||
], | ||
|
||
// Настройки удаленного хранилища | ||
"remoteStorage": false, | ||
|
||
// Для веб-приложения: включение/выключение работы с сервером обновлений | ||
"bucEnabled": false, | ||
|
||
// Подключение себя, как клиента, к серверу обновлений | ||
"bucServer": false | ||
} | ||
``` | ||
|
||
### Linux | ||
При необходимости, можно настроить нужный параметр в этом файле вручную. | ||
|
||
<a id="vps" /> | ||
|
||
## VPS | ||
Для разворачивания читалки на чистом VPS с нуля смотрите [docs/omnireader.ru](docs/omnireader.ru/README.md) | ||
|
||
<a id="build" /> | ||
|
||
### Сборка проекта | ||
Сборка только в среде Linux. | ||
Необходима версия node.js не ниже 16. | ||
|
||
Для сборки linux-arm64 необходимо предварительно установить [QEMU](https://wiki.debian.org/QemuUserEmulation). | ||
|
||
```sh | ||
git clone https://github.com/bookpauk/liberama | ||
cd liberama | ||
npm i | ||
``` | ||
$ npm run build:linux | ||
|
||
#### Релизы | ||
```sh | ||
npm run release | ||
``` | ||
|
||
Результат сборки будет доступен в каталоге `dist/linux|win` в виде исполнимого (standalone) файла | ||
Результат сборки будет доступен в каталоге `dist/release` | ||
|
||
<a id="development" /> | ||
|
||
### Разработка | ||
```sh | ||
npm run dev | ||
``` | ||
$ npm run dev | ||
``` | ||
|
||
## Помочь проекту | ||
|
||
* bitcoin: bc1q3tyumaj648pp2e69jalsez2lnt462ttc33nup9 | ||
* litecoin: MP39Riec4oSNB3XMjiquKoLWxbufRYNXxZ | ||
* monero: 8BQPnvHcPSHM5gMQsmuypDgx9NNsYqwXKfDDuswEyF2Q2ewQSfd2pkK6ydH2wmMyq2JViZvy9DQ35hLMx7g72mFWNJTPtnz | ||
Связаться с автором проекта: [bookpauk@gmail.com](mailto:bookpauk@gmail.com) |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
const fs = require('fs-extra'); | ||
const path = require('path'); | ||
const { execSync } = require('child_process'); | ||
|
||
const showdown = require('showdown'); | ||
|
||
const platform = process.argv[2]; | ||
|
||
const distDir = path.resolve(__dirname, '../dist'); | ||
const tmpDir = `${distDir}/tmp`; | ||
const publicDir = `${tmpDir}/public`; | ||
const outDir = `${distDir}/${platform}`; | ||
|
||
async function build() { | ||
if (!platform) | ||
throw new Error(`Please set platform`); | ||
|
||
await fs.emptyDir(outDir); | ||
|
||
//добавляем readme в релиз | ||
let readme = await fs.readFile(path.resolve(__dirname, '../README.md'), 'utf-8'); | ||
const converter = new showdown.Converter(); | ||
readme = converter.makeHtml(readme); | ||
await fs.writeFile(`${outDir}/readme.html`, readme); | ||
|
||
// перемещаем public на место | ||
if (await fs.pathExists(publicDir)) { | ||
|
||
const zipFile = `${tmpDir}/public.zip`; | ||
const jsonFile = `${distDir}/public.json`;//distDir !!! | ||
|
||
await fs.remove(zipFile); | ||
execSync(`zip -r ${zipFile} .`, {cwd: publicDir, stdio: 'inherit'}); | ||
|
||
const data = (await fs.readFile(zipFile)).toString('base64'); | ||
await fs.writeFile(jsonFile, JSON.stringify({data})); | ||
} else { | ||
throw new Error(`publicDir: ${publicDir} does not exist`); | ||
} | ||
} | ||
|
||
async function main() { | ||
try { | ||
await build(); | ||
} catch(e) { | ||
console.error(e); | ||
process.exit(1); | ||
} | ||
} | ||
|
||
main(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
const fs = require('fs-extra'); | ||
const path = require('path'); | ||
const { execSync } = require('child_process'); | ||
|
||
const pckg = require('../package.json'); | ||
|
||
const distDir = path.resolve(__dirname, '../dist'); | ||
const outDir = `${distDir}/release`; | ||
|
||
async function makeRelease(target) { | ||
const srcDir = `${distDir}/${target}`; | ||
|
||
if (await fs.pathExists(srcDir)) { | ||
const zipFile = `${outDir}/${pckg.name}-${pckg.version}-${target}.zip`; | ||
|
||
execSync(`zip -r ${zipFile} .`, {cwd: srcDir, stdio: 'inherit'}); | ||
} | ||
} | ||
|
||
async function main() { | ||
try { | ||
await fs.emptyDir(outDir); | ||
await makeRelease('win'); | ||
await makeRelease('linux'); | ||
await makeRelease('linux-arm64'); | ||
await makeRelease('macos'); | ||
} catch(e) { | ||
console.error(e); | ||
process.exit(1); | ||
} | ||
} | ||
|
||
main(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.