auto-novel icon indicating copy to clipboard operation
auto-novel copied to clipboard

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

Open 153264 opened this issue 1 year ago • 10 comments

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

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

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

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

153264 avatar Jun 14 '24 23:06 153264

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

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

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

FishHawk avatar Jun 15 '24 03:06 FishHawk

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

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

153264 avatar Jun 15 '24 03:06 153264

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

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

153264 avatar Jun 15 '24 03:06 153264

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

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

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

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

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

FishHawk avatar Jun 15 '24 04:06 FishHawk

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

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

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

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

153264 avatar Jun 15 '24 06:06 153264

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

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

153264 avatar Jun 15 '24 06:06 153264

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

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

FishHawk avatar Jun 15 '24 12:06 FishHawk

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

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

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

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

153264 avatar Jun 15 '24 13:06 153264

ok

FishHawk avatar Jun 15 '24 14:06 FishHawk

有个问题,现在我做了标签管理,但是以前的数据库是没有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,
  });
});

153264 avatar Jun 19 '24 06:06 153264