Skip to content

refactor(C3): migrate album screen from rspotify types to domain types#321

Merged
LargeModGames merged 1 commit into
multi-sourcefrom
worktree-agent-a3f00a8439af68187
Jun 22, 2026
Merged

refactor(C3): migrate album screen from rspotify types to domain types#321
LargeModGames merged 1 commit into
multi-sourcefrom
worktree-agent-a3f00a8439af68187

Conversation

@LargeModGames

Copy link
Copy Markdown
Owner

Summary

  • Removes rspotify model types (SimplifiedAlbum, FullAlbum, Page<SimplifiedTrack>) from SelectedAlbum and SelectedFullAlbum in src/core/app.rs
  • Replaces with domain types: AlbumInfo, Paged<TrackInfo>, and Vec<TrackInfo> (embedded in AlbumInfo.tracks for the Full context)
  • The rspotify-to-domain conversion stays exclusively behind the infra/network/mapping.rs boundary

Files changed

  • src/core/app.rs: struct field type changes only
  • src/infra/network/metadata.rs: get_album_tracks maps via map_page, get_album maps via AlbumInfo::from
  • src/tui/ui/tables.rs: draw_album_table reads domain fields (.artists.join(", "), .duration_ms, .id as Option<String>, join_artist_names)
  • src/tui/handlers/album_tracks.rs: all key handlers updated; rspotify AlbumId/TrackId re-parsed from stored String at dispatch sites
  • src/tui/handlers/album_list.rs: Enter converts FullAlbum to AlbumInfo via From
  • src/tui/handlers/mouse.rs: fix .tracks.len() for Full context; update test fixture to domain types

Test plan

  • cargo fmt --all clean
  • cargo clippy --no-default-features --features telemetry -- -D warnings clean
  • cargo test --no-default-features --features telemetry passes (261/261)
  • cargo build (full) succeeds
  • cargo build --no-default-features --features telemetry (slim) succeeds

Remove rspotify model types from SelectedAlbum and SelectedFullAlbum.
Swap in AlbumInfo/Paged<TrackInfo>/TrackInfo from core::plugin_api and
core::pagination. The mapping boundary (infra/network/mapping.rs) is
the sole conversion site.

Changes:
- app.rs: SelectedAlbum.album SimplifiedAlbum->AlbumInfo,
  SelectedAlbum.tracks Page<SimplifiedTrack>->Paged<TrackInfo>,
  SelectedFullAlbum.album FullAlbum->AlbumInfo
- metadata.rs: get_album_tracks maps SimplifiedTrack page via map_page
  before storing; get_album converts FullAlbum via AlbumInfo::from
- tables.rs: draw_album_table reads domain fields (artists.join,
  duration_ms, id string, join_artist_names for album title line)
- album_tracks.rs: all handlers read domain fields; AlbumId/TrackId
  re-parsed from stored String at dispatch sites (residual ok per plan)
- album_list.rs: Enter converts FullAlbum to AlbumInfo via From
- mouse.rs: fix tracks.len() for Full context and update test fixture
@LargeModGames LargeModGames merged commit a63c62c into multi-source Jun 22, 2026
5 checks passed
@LargeModGames LargeModGames deleted the worktree-agent-a3f00a8439af68187 branch June 22, 2026 12:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant