feat: 同步章节内阅读进度,新增窗口快捷键与同步状态提示(v1.6.0) - #24
Open
sakaiyuuji4 wants to merge 3 commits into
Open
Conversation
added 3 commits
July 23, 2026 15:32
- 实现防抖机制避免频繁同步页内阅读位置 - 添加返回书架时立即同步最后进度的功能 - 新增ProgressSyncService处理同步任务调度 - 重构ApiUtil支持显式指定书籍地址进行同步 - 更新CLAUDE.md文档说明防抖同步机制 - 优化翻页动作启用条件适配双模式 - 添加阅读窗口显示隐藏快捷键功能
- 新增 ProgressSyncEvent 事件类型用于同步状态通知 - 在正文面板顶部右侧添加同步状态提示标签 - 重构返回书架操作通过命令总线异步执行 - 优化进度同步服务发布同步状态事件 - 更新 UI 订阅基类支持处理进度同步事件 - 在错误面板添加退出阅读按钮便于返回书架
- 新增 ProgressSyncEvent 事件类型用于同步状态通知 - 在正文面板顶部右侧添加同步状态提示标签 - 重构返回书架操作通过命令总线异步执行 - 优化进度同步服务发布同步状态事件 - 更新 UI 订阅基类支持处理进度同步事件 - 在错误面板添加退出阅读按钮便于返回书架
Owner
|
@copilot review 一下 |
There was a problem hiding this comment.
Pull request overview
该 PR 聚焦解决「IDE 内阅读位置无法同步回阅读 APP/服务器」的问题:在 ToolWindow 滚动阅读与分页翻页时,防抖同步章节内位置(durChapterPos)并通过事件体系在 UI 顶部展示同步状态;同时补充阅读工具窗口快捷键与若干交互修复,并将版本升级至 1.6.0。
Changes:
- 新增进度同步链路:
ProgressSyncService+ProgressSyncEvent,并在 ToolWindow 正文顶部展示同步状态提示。 - 新增阅读工具窗口显示/隐藏快捷键(Alt+D)与对应 Action 注册。
- 修复翻页 Action 门控逻辑与“返回书架”绕过指令链路的问题,并补充错误页“退出阅读”按钮。
Reviewed changes
Copilot reviewed 20 out of 20 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| src/main/resources/META-INF/plugin.xml | 注册 Alt+D 的阅读工具窗口显示/隐藏 Action |
| src/main/java/com/nancheung/plugins/jetbrains/legadoreader/service/ProgressSyncService.java | 新增防抖同步服务,调度保存 durChapterPos 并发布同步状态事件 |
| src/main/java/com/nancheung/plugins/jetbrains/legadoreader/presentation/toolwindow/panel/TextBodyPanel.java | ToolWindow 正文新增滚动同步触发与顶部同步状态提示 UI |
| src/main/java/com/nancheung/plugins/jetbrains/legadoreader/presentation/toolwindow/MainReaderPanel.java | 接入 ProgressSyncEvent 的 UI 事件处理入口 |
| src/main/java/com/nancheung/plugins/jetbrains/legadoreader/presentation/toolwindow/handler/MainPanelEventHandler.java | 展示同步状态提示;会话结束时刷新书架 |
| src/main/java/com/nancheung/plugins/jetbrains/legadoreader/presentation/common/UIEventSubscriber.java | UI 事件分发新增 ProgressSyncEvent 分支 |
| src/main/java/com/nancheung/plugins/jetbrains/legadoreader/event/ReaderEvent.java | sealed ReaderEvent permits 增加 ProgressSyncEvent |
| src/main/java/com/nancheung/plugins/jetbrains/legadoreader/event/ProgressSyncEvent.java | 新增进度同步事件类型(SYNCING/SYNCED/SYNC_FAILED) |
| src/main/java/com/nancheung/plugins/jetbrains/legadoreader/command/handler/PreviousPageHandler.java | 翻页后调度同步(使用 page startPos) |
| src/main/java/com/nancheung/plugins/jetbrains/legadoreader/command/handler/NextPageHandler.java | 翻页后调度同步(使用 page startPos) |
| src/main/java/com/nancheung/plugins/jetbrains/legadoreader/command/handler/BackToBookshelfHandler.java | 返回书架前 flush 防抖同步,避免退出时丢最后位置 |
| src/main/java/com/nancheung/plugins/jetbrains/legadoreader/api/ApiUtil.java | saveBookProgress 增加显式 bookUrl 重载以支持延迟同步 |
| src/main/java/com/nancheung/plugins/jetbrains/legadoreader/action/ToggleToolWindowAction.java | 新增 ToolWindow 显示/隐藏 Action 实现 |
| src/main/java/com/nancheung/plugins/jetbrains/legadoreader/action/PreviousPageAction.java | 翻页 Action 的可用性改为以分页数据为准(双模式通用) |
| src/main/java/com/nancheung/plugins/jetbrains/legadoreader/action/NextPageAction.java | 翻页 Action 的可用性改为以分页数据为准(双模式通用) |
| src/main/java/com/nancheung/plugins/jetbrains/legadoreader/action/BackBookshelfAction.java | 返回书架改为走 BACK_TO_BOOKSHELF 指令链路 |
| README.md | 更新徽章版本与快捷键表(新增 Alt+D) |
| gradle.properties | 插件版本号 1.5.1 → 1.6.0 |
| CLAUDE.md | 更新项目说明/架构与快捷键文档 |
| CHANGELOG.md | 新增 1.6.0 版本记录与对比链接更新 |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+93
to
+94
| // 滚动阅读时防抖同步章节内位置(首个可见字符的偏移) | ||
| scrollPane.getViewport().addChangeListener(e -> syncScrollProgress(scrollPane.getViewport())); |
Comment on lines
+218
to
+232
| public void showSyncStatus(String text, int autoHideMs) { | ||
| if (syncStatusHideTimer != null) { | ||
| syncStatusHideTimer.stop(); | ||
| syncStatusHideTimer = null; | ||
| } | ||
|
|
||
| syncStatusLabel.setText(text); | ||
| syncStatusLabel.setVisible(true); | ||
|
|
||
| if (autoHideMs > 0) { | ||
| syncStatusHideTimer = new Timer(autoHideMs, e -> syncStatusLabel.setVisible(false)); | ||
| syncStatusHideTimer.setRepeats(false); | ||
| syncStatusHideTimer.start(); | ||
| } | ||
| } |
Comment on lines
+153
to
+158
| @Override | ||
| public void dispose() { | ||
| // 关闭前执行待同步任务,尽量保住最后进度 | ||
| runPending(); | ||
| scheduler.shutdownNow(); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
改动概述
本 PR 解决了「IDE 内阅读位置无法同步回阅读 APP/服务器」的核心痛点,并补充了若干体验改进,版本升级至 1.6.0。
新增功能
📖 同步章节内阅读进度
ProgressSyncService(Application Service):滚动/翻页停止 2秒后,将章节内位置(
durChapterPos)防抖同步到服务器,连续滚动不会产生请求风暴PageData.startPos())flush()立即同步,退出阅读不丢最后位置🔔 同步状态提示
ProgressSyncEvent(SYNCING / SYNCED / SYNC_FAILED)接入 sealed 事件体系⌨️ 阅读窗口快捷键
Alt+D快速显示/隐藏阅读工具窗口(ToggleToolWindowAction),可在 Keymap 中自定义🚪 错误页退出按钮
问题修复
NextPageAction/PreviousPageAction原先在行内模式关闭时被禁用,导致工具窗口阅读时Ctrl+滚轮完全失效(通过 IDE 日志确认:翻页指令从未被分发)。现改为「有分页数据即可用」,双模式通用
BACK_TO_BOOKSHELFHandler,导致会话未清理、进度未冲刷。现统一走指令分发,UI 响应
SESSION_ENDED事件刷新书架其他
ApiUtil.saveBookProgress增加显式bookUrl重载,供延迟同步场景使用测试
buildPlugin构建通过,插件包内plugin.xml/change-notes 已验证idea.log出现「同步页内阅读进度成功」,手机 APP 打开定位到对应位置