Skip to content

Commit 9991f62

Browse files
committed
feat: 新增本地书仓功能,新增自定义书籍封面功能,新增用户上限和用户书籍上限
1 parent e776f4f commit 9991f62

File tree

15 files changed

+878
-31
lines changed

15 files changed

+878
-31
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
- RSS订阅 <br/>
4141
- 定时更新书架 <br/>
4242
- 并发搜书 <br/>
43+
- 本地书仓 <br/>
4344
</details>
4445

4546
## 下载与安装

doc.md

+14-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
- [文档](#文档)
44
- [免责声明(Disclaimer)](#免责声明disclaimer)
55
- [数据存储](#数据存储)
6+
- [本地书仓](#本地书仓)
67
- [自定义阅读主题](#自定义阅读主题)
78
- [自定义样式](#自定义样式)
89
- [接口服务配置](#接口服务配置)
@@ -13,6 +14,8 @@
1314
- [手机端](#手机端)
1415
- [服务器版](#服务器版)
1516
- [Docker版](#docker版)
17+
- [Docker-Compose版(推荐)](#docker-compose版推荐)
18+
- [Nginx反向代理](#nginx反向代理)
1619
- [开发编译](#开发编译)
1720
- [编译脚本](#编译脚本)
1821
- [编译前端](#编译前端)
@@ -77,9 +80,16 @@ storage
7780
│ │ |── 2d44d0ec2397b6c1d4010b97d914031e # A书源章节缓存目录
7881
│ │ └── 2d44d0ec2397b6c1d4010b97d914031e.json # A书源目录列表
7982
│ └── users.json # 用户列表
83+
├── localStore # 本地书仓,所有用户共享(用户需要开启书仓权限,才能访问)
84+
|── 斗破苍穹.txt # 本地书仓书籍
85+
│ └── 斗罗大陆.txt # 本地书仓书籍
8086
└── windowConfig.json # 窗口配置文件
8187
```
8288

89+
### 本地书仓
90+
91+
`storage/localStore` 中可以集中存放管理本地书籍,开启访问权限的用户可以在 `页面-浏览书仓` 中选择批量导入到自己的书架进行阅读。
92+
8393
## 自定义阅读主题
8494

8595
书架页面仅支持白天模式和黑夜模式。
@@ -116,6 +126,8 @@ reader:
116126
proxyUsername: "" # 代理鉴权 用户名
117127
proxyPassword: "" # 代理鉴权 密码
118128
cacheChapterContent: false # 是否缓存章节内容
129+
userLimit: 50 # 用户上限,最大 50
130+
userBookLimit: 200 # 用户书籍上限,默认最大 200
119131

120132
server:
121133
port: 8080 # 监听端口
@@ -283,7 +295,7 @@ server {
283295
listen 80;
284296
server_name 域名;
285297
#开启ssl解除注释
286-
#不使用宝塔获取证书脚本 https://github.com/Misaka-blog/acme-1key
298+
#不使用宝塔获取证书脚本 https://github.com/Misaka-blog/acme-1key
287299
#listen 443 ssl;
288300
#ssl_certificate 证书.cer;
289301
#ssl_certificate_key 证书.key;
@@ -304,7 +316,7 @@ server {
304316
gzip_comp_level 6; #设置数据的压缩等级,等级为1-9,压缩比从小到大
305317
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml; #设置需要压缩的数据格式
306318
gzip_vary on;
307-
319+
308320
location / {
309321
proxy_pass http://127.0.0.1:4396; #端口自行修改为映射端口
310322
proxy_http_version 1.1;

src/main/java/com/htmake/reader/api/YueduApi.kt

+12
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,18 @@ class YueduApi : RestVerticle() {
212212
router.post("/reader3/saveBookGroup").coroutineHandler { bookController.saveBookGroup(it) }
213213
router.post("/reader3/deleteBookGroup").coroutineHandler { bookController.deleteBookGroup(it) }
214214

215+
// 书仓功能
216+
// 获取书仓文件列表
217+
router.get("/reader3/getLocalStoreFileList").coroutineHandler { bookController.getLocalStoreFileList(it) }
218+
// 下载书仓文件
219+
router.get("/reader3/getLocalStoreFile").coroutineHandlerWithoutRes { bookController.getLocalStoreFile(it) }
220+
// 删除书仓文件
221+
router.post("/reader3/deleteLocalStoreFile").coroutineHandler { bookController.deleteLocalStoreFile(it) }
222+
router.post("/reader3/deleteLocalStoreFileList").coroutineHandler { bookController.deleteLocalStoreFileList(it) }
223+
// 从书仓导入
224+
router.post("/reader3/importFromLocalStorePreview").coroutineHandler { bookController.importFromLocalStorePreview(it) }
225+
// 上传文件到书仓
226+
router.post("/reader3/uploadFileToLocalStore").coroutineHandler { bookController.uploadFileToLocalStore(it) }
215227

216228
/** 用户模块 */
217229
// 上传文件

src/main/java/com/htmake/reader/api/controller/BaseController.kt

+7-1
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ open class BaseController(override val coroutineContext: CoroutineContext): Coro
267267
"lastLoginAt" to user.last_login_at,
268268
"accessToken" to user.username + ":" + user.token,
269269
"enableWebdav" to user.enable_webdav,
270+
"enableLocalStore" to user.enable_local_store,
270271
"createdAt" to user.created_at
271272
)
272273
}
@@ -293,7 +294,12 @@ open class BaseController(override val coroutineContext: CoroutineContext): Coro
293294
try {
294295
var seqs = url.split("?", ignoreCase = true, limit = 2)
295296
var file = seqs[0].split("/").last()
296-
return file.split(".", ignoreCase = true, limit = 2).last()?.toLowerCase()
297+
val dotPos = file.lastIndexOf('.')
298+
return if (0 <= dotPos) {
299+
file.substring(dotPos + 1)
300+
} else {
301+
defaultExt
302+
}
297303
} catch (e: Exception) {
298304
return defaultExt
299305
}

0 commit comments

Comments
 (0)