Simple native qBittorrent remote client
Find a file
Alexey Skobkin 09e4ebe3e9
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
feat(ui): full-name tooltip on torrent row hover (#15)
## 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
2026-06-12 20:54:35 +00:00
.woodpecker build(ci): optimizing steps run sequence 2026-03-31 04:12:49 +03:00
cmd/qbtremotego refactor(paths): route config and log paths through ResolvePaths 2026-06-09 23:45:45 +00:00
docs docs: screnshots updated 2026-03-31 02:11:31 +03:00
internal feat(ui): full-name tooltip on torrent row hover (#15) 2026-06-12 20:54:35 +00:00
.gitignore docs: AGENTS.md 2026-03-29 04:02:09 +03:00
.golangci.yml build(ci): adapted CI pipeline from MeshGo 2026-03-29 03:51:52 +03:00
.goreleaser.yml build(ci): adapted CI pipeline from MeshGo 2026-03-29 03:51:52 +03:00
AGENTS.md feat(logging): log to file (closes #13) 2026-06-09 21:02:05 +00:00
go.mod chore: deps updated 2026-05-11 16:56:10 +03:00
go.sum chore: deps updated 2026-05-11 16:56:10 +03:00
README.md docs: adding screenshots to README.md 2026-03-30 23:41:30 +03:00

qBtRemoteGo build statuslatest release

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

main window

Add torrent

adding torrents

Installation

Download latest release

Check the Releases section for the latest downloads.

Note

Releases are hosted on my private Forgejo instance.