Simple native qBittorrent remote client
- Go 100%
|
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
## Summary Closes #15 — the full torrent name now appears as a delayed tooltip when the cursor dwells on the name cell, and a few other small UI/quality fixes that piled up. ## Changes ### Issue #15: delayed full-name tooltip * **`feat(ui): delay full-name tooltip on torrent row hover`** — `hoverTooltipOwner` gains a `scheduleShow` / `cancelShow` pair that mirrors the existing hide timer. The name cell waits 500 ms before showing the tooltip, so quick cursor sweeps across rows no longer pop tooltips for every row. Other cells (`Size`, `Down`, `Up`, `ETA`, `Added`) keep their instant behaviour. * **`fix(ui): row-level hover highlight and proper truncation guard`** — the per-cell `hoverLabel` now notifies its `torrentListRow` on `MouseIn` / `MouseOut` so the whole row gets a hover background, with a short debounce to keep the highlight stable across cell boundaries. The truncation guard (which used to compare `label.Text == fullText && label.MinSize().Width <= Size().Width`) is replaced with a real `fyne.MeasureText` check — the old comparison always short-circuited in production because Fyne's label stores the untruncated text. * **`feat(ui): cap tooltip width at 90% of window`** — `newTextTooltip` now takes a `maxWidth` instead of a `minWidth`. Tooltips size to their natural label width and only wrap / clamp when `maxWidth > 0`. A new `tooltipMaxWidthFor` helper returns `canvas.Width * 0.9`, so every call site picks up the live window size automatically. ### Tests * `test: cover SetTorrentLocation happy path and relativeDialogSize guards` — fills in coverage for `Controller.SetTorrentLocation` (POSTs the right form to qBittorrent, records the path in `config.UI.RecentSavePaths`) and locks in the minimum-size fallback for `relativeDialogSize` against degenerate inputs (zero / negative parent width, zero / negative width ratio). ## Verification * `go build ./...` clean * `go vet ./...` clean * `go test -count=1 ./...` all green, including the 5 new tooltip-width tests, the 4 new `relativeDialogSize` tests, and the new `SetTorrentLocation` happy-path test ## Manual smoke test 1. Hover the title cell of a long-named torrent — the full name appears ~500 ms after the cursor stops. 2. Sweep the cursor over rows quickly — no tooltips fire. 3. Resize the window — the tooltip cap scales with the window. 4. Resize the name column wider than the name — no tooltip at all (truncation guard). Co-authored-by: Alexey Skobkin <skobkin-ru@ya.ru> Reviewed-on: #17 |
||
|---|---|---|
| .woodpecker | ||
| cmd/qbtremotego | ||
| docs | ||
| internal | ||
| .gitignore | ||
| .golangci.yml | ||
| .goreleaser.yml | ||
| AGENTS.md | ||
| go.mod | ||
| go.sum | ||
| README.md | ||
qBtRemoteGo 

qBtRemoteGo is a native desktop client for remotely controlling qBittorrent through its Web API.
It focuses on a fast add-and-monitor workflow for magnets and .torrent files, with a compact GUI and desktop integration.
Screenshots
Installation
Check the Releases section for the latest downloads.
Note
Releases are hosted on my private Forgejo instance.

