Commit Graph

14 Commits

Author SHA1 Message Date
Bjarne Øverli 8dad762349 fix: support go install module path 2026-07-05 13:59:18 +02:00
Bjarne Øverli 280cf85834 feat(ui): render all overlays inline in the playlist region
Convert every overlay (search, keymap, themes, devices, queue, track
info, lyrics, jump, load-URL, online search, provider search, provider
browser, file browser, playlist manager) from a centered modal into a
compact inline panel that replaces the playlist: a header line, a body
filling the same playlist region, and the help line. The now-playing,
visualizer, and controls chrome stays live above, matching the Ctrl+V
visualizer picker, and opening an overlay no longer shifts the layout
height.

A single activeOverlay() describes each overlay's header/help/body once
(method expressions, so no per-render Model copy), and all overlays share
the playlist row budget via effectivePlaylistVisible(). Removes the old
centered-modal renderers, per-overlay chrome builders, and the
measureChrome/measureOverlayVisible/centerOverlay scaffolding.

Add TestInlineOverlaysFitTerminal to guard against vertical overflow
across overlays and terminal sizes.
2026-05-29 21:44:01 +02:00
Nicholas Zambetti d6cd99697c Improvements to album header visibility & control (#234)
Re-runs the cohesion heuristic as tracks are added or queued so headers adapt to playlist growth, while preserving the user's ctrl+h preference via a manual override flag. The Add path uses running counters so the cost stays O(k) per call instead of O(N) per Add.
2026-05-23 09:18:27 +02:00
Nicholas Zambetti a1ba57cbc2 Standardize scrolling and expanded height for all overlays (#233)
Release / build (amd64, darwin, macos-latest) (push) Has been cancelled
Release / build (amd64, linux, ubuntu-latest) (push) Has been cancelled
Release / build (amd64, windows, windows-latest) (push) Has been cancelled
Release / build (arm64, darwin, macos-latest) (push) Has been cancelled
Release / build (arm64, linux, ubuntu-latest) (push) Has been cancelled
Release / release (push) Has been cancelled
Release / update-homebrew (push) Has been cancelled
* Implement stateful windowed scrolling for all overlays

* Add Ctrl+X support to toggle expanded height in all overlays

* Remove ctrl+k helpkey from Search Overlay so it is consistent with others

* Remove now-unused stateless scrollStart helper

* Re-clamp queue scroll after movement or deletion

* Fix unreachable ctrl+x handler in provider search

* Fix device picker list scroll wrap for empty lists
2026-05-16 19:33:54 +02:00
Bjarne Øverli 2b0a904633 Stop recomputing album-header default on every track Add
The heuristic ran on every Add path (including each YTDL batch of 20
tracks), which scaled O(N^2) on incremental loads and silently
overrode the user's Ctrl+H toggle whenever a track was queued. Recompute
only on Replace and on first population; preserve the user's choice
otherwise.

Also dedupe the " · Album" suffix logic into a small helper, and pull
the cohesion ratio into a named constant.
2026-05-06 19:46:20 +02:00
fad647834d Sticky album headers with auto-toggle heuristic and manual toggle keybind (#208)
* Implement sticky album headers and hide redundant album suffixes

* Add blank album separator when album ends and next track lacks album info

* Add keybind 'H' to toggle album headers

* Centralize album grouping and header logic

* Change 'toggle headers' keybind from H to ctrl+h

* Use modern Go iterators for playlist rendering and album grouping

* Support ctrl+h to toggle album headers in playlist manager and provider browser

* Add cohesion heuristic to auto-toggle album headers
2026-05-06 19:38:56 +02:00
Bjarne Øverli 3b2f57aac4 Improve provider playlists/song views
Provider playlists pane:
- Mark the currently loaded playlist with a ▶ prefix and active style
- Group rows under section headers when providers populate Section;
  Spotify now buckets playlists into Library / Your playlists / Followed
- Refresh with Ctrl+R; status message confirms
- Empty state names the provider and offers a remediation hint
- Show 'Name · 12 tracks · 1h 23m' on rows when data is available

Provider browser overlay (N):
- Right-aligned per-track durations and a 'N tracks · 47:22' subtitle
- Move the / filter input under the title (matches keymap overlay)
- Cursor wraps top↔bottom on every screen
- Clearer help labels: Play from here / Queue this / Replace queue / Append all

Cross-cutting:
- Replace 'Loading X...' text with a time-driven braille-dot spinner
  used everywhere a list is loading
- Quick-switch (S/N/P/J/Y/L/R) now works from inside the nav browser
  and the playlist manager, not just the main pane
2026-05-04 18:40:47 +02:00
Bjarne Øverli f6aea8804d Add provider search for Navidrome, Jellyfin, and Local
Release / build (amd64, darwin, macos-latest) (push) Has been cancelled
Release / build (amd64, linux, ubuntu-latest) (push) Has been cancelled
Release / build (amd64, windows, windows-latest) (push) Has been cancelled
Release / build (arm64, darwin, macos-latest) (push) Has been cancelled
Release / build (arm64, linux, ubuntu-latest) (push) Has been cancelled
Release / release (push) Has been cancelled
Release / update-homebrew (push) Has been cancelled
- Implement provider.Searcher on each: Subsonic search3 for Navidrome,
  /Items?searchTerm for Jellyfin, in-memory scan for Local playlists
- Wire Ctrl+F into the focusProvider key dispatcher and the Navidrome
  browser overlay so it works wherever the user is browsing
- Add S / L / R provider-switch shortcuts to focusProvider (matched J / N)
- Reorder overlay key dispatch so the search overlay claims keys above
  the nav browser
- Rename the search overlay title from "Spotify Search" to plain "Search"
- Tweak ColorKeyBG to use Accent instead of FG
2026-05-03 18:47:18 +02:00
Gjermund Garaba bf77ca203e fix: skip unavailable Spotify tracks during playback (#173)
* fix(playlist): skip unavailable Spotify tracks during playback

Mark Spotify tracks as unplayable when the API reports restrictions,
skip them in next/prev/activate playback flows, and surface their
state in the playlist UI.

Add coverage for playlist navigation and playback behavior around
unavailable tracks.

* fixes and whatnot
2026-04-13 18:02:54 +02:00
Gjermund Garaba 1b53660a63 refactor: go 1.26 modernize (#178)
* refactor: go 1.26 modernize

* coderabbit pr fixes
2026-04-13 18:00:58 +02:00
Gjermund Garaba 9a78b3e3f1 feat: support media controller on mac (#172)
Release / build (amd64, darwin, macos-latest) (push) Has been cancelled
Release / build (amd64, linux, ubuntu-latest) (push) Has been cancelled
Release / build (amd64, windows, windows-latest) (push) Has been cancelled
Release / build (arm64, darwin, macos-latest) (push) Has been cancelled
Release / build (arm64, linux, ubuntu-latest) (push) Has been cancelled
Release / release (push) Has been cancelled
Release / update-homebrew (push) Has been cancelled
* feat: support media controller on mac

* fix(notifications): publish current playback state when media notifier attaches

* fix(darwin): lock startup to the Cocoa main thread

* refactor: cleanup and simplify

* missed cleanup
2026-04-07 08:56:17 +02:00
Gjermund Garaba b6deffe92b chore(deps): bump to charm.land v2 dependencies (#161)
Co-authored-by: bjarneo <bjarneo@users.noreply.github.com>
2026-04-02 15:49:51 +02:00
laamalif 7abf6f740c Add Jellyfin provider and shared media-server browser support (#155)
Co-authored-by: Bjarne Øverli <bjarne.oeverli@gmail.com>
2026-03-30 17:15:03 +02:00
Bjarne Øverli 77cac44689 Split the model into smaller files 2026-03-30 16:52:25 +02:00