mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-03-26 00:26:05 -07:00
Compare commits
1 Commits
v0.9.3
...
fix/window
| Author | SHA1 | Date | |
|---|---|---|---|
| d91e275993 |
18
CHANGELOG.md
18
CHANGELOG.md
@@ -1,23 +1,5 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## v0.9.3 (2026-03-25)
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
- Launcher: Moved YouTube primary subtitle language defaults to `youtube.primarySubLanguages`.
|
|
||||||
- Launcher: Removed the placeholder YouTube subtitle retime step and now uses downloaded primary subtitle tracks directly, so there is no fake path rewrite before playback/sidebar loading.
|
|
||||||
- YouTube: Removed the `src/core/services/youtube/retime` helper and its tests after retiring the internal retime strategy.
|
|
||||||
- Docs: Clarified optional `alass` / `ffsubsync` subtitle-sync requirements and setup steps, including fallback behavior when sync tools are absent.
|
|
||||||
- Launcher: Removed the old `youtubeSubgen.primarySubLanguages` config path from the generated config and docs.
|
|
||||||
|
|
||||||
## v0.9.2 (2026-03-25)
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
- Overlay: Fixed overlay pointer tracking so Windows click-through toggles immediately when the cursor enters or leaves subtitle regions, without waiting for a later hover resync.
|
|
||||||
- Overlay: Fixed Windows overlay window tracking on scaled displays by converting native tracked window bounds to Electron DIP coordinates before applying overlay bounds.
|
|
||||||
- Launcher: Fixed Windows direct `--youtube-play` startup so MPV boots reliably, stays paused until the app-owned subtitle flow is ready, and reuses an already-running SubMiner instance when available.
|
|
||||||
- Launcher: Fixed standalone Windows `--youtube-play` sessions so closing MPV fully exits SubMiner instead of leaving hidden overlay windows or a background process behind.
|
|
||||||
- Overlay: Fixed `subminer <youtube-url>` on Linux so the YouTube playback flow waits for Yomitan to load before creating the overlay window, avoiding the broken lookup popup state that previously required a manual overlay refresh.
|
|
||||||
|
|
||||||
## v0.9.1 (2026-03-24)
|
## v0.9.1 (2026-03-24)
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ Local stats dashboard — watch time, anime library, vocabulary growth, mining t
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><b>alass / ffsubsync</b></td>
|
<td><b>alass / ffsubsync</b></td>
|
||||||
<td>Automatic subtitle retiming — requires <code>alass</code> or <code>ffsubsync</code> on your <code>PATH</code> (optional; subtitle syncing is disabled without them)</td>
|
<td>Automatic subtitle retiming</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><b>WebSocket</b></td>
|
<td><b>WebSocket</b></td>
|
||||||
@@ -105,7 +105,7 @@ Local stats dashboard — watch time, anime library, vocabulary growth, mining t
|
|||||||
| | Required | Optional |
|
| | Required | Optional |
|
||||||
| -------------- | --------------------------------------- | -------------------------------------- |
|
| -------------- | --------------------------------------- | -------------------------------------- |
|
||||||
| **Player** | [`mpv`](https://mpv.io) with IPC socket | — |
|
| **Player** | [`mpv`](https://mpv.io) with IPC socket | — |
|
||||||
| **Processing** | `ffmpeg`, `mecab` + `mecab-ipadic` | `guessit` (AniSkip), `alass` / `ffsubsync` (subtitle sync) |
|
| **Processing** | `ffmpeg`, `mecab` + `mecab-ipadic` | `guessit` (AniSkip) |
|
||||||
| **Media** | — | `yt-dlp`, `chafa`, `ffmpegthumbnailer` |
|
| **Media** | — | `yt-dlp`, `chafa`, `ffmpegthumbnailer` |
|
||||||
| **Selection** | — | `fzf` / `rofi` |
|
| **Selection** | — | `fzf` / `rofi` |
|
||||||
|
|
||||||
@@ -125,8 +125,6 @@ Local stats dashboard — watch time, anime library, vocabulary growth, mining t
|
|||||||
paru -S --needed mpv ffmpeg mecab-git mecab-ipadic
|
paru -S --needed mpv ffmpeg mecab-git mecab-ipadic
|
||||||
# Optional
|
# Optional
|
||||||
paru -S --needed yt-dlp fzf rofi chafa ffmpegthumbnailer xdotool xorg-xwininfo
|
paru -S --needed yt-dlp fzf rofi chafa ffmpegthumbnailer xdotool xorg-xwininfo
|
||||||
# Optional: subtitle sync (install at least one for subtitle syncing to work)
|
|
||||||
paru -S --needed alass python-ffsubsync
|
|
||||||
# X11 / XWAYLAND
|
# X11 / XWAYLAND
|
||||||
paru -S --needed xdotool xorg-xwininfo
|
paru -S --needed xdotool xorg-xwininfo
|
||||||
```
|
```
|
||||||
@@ -140,9 +138,6 @@ paru -S --needed xdotool xorg-xwininfo
|
|||||||
brew install mpv ffmpeg mecab mecab-ipadic
|
brew install mpv ffmpeg mecab mecab-ipadic
|
||||||
# Optional
|
# Optional
|
||||||
brew install yt-dlp fzf rofi chafa ffmpegthumbnailer
|
brew install yt-dlp fzf rofi chafa ffmpegthumbnailer
|
||||||
# Optional: subtitle sync (install at least one for subtitle syncing to work)
|
|
||||||
brew install alass
|
|
||||||
pip install ffsubsync
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Grant Accessibility permission to SubMiner in **System Settings > Privacy & Security > Accessibility**.
|
Grant Accessibility permission to SubMiner in **System Settings > Privacy & Security > Accessibility**.
|
||||||
|
|||||||
@@ -1,68 +0,0 @@
|
|||||||
---
|
|
||||||
id: TASK-234
|
|
||||||
title: 'Address PR #35 latest CodeRabbit review round'
|
|
||||||
status: Done
|
|
||||||
assignee:
|
|
||||||
- codex
|
|
||||||
created_date: '2026-03-26 03:59'
|
|
||||||
updated_date: '2026-03-26 04:01'
|
|
||||||
labels:
|
|
||||||
- review-comments
|
|
||||||
- coderabbit
|
|
||||||
dependencies: []
|
|
||||||
references:
|
|
||||||
- /Users/sudacode/projects/japanese/SubMiner/src/main.ts
|
|
||||||
- /Users/sudacode/projects/japanese/SubMiner/src/cli/args.test.ts
|
|
||||||
- >-
|
|
||||||
/Users/sudacode/projects/japanese/SubMiner/src/main/runtime/cli-command-prechecks.test.ts
|
|
||||||
- >-
|
|
||||||
/Users/sudacode/projects/japanese/SubMiner/src/main/runtime/youtube-playback-launch.ts
|
|
||||||
priority: medium
|
|
||||||
---
|
|
||||||
|
|
||||||
## Description
|
|
||||||
|
|
||||||
<!-- SECTION:DESCRIPTION:BEGIN -->
|
|
||||||
Assess and implement the latest actionable CodeRabbit feedback on PR #35 for the Windows YouTube playback flow. Scope includes fixing the overlapping youtubePlay cleanup race in main runtime state and any low-risk follow-up test/clarity comments from the same review round.
|
|
||||||
<!-- SECTION:DESCRIPTION:END -->
|
|
||||||
|
|
||||||
## Acceptance Criteria
|
|
||||||
<!-- AC:BEGIN -->
|
|
||||||
- [x] #1 Overlapping youtubePlay requests no longer let an older flow clear active quit-on-disconnect/app-owned-flow state for a newer flow.
|
|
||||||
- [x] #2 Latest low-risk CodeRabbit test and clarity follow-ups for this PR round are addressed or intentionally rejected based on code verification.
|
|
||||||
- [x] #3 Relevant tests covering the touched areas pass locally.
|
|
||||||
<!-- AC:END -->
|
|
||||||
|
|
||||||
## Implementation Plan
|
|
||||||
|
|
||||||
<!-- SECTION:PLAN:BEGIN -->
|
|
||||||
1. Update runYoutubePlaybackFlowMain in src/main.ts to use a per-request generation guard around shared YouTube flow state so overlapping requests cannot clear the active timer, armed flag, or app-owned-flow marker for a newer request.
|
|
||||||
2. Address verified low-risk latest-round follow-ups: add direct startup-prereq assertions in src/cli/args.test.ts, extend side-effect assertions in src/main/runtime/cli-command-prechecks.test.ts, and rename the youtube-playback-launch polling variable for clarity.
|
|
||||||
3. Run targeted Bun tests for the touched areas and record results in the task notes/final summary.
|
|
||||||
<!-- SECTION:PLAN:END -->
|
|
||||||
|
|
||||||
## Implementation Notes
|
|
||||||
|
|
||||||
<!-- SECTION:NOTES:BEGIN -->
|
|
||||||
Implemented per-request youtubePlaybackFlowGeneration guard in src/main.ts so superseded youtubePlay flows cannot clear the active arm timer, armed flag, or app-owned-flow state for a newer request.
|
|
||||||
|
|
||||||
Added explicit startup-prereq assertions in src/cli/args.test.ts and stronger warmup/log side-effect assertions in src/main/runtime/cli-command-prechecks.test.ts for the latest CodeRabbit follow-ups.
|
|
||||||
|
|
||||||
Renamed youtube-playback-launch polling variable from pathChanged to pathDiffersFromInitial for accuracy without behavior change.
|
|
||||||
|
|
||||||
Verification: bun test src/cli/args.test.ts; bun test src/main/runtime/cli-command-prechecks.test.ts; bun test src/main/runtime/youtube-playback-launch.test.ts; bun run typecheck.
|
|
||||||
<!-- SECTION:NOTES:END -->
|
|
||||||
|
|
||||||
## Final Summary
|
|
||||||
|
|
||||||
<!-- SECTION:FINAL_SUMMARY:BEGIN -->
|
|
||||||
Addressed the latest PR #35 CodeRabbit round by making YouTube playback flow cleanup generation-safe in src/main.ts. Overlapping youtubePlay requests now isolate timer/armed/app-owned-flow cleanup to the currently active request so an older flow cannot clear state for its replacement.
|
|
||||||
|
|
||||||
Also folded in the latest low-risk follow-ups: args tests now assert that youtube playback requires overlay startup prerequisites, cli-command precheck tests now assert warmup/log side effects for the youtube transition, and youtube-playback-launch.ts uses a clearer variable name for the initial-path comparison.
|
|
||||||
|
|
||||||
Verification:
|
|
||||||
- bun test src/cli/args.test.ts
|
|
||||||
- bun test src/main/runtime/cli-command-prechecks.test.ts
|
|
||||||
- bun test src/main/runtime/youtube-playback-launch.test.ts
|
|
||||||
- bun run typecheck
|
|
||||||
<!-- SECTION:FINAL_SUMMARY:END -->
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
---
|
|
||||||
id: TASK-235
|
|
||||||
title: 'Address PR #35 autoplay retry CodeRabbit follow-up'
|
|
||||||
status: Done
|
|
||||||
assignee:
|
|
||||||
- codex
|
|
||||||
created_date: '2026-03-26 04:30'
|
|
||||||
updated_date: '2026-03-26 04:31'
|
|
||||||
labels:
|
|
||||||
- review-comments
|
|
||||||
- coderabbit
|
|
||||||
dependencies: []
|
|
||||||
references:
|
|
||||||
- /Users/sudacode/projects/japanese/SubMiner/src/main.ts
|
|
||||||
priority: medium
|
|
||||||
---
|
|
||||||
|
|
||||||
## Description
|
|
||||||
|
|
||||||
<!-- SECTION:DESCRIPTION:BEGIN -->
|
|
||||||
Assess and implement the latest CodeRabbit follow-up on PR #35 concerning stale autoplay-ready fallback retries interfering with a new app-owned YouTube playback flow in main.ts.
|
|
||||||
<!-- SECTION:DESCRIPTION:END -->
|
|
||||||
|
|
||||||
## Acceptance Criteria
|
|
||||||
<!-- AC:BEGIN -->
|
|
||||||
- [x] #1 Starting a new app-owned YouTube playback flow invalidates any pending autoplay-ready fallback retries from older playback state before mpv prep begins.
|
|
||||||
- [x] #2 Relevant verification for the touched main.ts autoplay retry logic passes locally.
|
|
||||||
- [x] #3 Task notes/final summary capture the fix and verification.
|
|
||||||
<!-- AC:END -->
|
|
||||||
|
|
||||||
## Implementation Plan
|
|
||||||
|
|
||||||
<!-- SECTION:PLAN:BEGIN -->
|
|
||||||
1. Add a helper in src/main.ts that invalidates pending autoplay-ready fallback retry state by clearing the tracked media path and advancing the autoplay generation counter.
|
|
||||||
2. Invoke that helper at the start of runYoutubePlaybackFlowMain before app-owned YouTube playback takes over so stale retries cannot unpause reused playback.
|
|
||||||
3. Run relevant verification for the touched main.ts path and record results in the task notes/final summary.
|
|
||||||
<!-- SECTION:PLAN:END -->
|
|
||||||
|
|
||||||
## Implementation Notes
|
|
||||||
|
|
||||||
<!-- SECTION:NOTES:BEGIN -->
|
|
||||||
Added invalidatePendingAutoplayReadyFallbacks() in src/main.ts to clear the tracked autoplay-ready media path and advance the autoplay generation before a new app-owned YouTube flow claims playback. This invalidates stale fallback retry closures even when the reused playback path is the same.
|
|
||||||
|
|
||||||
Verification: bun test src/main/runtime/mpv-main-event-actions.test.ts; bun test src/main/runtime/startup-autoplay-release-policy.test.ts; bun run typecheck.
|
|
||||||
<!-- SECTION:NOTES:END -->
|
|
||||||
|
|
||||||
## Final Summary
|
|
||||||
|
|
||||||
<!-- SECTION:FINAL_SUMMARY:BEGIN -->
|
|
||||||
Addressed the latest PR #35 CodeRabbit follow-up by invalidating pending autoplay-ready fallback retries before a new app-owned YouTube playback flow takes over in src/main.ts. The new helper clears the tracked autoplay media path and advances the autoplay generation counter, so retry closures from older playback state cannot later unpause the newly prepared flow when reusing the same media path.
|
|
||||||
|
|
||||||
Verification:
|
|
||||||
- bun test src/main/runtime/mpv-main-event-actions.test.ts
|
|
||||||
- bun test src/main/runtime/startup-autoplay-release-policy.test.ts
|
|
||||||
- bun run typecheck
|
|
||||||
<!-- SECTION:FINAL_SUMMARY:END -->
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
---
|
|
||||||
id: TASK-236
|
|
||||||
title: Gate Jimaku and SubSync modal actions when setup is missing
|
|
||||||
status: To Do
|
|
||||||
assignee: []
|
|
||||||
created_date: '2026-03-26 05:48'
|
|
||||||
labels:
|
|
||||||
- ui
|
|
||||||
- setup-validation
|
|
||||||
dependencies: []
|
|
||||||
---
|
|
||||||
|
|
||||||
## Description
|
|
||||||
|
|
||||||
<!-- SECTION:DESCRIPTION:BEGIN -->
|
|
||||||
Add safeguards in the Jimaku and SubSync modals so users cannot proceed with unsupported flows when required setup is missing. SubSync should clearly block use when alass/ffsubsync detection fails. Jimaku should surface a visible warning when no API key is configured and prevent proceeding with actions that require it.
|
|
||||||
<!-- SECTION:DESCRIPTION:END -->
|
|
||||||
|
|
||||||
## Acceptance Criteria
|
|
||||||
<!-- AC:BEGIN -->
|
|
||||||
- [ ] #1 SubSync modal detects availability of alass and ffsubsync before enabling related action option
|
|
||||||
- [ ] #2 When only one of alass/ffsubsync is available, only the available path is selectable and clearly labeled; unavailable options are visually disabled
|
|
||||||
- [ ] #3 When neither alass nor ffsubsync are available, the unsupported action option is disabled and/or hidden, and cannot navigate to next step
|
|
||||||
- [ ] #4 If a user tries to proceed while detection says unavailable, submission is blocked with explanatory inline feedback
|
|
||||||
- [ ] #5 Jimaku modal detects missing API key (or invalid/missing key) and shows an immediate warning on search results or related UI area
|
|
||||||
- [ ] #6 When Jimaku API key is absent, actions that require key-based operations are disabled or blocked and cannot be submitted
|
|
||||||
- [ ] #7 All new/updated UX states include clear copy explaining what to fix (e.g., install binary, add API key, restart if needed)
|
|
||||||
- [ ] #8 Add or update tests for setup detection and blocked-state behavior in relevant modal/components
|
|
||||||
<!-- AC:END -->
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
---
|
|
||||||
id: TASK-237
|
|
||||||
title: Improve config validation error reporting and logging
|
|
||||||
status: To Do
|
|
||||||
assignee: []
|
|
||||||
created_date: '2026-03-26 05:51'
|
|
||||||
labels:
|
|
||||||
- errors
|
|
||||||
- config
|
|
||||||
- validation
|
|
||||||
- ux
|
|
||||||
dependencies: []
|
|
||||||
references:
|
|
||||||
- /docs/README.md
|
|
||||||
- /docs/workflow/verification.md
|
|
||||||
---
|
|
||||||
|
|
||||||
## Description
|
|
||||||
|
|
||||||
<!-- SECTION:DESCRIPTION:BEGIN -->
|
|
||||||
Replace raw error body system notifications during config validation with clearer, user-friendly summaries while retaining full technical detail in logs. The flow should surface what is wrong, where, and how to fix it without overloading the user with raw stack traces, and write structured details to console/file logs.
|
|
||||||
<!-- SECTION:DESCRIPTION:END -->
|
|
||||||
|
|
||||||
## Acceptance Criteria
|
|
||||||
<!-- AC:BEGIN -->
|
|
||||||
- [ ] #1 When config validation fails, show a user-facing notification with cleaned, human-readable summary instead of dumping raw error text directly
|
|
||||||
- [ ] #2 Notification content includes actionable context (what field/setting failed, expected format/type, and next steps where possible)
|
|
||||||
- [ ] #3 Raw technical error details are preserved in console logs in a consistently formatted, presentable way
|
|
||||||
- [ ] #4 Config validation failures also write to persistent log file output in the same presentable format
|
|
||||||
- [ ] #5 When validation fails repeatedly or with multiple errors, aggregate and group errors for easier reading instead of showing one opaque blob
|
|
||||||
- [ ] #6 Warning/error notification should map to the specific invalid config section so users can jump to/identify what to fix
|
|
||||||
- [ ] #7 Add/update tests (unit/integration) that assert notification formatting and logging behavior for at least one malformed config case
|
|
||||||
- [ ] #8 No sensitive data (API keys/secrets) is written to logs/notifications when sanitizing errors
|
|
||||||
<!-- AC:END -->
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user