Commit Graph
35 Commits
Author SHA1 Message Date
tri f2ba1d0100 ci: cut PR CI time with a prebuilt image, ccache, and no QML cachegen (#22)
CI image / image (push) Successful in 10m15s
CI / build (push) Successful in 1m51s
CI took about 5 min 10 s per PR on vm-201: 1.5 min of `pacman -Syu` and 3.5 min of build, half of it qmlcachegen compiling QML the tests never load. Now it takes **1 min 49 s with a cold ccache and 26 s with a warm one**.

- CI runs in a prebuilt Arch image with the build deps (`git.trivk.dev/tri/qtpotato-ci:latest`). `ci-image.yml` rebuilds it weekly, when its Dockerfile changes, or on demand. It builds on the runner's own Docker daemon, so vm-201 has the new image right away, since the runner does not re-pull tags it already has.
- CI configures with `QT_QML_NO_CACHEGEN=ON` and no debug info. Release and AUR builds keep both.
- ccache, kept between runs with `actions/cache`.
- Docs-only changes (`README.md`, `LICENSES/`) skip CI.

Pushing the image to the registry needed two workarounds. Gitea's Actions token cannot push container images, so it uses the `PACKAGE_TOKEN` secret from #21. Cloudflare rejects request bodies over 100 MB and `docker push` sends each layer in one request, so `regctl` (pinned by sha256) pushes the layers in 50 MB chunks.

Giving vm-201 more vCPUs is left out; it is an infra change.

Refs #20

Proof: on this PR, CI run 328 (cold ccache) took 1 min 49 s and run 332 (warm, 41/44 hits) took 26 s, both 8/8 tests. Image run 333 pushed the image, and the registry digest matches the runner's local image. A local build with the CI flags takes 74 steps instead of 154.

Reviewed with sol-loop: 3 rounds with gpt-6.1-sol. Sol verdict: approved

Created with Claude Opus 5.5 in Claude Code (T3 Code).
Reviewed-on: #22
Co-authored-by: Tri Vo Khac <git@trivk.dev>
2026-11-14 10:39:36 +07:00
tri 8a99cf0f7c docs: install with pacman -Syu so the repo setup does not fail on a partial upgrade (#23)
CI / build (push) Successful in 5m54s
Co-authored-by: Tri Vo Khac <git@trivk.dev>
2026-11-14 08:26:31 +07:00
tri 015626b65b ci: upload the Arch package with a package token, since the registry rejects the job token (#21)
CI / build (push) Successful in 6m17s
Co-authored-by: Tri Vo Khac <git@trivk.dev>
2026-11-14 02:42:32 +07:00
tri c449402b04 ci: publish an Arch package to the Gitea registry so pacman users can install while the AUR is closed (#19)
CI / build (push) Successful in 4m45s
Co-authored-by: Tri Vo Khac <git@trivk.dev>
2026-11-14 02:21:22 +07:00
tri 35cc4eb39b chore(aur): pin the qtpotato package to the v0.1.0 release (#18)
CI / build (push) Successful in 5m19s
Co-authored-by: Tri Vo Khac <git@trivk.dev>
2026-11-14 01:58:49 +07:00
tri fb7df904c5 ci: drop the AppImage from releases so uploads fit under Cloudflare's 100 MB limit (#17)
CI / build (push) Successful in 5m4s
Release / release (push) Successful in 19s
Co-authored-by: Tri Vo Khac <git@trivk.dev>
2026-11-14 01:08:21 +07:00
tri 8c57c9ddb6 ci: build and test every PR, release on tags, and add AUR packages (#15)
CI / build (push) Successful in 5m11s
Release / release (push) Failing after 7m17s
Co-authored-by: Tri Vo Khac <git@trivk.dev>
2026-11-14 00:18:16 +07:00
tri bcfc2f3f6a feat(translate): translate a whole playlist so the next episodes are ready (#16)
Co-authored-by: Tri Vo Khac <git@trivk.dev>
2026-11-13 23:27:13 +07:00
tri ad50230829 feat(playlist): compact rows with clean titles and durations (#13)
Co-authored-by: Tri Vo Khac <git@trivk.dev>
2026-11-13 22:54:32 +07:00
tri 76b12d6632 feat(translate): keep translated subtitles next to the video so they load on reopen (#14)
Co-authored-by: Tri Vo Khac <git@trivk.dev>
2026-11-13 22:49:56 +07:00
tri b34a01a92f fix(mpv): auto-select subtitle and audio tracks on file open (#12)
Closes #7

mpv only turns on a subtitle that is flagged default or matches `slang`, so releases like VisionQuest (Russian dub by default, ru/ru/en subtitles, none flagged) open with subtitles off, which also disabled **Translate subtitle**.

- New `TrackSelection` helpers in `qtpotato_core` with unit tests.
- On file load: audio follows *Preferred languages* (Playback settings); subtitle follows *Preferred languages* (Subtitles settings), else keeps mpv's choice, else (new *Turn on a subtitle when none matches*, on by default) picks a full text subtitle in the system language, then English, then the audio language, then the default/first track.
- Translate is enabled whenever the file has a text subtitle; with none or a bitmap subtitle shown it translates the best text track (English first).

Verified in the real app on VisionQuest S01E01: subtitle 3 (en) is selected on open; with audio set to `en` and auto-select off, audio switches to track 7, subtitle stays off and Translate stays enabled with the English source.

Reviewed-on: #12
Co-authored-by: Tri Vo Khac <git@trivk.dev>
2026-11-13 21:15:22 +07:00
tri 32c686e0e3 fix(mpv): avoid render stalls from video timing offset (#6)
mpvqt renders without disabling MPV_RENDER_PARAM_BLOCK_FOR_TARGET_TIME, so each new video frame blocks the Qt Quick render thread for up to video-timing-offset (50 ms). Animations over a playing video (playlist slide-in) stuttered; paused video was smooth. Set video-timing-offset=0.

Measured offscreen while toggling the playlist during playback: worst frame 35–39 ms before, 17–21 ms after.

Reviewed-on: #6
Co-authored-by: Tri Vo Khac <git@trivk.dev>
2026-11-11 20:36:58 +07:00
tri 41188fc665 Merge pull request 'fix(ui): keep Space for playback after mouse clicks' (#5) from fix/menu-space-key-trap into main
Reviewed-on: #5
2026-11-11 20:16:11 +07:00
tri 0098641425 fix(ui): keep Space for playback after mouse clicks
Controls take focus only via Tab, so a click leaves Space for playback.
2026-11-11 20:12:06 +07:00
tri 97b4a2fe32 feat(glossary): add episode groups, search, and import/export
Apply glossary edits directly to translated subtitles and reload the active track. Keep terms with their originating episode, preserve existing translations, and clear stale episode groups with glossary entries.
2026-11-11 19:44:38 +07:00
tri 0bfaf3c9db fix(ui): address main window KDE HIG findings 2026-11-07 20:08:28 +07:00
tri 0cd03335f7 fix(menus): align menus and actions with KDE HIG 2026-11-07 20:08:28 +07:00
tri 309801d059 fix(glossary): handle save errors and improve playlist controls 2026-11-07 20:08:28 +07:00
tri 3d8f644d8d fix(settings): align settings pages with KDE HIG 2026-11-07 20:08:28 +07:00
tri de9e6484ee feat(ui): style app menus and extract glossary dialog
- Add AppMenu and AppMenuItem so menu labels, mnemonics and shortcuts render consistently under org.kde.union
- Move the translation glossary into GlossaryDialog with add, remove and clear-all actions
- Regroup the translation preset and instructions settings layout
2026-11-07 15:03:37 +07:00
tri 9e55dba687 feat(translate): add per-series glossary with auto extraction 2026-11-07 13:28:32 +07:00
tri 18ba92a6e3 feat(translate): add translation presets and custom instructions 2026-11-07 13:28:32 +07:00
tri cebce0915f docs: add project README
- Document features, dependencies, build steps, and AppImage packaging
- Explain subtitle translation, shortcuts, configuration, and licensing
2026-11-02 20:27:08 +07:00
tri 5b1c1a75be build: add AppImage packaging script 2026-11-02 20:18:07 +07:00
tri be658edeec Merge pull request #1 from vokhactri/fix/plasma-style-and-app-logo
Fix Plasma controls and add QtPotato branding
2026-10-28 10:04:58 +07:00
tri 359162828d fix(ui): respect Plasma style and add app branding
- Preserve the platform-selected QtQuick style on Plasma
- Add the QtPotato desktop entry and bundled app icon
- Remove the empty-state open-file action
2026-10-28 10:03:25 +07:00
triandClaude Opus 5.5 614a31db1b feat: rebuild the interface after Haruna
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 09:26:47 +07:00
triandClaude Opus 5.5 54ad4eecf3 feat: add playlist, recent files and MPRIS backends
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 09:26:12 +07:00
triandClaude Opus 5.5 6dc9377de1 chore: license under GPL-3.0-or-later
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 00:25:59 +07:00
triandClaude Opus 5.5 169cb1360b feat: show only the translated subtitle once translation finishes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 00:17:34 +07:00
tri 6b5742b2ca feat: load the user's mpv.conf 2026-10-28 00:03:01 +07:00
tri fe2f159660 feat: auto-hide controls in full screen, add subtitle size and outline settings 2026-10-27 23:00:17 +07:00
tri 4665bf632a feat: translate subtitles with an OpenAI-compatible LLM 2026-10-27 22:43:03 +07:00
tri 48cac86d60 feat: add subtitle track selection, secondary subtitle and delay 2026-10-27 22:18:36 +07:00
triandClaude Opus 5.5 1eb67b829c feat: add Kirigami app skeleton with libmpv playback
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 22:09:52 +07:00