Skip to content

Commit d20c2df

Browse files
committed
[feat] 适配 TiebaScraper 更新
Sorceresssis/TiebaArchiver@255e436 & 设置 UserPopover 触发延迟 详细描述: 1. 适配了 TiebaScraper 更新 (参考: Sorceresssis/TiebaArchiver@255e436). 对 FragScrapeError 分块进行了支持. 对没有头像的用户数据进行了适配。 2. 设置了 UserPopover 的触 延迟 以防止频繁触发影响用户体验。
1 parent db51e89 commit d20c2df

25 files changed

+419
-173
lines changed

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,8 @@ TiebaReader 是一个与 [TiebaScraper](https://github.com/Sorceresssis/TiebaScr
2626

2727
### EMOJI
2828

29-
本程序仅收录了贴吧默认的 EMOJI 表情,未收录全部表情包资源,因为这需要大量的工作量。未收录的表情会以字符串 `EMOJI(desc, type, id)` 的形式显示。
29+
本程序仅收录了贴吧默认的 EMOJI 表情,未收录全部表情包资源,因为这需要很大的工作量。未收录的表情会以字符串 `EMOJI(desc, type, id)` 的形式显示。
30+
31+
### 贴吧错误说明
32+
33+
[TiebaScraper: 贴吧错误说明](https://github.com/Sorceresssis/TiebaScraper/blob/main/docs/tieba_error_desc.md)

build/TiebaReader.png

50.2 KB
Loading

package-lock.json

Lines changed: 245 additions & 138 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
{
22
"name": "tieba-reader",
33
"private": true,
4-
"version": "1.0.0",
4+
"version": "1.1.0",
55
"main": "dist/main/index.js",
66
"scripts": {
7-
"preview:render": "vite preview",
8-
"dev": "npm run dev:render && npm run dev:electron",
7+
"dev": "concurrently \"npm run dev:render\" \"npm run dev:electron\"",
98
"dev:render": "vite",
109
"dev:electron": "npm run build:electron && electron .",
1110
"build": "npm run build:render && npm run build:electron",
1211
"build:render": "vue-tsc && vite build",
1312
"build:electron": "tsc -p ./src/main && node ./script/copy_electron_assets.js",
13+
"rebuild": "electron-rebuild -f -w better-sqlite3",
1414
"release:win": "electron-builder --win",
1515
"release:mac": "electron-builder --mac",
1616
"release:linux": "electron-builder --linux"
1717
},
1818
"dependencies": {
19+
"ajv": "^6.12.6",
1920
"benz-amr-recorder": "^1.1.5",
2021
"better-sqlite3": "^11.0.0",
2122
"element-plus": "^2.7.6",
@@ -25,12 +26,13 @@
2526
"vue": "^3.4.21"
2627
},
2728
"devDependencies": {
29+
"@electron/rebuild": "^3.6.0",
2830
"@types/better-sqlite3": "^7.6.10",
2931
"@types/node": "^20.14.5",
3032
"@vitejs/plugin-vue": "^5.0.4",
33+
"concurrently": "^8.2.2",
3134
"electron": "^30.1.0",
3235
"electron-builder": "^24.13.3",
33-
"electron-rebuild": "^3.2.9",
3436
"typescript": "^5.2.2",
3537
"vite": "^5.2.0",
3638
"vue-tsc": "^2.0.6"

src/main/config/resource_path.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class ResourcePath {
2+
public static USER_AVATAR_DEFAULT: string = "../images/user_avatar_default.jpeg"
3+
}
4+
5+
6+
export default ResourcePath

src/main/config/schema.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export const SCRAPE_INFO_SCHEMA = {
2+
type: 'object',
3+
}

src/main/services/ScrapeInfoService.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import n_fs from "node:fs"
22
import { injectable, inject } from "inversify";
33
import InjectType from "../container/inject_type";
4+
import Ajv from "ajv";
5+
import { SCRAPE_INFO_SCHEMA } from "../config/schema";
46
import DataDirStruct from "../config/scrapeDataSourceDirStruct";
57
import Result from "../pojo/Result";
68

79

810
@injectable()
911
class ScrapeInfoService {
1012
public constructor(
11-
@inject(InjectType.ScrapeDataPath) private dataSource: string
13+
@inject(InjectType.ScrapeDataPath) private dataSource: string,
14+
private scrapeInfoValidator = new Ajv().compile(SCRAPE_INFO_SCHEMA),
1215
) { }
1316

1417
public async get(): Promise<Result> {

src/main/services/ThreadService.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
11
import n_fs from "node:fs";
2-
import n_path from "node:path"
2+
import n_path from "node:path";
33
import { injectable, inject } from "inversify";
44
import container from "../container/container";
55
import InjectType from "../container/inject_type";
66
import Result from "../pojo/Result";
77
import ThreadInfoDTO from "../dto/ThreadInfoDTO";
88
import ScrapeDataSourceDirStruct from "../config/scrapeDataSourceDirStruct";
99
import type ScrapeInfoService from "./ScrapeInfoService";
10-
import type UserService from "./UserService";
11-
import PostService from "./PostService";
10+
import type PostService from "./PostService";
1211

1312

1413
@injectable()
1514
class ThreadService {
1615
public constructor(
1716
@inject(InjectType.ScrapeDataPath) private scrapeDataPath: string,
1817
@inject(InjectType.ThreadID) private tid: number,
19-
@inject(InjectType.ScrapeInfoService) private scrapeInfoService: ScrapeInfoService
18+
@inject(InjectType.ScrapeInfoService) private scrapeInfoService: ScrapeInfoService,
2019
) { }
2120

2221
public async getThreadInfo(): Promise<Result> {

src/main/services/UserService.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import n_path from "node:path"
22
import { injectable, inject } from "inversify";
33
import InjectType from "../container/inject_type";
4-
import type UserDao from "../dao/UserDao";
54
import ScrapeDataSourceDirStruct from "../config/scrapeDataSourceDirStruct";
5+
import ResourcePath from "../config/resource_path";
6+
import type UserDao from "../dao/UserDao";
67

78
@injectable()
89
class UserService {
@@ -18,8 +19,10 @@ class UserService {
1819

1920

2021
public getUserInfo(id: number): DTO.User | undefined {
21-
const user = this.userDao.getUserById(id)
22-
if (user) user.avatar = 'file:///' + n_path.join(this.userAvatarDir, user.avatar)
22+
const user: DTO.User = this.userDao.getUserById(id) as any
23+
if (user) user.avatar = user.avatar ?
24+
'file:///' + n_path.join(this.userAvatarDir, user.avatar)
25+
: ResourcePath.USER_AVATAR_DEFAULT
2326
return user
2427
}
2528
}

src/main/types/entity.d.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ declare namespace Entity {
6969
type: number
7070
}
7171

72+
interface FragScrapeError extends ContentFragment {
73+
error_frag_type: int
74+
error_frag_name: string
75+
}
76+
7277
interface FragText extends ContentFragment {
7378
text: string
7479
}
@@ -127,7 +132,7 @@ declare namespace Entity {
127132
portrait: string
128133
username: string | null
129134
nickname: string
130-
avatar: string
135+
avatar: string | null
131136
glevel: number
132137
gender: number // 0 unknown, 1 male, 2 female
133138
ip: string

0 commit comments

Comments
 (0)