Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

我想要试着做一下本地小说分类 #87

Open
153264 opened this issue Jun 14, 2024 · 10 comments
Open

我想要试着做一下本地小说分类 #87

153264 opened this issue Jun 14, 2024 · 10 comments

Comments

@153264
Copy link
Contributor

153264 commented Jun 14, 2024

预计调整如下:
浏览器 indexdb volumes
新增 tag 表 表字段 tag_id: number , tag_name: string
修改 metadata 表 新增 tag_ids: number[]

页面优化
我的收藏:本地小说 /favorite/local/default
支持管理标签,批量对文章分类

Sakura工作区 /workspace/sakura
本地小说 支持管理标签,批量对文章分类
任务记录 批量对文章分类

如果没问题的话,我就开始按这个计划去调整

@FishHawk
Copy link
Owner

FishHawk commented Jun 15, 2024

没啥问题,收藏夹自定义标签也是计划里的。不过有几点需要改下:

  • 不需要tag表和tag_id,直接用string表示tag。因为:
    • tag应是独一无二的,因此tag本身就起到了id的作用。
    • 和网络/文库小说的tag一致。
  • 任务记录不应该做“批量对文章分类”。因为:
    • 工作区的用户很多样,很多用户只翻译网络/文库小说。有朋友反馈说希望隐藏掉工作区里面的本地小说功能。
    • 和侧栏的本地小说重复了,等到搞定本地小说多收藏夹之后,翻译批次可以通过单独的“待翻译”收藏夹来操作。
    • 任务记录本身和小说不是一种实体,加入太多小说的逻辑之后不方便任务记录本身乃至工作区的更新。

题外话,localstorage的setting里可以加个tag表,用来存预设标签和颜色,比如:predefinedKeywords: { id: string, color: 'red'|'blue' }[]。不过这不影响标签本身实现,等标签做好再说也不迟。

@153264
Copy link
Contributor Author

153264 commented Jun 15, 2024

不需要tag表和tag_id,直接用string表示tag

我是想可能会有编辑标签的情况,还有方便查询本地的全部标签
如果没有标签表的话,还得要先循环全部的文章取出标签,再分类展示

@153264
Copy link
Contributor Author

153264 commented Jun 15, 2024

翻译批次可以通过单独的“待翻译”收藏夹来操作

我也有设想要做这个,但是前提是要先把标签做出来才能进一步扩展

@FishHawk
Copy link
Owner

FishHawk commented Jun 15, 2024

我是想可能会有编辑标签的情况

编辑标签是个麻烦的问题,但这个操作不常见。另外即使有tag表,在删除tag的时候,还是避免不了扫一遍。

还有方便查询本地的全部标签

关于这点有个前置问题,indexeddb在什么数量级需要分页。如果这个数字足够大,大到超过本地小说的可能大小的话,那么首次进入本地小说统计一次标签也是没问题的。等我睡一觉起来,测测看上限在哪吧。

PS. 找到一张性能图:
image
来自:https://rxdb.info/slow-indexeddb.html

@153264
Copy link
Contributor Author

153264 commented Jun 15, 2024

另外即使有tag表,在删除tag的时候,还是避免不了扫一遍

那也比每次获取分类要先循环全部的文章取出标签要好吧

那么首次进入本地小说统计一次标签也是没问题的

感觉这样有点多此一举了,单独拆分标签表就行
我是觉得小说信息跟标签应该解耦,标签单独存一张表进行管理
这样既方便标签的维护,也方便之后扩展
如果标签名称也存到 metadata 的话,这张表既需要维护小说的信息,还要作为标签表去管理

@153264
Copy link
Contributor Author

153264 commented Jun 15, 2024

localstorage的setting里可以加个tag表,用来存预设标签和颜色,比如:predefinedKeywords: { id: string, color: 'red'|'blue' }[]

标签表直接放在localstorage也不是不行,比如:predefinedKeywords: { id: number, name: string, color: 'red'|'blue' }[]

@FishHawk
Copy link
Owner

我是觉得小说信息跟标签应该解耦,标签单独存一张表进行管理

我觉得有点过早优化了,但如果你不嫌麻烦的话也行吧。

@153264
Copy link
Contributor Author

153264 commented Jun 15, 2024

那我就按着以下调整去初步实现这个功能

浏览器 indexdb volumes
新增 tag 表 表字段 tag_id: number , tag_name: string
修改 metadata 表 新增 tag_ids: number[]

页面优化
我的收藏:本地小说 /favorite/local/default
支持管理标签,批量对文章分类

Sakura工作区 /workspace/sakura
本地小说 支持管理标签,批量对文章分类

@FishHawk
Copy link
Owner

ok

@153264
Copy link
Contributor Author

153264 commented Jun 19, 2024

有个问题,现在我做了标签管理,但是以前的数据库是没有tag_ids
要筛选显示的话就只能这样了,要不然之前的小说查不到了
把 默认收藏夹 当成 全部收藏夹 了

const sortedVolumes = computed(() => {
  let _volumes = volumes.value;
  if (props.favoredId && props.favoredId != 'default') {
    _volumes = _volumes.filter((v) => v.tag_ids?.includes(props.favoredId));
  }
  return BookshelfLocalUtil.filterAndSortVolumes(_volumes, {
    ...search,
    order: setting.value.localVolumeOrder,
  });
});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants