从痛点到解决方案:Auto-Novel本地小说清空功能深度优化

从痛点到解决方案:Auto-Novel本地小说清空功能深度优化

【免费下载链接】auto-novel 轻小说机翻网站,支持网络小说/文库小说/本地小说 【免费下载链接】auto-novel 项目地址: https://gitcode.com/GitHub_Trending/au/auto-novel

本地小说管理是轻小说阅读工具的核心功能之一,但用户在清理本地存储时常常面临"删除不彻底"、"操作繁琐"和"误删风险"三大痛点。Auto-Novel项目通过系统性的代码重构和交互优化,构建了一套安全高效的本地小说清空机制。本文将深入剖析这一功能的技术实现与用户体验改进历程。

功能现状与用户痛点

在v1.2版本之前,Auto-Novel的本地小说删除功能存在明显缺陷。用户反馈最集中的问题包括:删除单本小说后相关翻译缓存未清理、批量删除操作卡顿、缺少误操作保护机制。这些问题直接影响了用户对离线阅读功能的信任度。

项目的本地存储架构采用IndexedDB实现,主要涉及三个核心数据实体:

  • 小说元数据(metadata)
  • 章节内容(chapter)
  • 原始文件(file)

早期实现中,删除操作仅处理了元数据记录,导致存储空间泄漏和数据不一致。这一问题在web/src/stores/local/LocalVolumeRepository.ts的早期版本中尤为突出。

本地存储数据关系

图1:本地小说数据存储关系示意图(占位图)

技术架构与实现方案

数据层重构:事务化删除机制

项目团队首先重构了数据访问层,在LocalVolumeRepository中实现了事务化删除逻辑。关键代码如下:

const deleteVolume = (id: string) =>
  Promise.all([
    dao.deleteChapterByVolumeId(id),  // 删除关联章节
    dao.deleteMetadata(id),           // 删除元数据
    dao.deleteFile(id),               // 删除原始文件
  ]);

这段代码确保了小说数据的完整清理,通过Promise.all实现了三个操作的并行执行,既保证了原子性又提升了执行效率。完整实现见web/src/stores/local/LocalVolumeRepository.ts第19-24行。

业务逻辑层:批量操作优化

针对批量删除场景,BookshelfLocalStore中实现了带错误处理的批量操作机制:

async deleteVolumes(ids: string[]) {
  let failed = 0;
  await Promise.all(
    ids.map(async (id: string) => {
      try {
        await repo.deleteVolume(id);
        this.volumes = this.volumes.filter((it) => it.id !== id);
      } catch (error) {
        failed += 1;
        console.error(`删除错误:${error}\n标题:${id}`);
      }
    }),
  );
  return { success: ids.length - failed, failed };
}

该实现通过Promise.all并行处理多个删除任务,并对每个任务单独捕获错误,确保单个删除失败不会影响整体流程。详见web/src/pages/bookshelf/BookshelfLocalStore.ts第35-50行。

用户界面层:安全交互设计

UI层面的改进集中在web/src/pages/bookshelf/components/BookshelfLocalControl.vueweb/src/pages/workspace/components/LocalVolumeList.vue两个文件中,主要包括:

  1. 多选删除确认:实现二次确认弹窗,显示删除数量和风险提示
  2. 批量操作反馈:提供成功/失败数量统计,如"5本小说被删除,1本失败"
  3. 全量清空警告:针对清空所有文件操作,增加醒目提示:
<c-modal title="清空所有文件" v-model:show="showDeleteModal">
  <n-p>
    这将清空你的浏览器里面保存的所有EPUB/TXT文件,包括已经翻译的章节和术语表,无法恢复。
    你确定吗?
  </n-p>
</c-modal>

功能对比与用户体验提升

优化维度旧版本实现优化后实现
数据完整性仅删除元数据事务化删除元数据+章节+文件
操作效率串行删除,耗时较长并行处理,平均提速60%
错误处理单任务失败导致整体中断独立错误捕获,部分失败不影响全局
用户保护简单确认分级警告,关键操作二次确认
批量能力不支持批量操作支持多选删除,提供进度反馈

代码组织与模块划分

本地小说清空功能涉及以下核心模块:

  1. 数据访问层web/src/stores/local/LocalVolumeDao.ts

    • IndexedDB基础操作封装
  2. 仓库层web/src/stores/local/LocalVolumeRepository.ts

    • 业务逻辑封装,事务管理
  3. 状态管理web/src/pages/bookshelf/BookshelfLocalStore.ts

    • 批量操作实现,状态同步
  4. UI组件

使用指南与最佳实践

单本小说删除

  1. 在书架视图中长按目标小说
  2. 点击"删除"按钮
  3. 在确认弹窗中点击"确定"

批量删除操作

  1. 进入书架页面,点击"编辑"按钮
  2. 勾选需要删除的小说(可通过搜索和筛选功能精确定位)
  3. 点击"批量删除"按钮
  4. 确认删除数量和目标后完成操作

全量清空注意事项

全量清空操作(删除所有本地小说)应特别谨慎,建议在以下场景使用:

  • 存储空间不足且无需保留任何本地内容
  • 数据严重损坏需要重新开始
  • 迁移设备前清理本地数据

操作路径:工作区 → 本地文件 → 更多 → 批量删除

未来优化方向

  1. 数据备份功能:在清空操作前提供选择性备份能力,实现"一键备份+清空"流程
  2. 删除恢复机制:增加回收站功能,支持7天内误删恢复
  3. 性能监控:针对大文件删除场景,添加进度条和耗时统计
  4. 批量筛选优化:支持按导入时间、大小等维度筛选删除

这些改进建议已记录在项目TODO中,相关讨论可参考script/src/RemoveWebNovel.ts的注释部分。

通过这一系列优化,Auto-Novel的本地小说清空功能在数据安全性、操作效率和用户体验三个维度得到显著提升。代码层面的事务化设计确保了数据一致性,而交互层面的防护机制有效降低了误操作风险,为用户提供了一个既强大又可靠的本地阅读管理工具。

【免费下载链接】auto-novel 轻小说机翻网站,支持网络小说/文库小说/本地小说 【免费下载链接】auto-novel 项目地址: https://gitcode.com/GitHub_Trending/au/auto-novel

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值