Skip to content

Feature/metadata tagging#68

Closed
akashskypatel wants to merge 214 commits into
masterfrom
feature/metadata_tagging
Closed

Feature/metadata tagging#68
akashskypatel wants to merge 214 commits into
masterfrom
feature/metadata_tagging

Conversation

@akashskypatel

@akashskypatel akashskypatel commented Apr 6, 2026

Copy link
Copy Markdown
Owner

Description

Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.

Fixes # (issue)

Type of change

Please delete options that are not relevant.

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

(Copy everything below this including below header to a new comment per platform tested. Also add a separate comment with testing checklist for any new features.)

Testing Checklist - Platform:

Application

Make sure the application launches without errors.

  • Make sure the application launches without errors.
  • Verify cache data is created in application directory.

Home page

Complete or verify all features on Home Page.

  • Suggested Playlists loads with Image and Labels successfully.
  • Suggested Artists loads with Image and Labels successfully.
  • Recommended for you loads with Image and Labels successfully.
  • Refresh Home Page completes successfully.
  • Liking artist, playlist, and song completes successfully. (Large screen/Landscape only)
  • Navigating to an playlist page to confirm artwork, playlist name and song list loads.
  • Navigating to an artist page and confirm functionality below.

Artist Page

Complete or verify all features on Artist Page functions.

  • Navigating to an artist opens artist details page with artwork and artist name.
  • Artist page loads with genres, albums, other releases, and singles.
  • Artist can be liked and disliked successfully.
  • Navigating to an album page and an other release page to make sure they load as described below.

Album Page

Complete or verify all features on Album Page functions.

  • Navigating to an album opens album details page.
  • Album can be liked and disliked successfully.
  • album page loads with Album artwork, name, song count and song list.

Song List component

Complete or verify all features on Song list component functions.

  • Song list loads with song artwork, name, artist name, and duration.
  • Toolbox opens and closes successfully.
  • Songs can be played successfully (if stream found).
  • If song stream found, can be opened in youtube successfully.
  • Songs can be queued, played, shuffled, and sorted successfully.
  • Song can be liked, added to playlist, added to queue, and added to offline successfully.
  • Song can be disliked, removed from playlist, removed from queue, and removed from offline successfully.
  • Double tapping a song likes/dislikes a song.

Android Auto (Android Only)

  • Song Name, artist, artwork, position, duration and controls display correctly
  • Verify controls work as expected

Now Playing Page

Complete or verify all features on Now Playing Page.

  • Confirm now playing page shows artwork, controls, and queue (if on large screen mode).
  • Confirm tapping on artwork shows lyrics (if available for song).
  • Confirm tapping on artist name opens artist page.
  • Confirm song controls work.
  • Confirm tapping on like button likes the song.

Mini-player

Complete or verify all features on Mini-player.

  • Confirm volume changes work.
  • Confirm song playback slider works.
  • Confirm song playback controls work:- play, pause, stop, next, previous.
  • Confirm tapping on like button likes the song.
  • Confirm tapping on mini-player artist name open artist page.
  • Confirm tapping on mini-player blank space or song name opens Now Playing page.
  • Confirm closing mini-player works.

Search page

Complete or verify all features on Search Page.

  • Typing in search bar is successful and shows suggestions successfully.
  • Submitting search query shows search results successfully.
  • Clicking on search suggestions shows search results successfully.
  • Search result pages can successfully be iterated up and down for all search entities.
  • Search result entities can be liked/disliked successfully.

Library page

Complete or verify all features on Library Page.

  • Add a custom playlist using YouTube link.
  • Add a local custom playlist without image.
  • Add a local custom playlist with image.
  • Add a imported playlist from csv file.
  • Confirm liked playlist from home page shows under liked playlists.
  • Search for playlist in library and clear searched filter.
  • Remove liked playlist.
  • Remove added playlist.
  • Remove local playlist.
  • Navigate to each library page- Recently Played, Liked Songs, Liked Artists, Liked Albums, and Offline Songs.

Offline Playlist

Complete or verify all features on a playlist.

  • Enable offline caching on a playlist.
  • Confirm songs are cached for offline listening as songs in the playlist are played.
  • Confirm download status on home page alerts updates correctly.
  • Confirm cached indicator is shows next to downloaded songs.

Recently Played page

Complete or verify all features on Recently Played Page.

  • Confirm recently played songs show in the list

Liked Songs page

Complete or verify all features on Liked Songs Page.

  • Confirm liked songs show in the list.
  • Confirm the list can be rearranged.

Liked Artists page

Complete or verify all features on Liked Artists Page.

  • Confirm liked Artists show in the list.
  • Confirm genres for liked artists show in the list.
  • Confirm searching for genre filters genre list.
  • Confirm searching for artist filters artist list.
  • Confirm clicking on genre filters artist list.
  • Confirm clearing filter clears both genres and artist filters.
  • Confirm genre list can be sorted.

Liked Albums page

Complete or verify all features on Liked Albums Page.

  • Confirm liked Albums show in the list.
  • Confirm genres for liked albums show in the list.
  • Confirm searching for genre filters genre list.
  • Confirm searching for albums filters albums list.
  • Confirm clicking on genre filters albums list.
  • Confirm clearing filter clears both genres and albums filters.
  • Confirm genre list can be sorted.

Offline Songs page

Complete or verify all features on Offline Songs Page.

  • Confirm offline songs show in the list.

Song Queue page

Complete or verify all features on Song Queue Page.

  • Confirm queued songs show in the list.
  • Confirm queued songs can be added to existing playlist.
  • Confirm queued songs can be saved as new playlist.
  • Confirm queued songs can be rearranged by dragging and dropping.
  • Confirm queued songs can be sorted, shuffled, and played.
  • Confirm queued songs can be cleared.

Settings Page

Complete or verify all features on Settings Page.

  • Confirm Accent Color changes work.
  • Confirm Theme Mode changes work.
  • Confirm Stream request timeout work.
  • Confirm Audio output device selection works. (Android only)
  • Confirm Language changes work.
  • Confirm Audio Quality changes work.
  • Confirm Dynamic Accent Color changes work. (Android only)
  • Confirm Pure black theme changes work.
  • Confirm Predictive Black changes work. (Android only)
  • Confirm Offline Mode changes work.
  • Confirm Automatic caching for offline listening works.
  • Confirm enabling plugins works.
  • Confirm Skip Sponsor Segment changes work.
  • Confirm Skip non-music segment changes work.
  • Confirm prepare next song works.
  • Confirm proxy servers works.
  • Confirm Clear Cache works.
  • Confirm Clear Search History works.
  • Confirm Clear Recently Played works.
  • Confirm Backup user data works.
  • Confirm Restore user data works.
  • Confirm Sponsor the project works.
  • Confirm Licenses works.
  • Confirm Copy Log works.
  • Confirm About works.

Offline Mode

Complete or verify all features in Offline Mode Works.

  • Toggle offline mode to ON on settings page and confirm the app does not close when cancelling the change.
  • Confirm app closes when confirming offline mode ON.
  • Restart app and confirm only Offline Songs, Queue, and Settings pages show. (Home should be the same as Offline songs).
  • Confirm offline songs are showed correctly in Offline Songs list.
  • Confirm offline songs play correctly.
  • Toggle offline mode to OFF on settings page and confirm the app does not close when cancelling the change.
  • Confirm app closes when confirming offline mode OFF.
  • Restart app and confirm it resumes normal Online mode.

Plugins

Complete or verify all features for Plugins

  • Verify plugins can be enables successfully
  • Verify plugin bottom sheet opens when plugins are enabled
  • Verify a plugin can be added (use template plugin under /app_plugins/src/template.js)
  • Verify plugin can be reloaded individually and in batch. (change plugin version in template plugin to check)
  • Verify plugin can be deleted
  • Verify plugin settings page opens when tapping on individual plugin under plugin list
  • Verify all plugin settings widgets load correctly with default values as defined in template.js manifest
  • Verify each setting can be changed, reverted, reset to default and saved.
  • Verify all button actions product log entries and function correctly on the settings page
  • Verify background jobs generated by action buttons are added to background job list, complete, queue, and can be cancelled or deleted correctly.
  • Verify plugin generates log entries for Artist, Song, Album, and Playlist entities when each of these entities are loaded or navigated to.
  • Verify plugin buttons load and generate log entries when tapped in the following areas:
    • Song list
    • Song bar menu
    • Liked artists header
    • Liked albums header
    • Artist header
    • Album header
    • Playlist header

Open with Devin

… access

- Phase 4.B.3: Move queue functions (addSongToQueue, nextSongBar, etc.) to queue_manager.dart
- Fix settings access: Add settings. prefix to all settings manager notifiers
- Fix skipToRandom: Exclude current song index to ensure different song selection
- Fix skipToQueueItem: Clamp index to valid [0, length-1] range
- Fix AudioPlayerService volume initialization with default value
- Fix navigation: Replace GoRouter with Navigator.push for EditMetadataPage
- Update imports in user_songs_page.dart, song_bar.dart, song_list.dart
…e safety fixes

- Phase 4.B.4: Move ReverbioAudioHandler from audio_service_mk.dart to new audio_handler.dart
- Phase 4.B.5: Convert audio_service_mk.dart to barrel file exporting audio services
- Type safety: Cast lists to List<Map<String, dynamic>> in artist_page, home_page, search_page, user_songs_page
- Rename android_auto_monochrome to androidAutoMonochrome (camelCase) in icons, settings, utils
- Code style: Fix const constructor, formatting, import ordering, remove unused _kFontPkg
…nd services

- PositionData: Add value equality, const constructor, validation, toString()
- MiniPlayer: Remove context/mediaItem params, fix ValueNotifier leak with State field
- EditMetadataPage: Add TextEditingController dispose(), mounted checks, move state to fields
- PlaylistSharingService: Close YoutubeExplode in finally block, filter null ytids
- SongArtwork: Add null-safe image handling with errorBuilder, consolidate resolution
- SongList: Remove songBars.clear() side effect, escape regex input, dispose controller
- Formatter: Add album/primary-type keys, clamp negative duration, fix isSongDerivative
- Utils: Fix || to && in tryParseVideoTitleAndArtist for proper null check
- UpdateManager: Fix set literal {} to statement block
…ugin services

- AudioHandler: Add null check in skipToRandom before force-unwrap
- PluginsManager: Check hook null/empty before dereferencing methodName
- ProxyManager: Fix race condition in client reinitialization, remove dead code
- WidgetFactory: Fix async method signatures, add unawaited for fire-and-forget
- FileTagger: Add null check for song['audioTags']
- NotifiableList: Register writeToCache listener after initial notifyListeners
- SongBar: Add didUpdateWidget to dispose old controller on widget update
…leaks

- RouterService: Add editMetadata route, SongBar uses GoRouter context.go()
- Playlist: Persist changes to Hive after mutating inner lists
- Artist: Fix infinite recursion in _getArtistDetailsDC
- AudioHandler: Add re-entrancy guard to prevent concurrent position updates
- NowPlayingPage: Move ValueNotifiers from build() to State with proper dispose
- EditMetadata: Add confirmation dialog before overwriting user edits
- SongList: Fix search visibility restoration, guard empty song list play
- SectionHeader: Fix tooltip shuffle -> search
…and pages

- NowPlaying: Move lyricsController to State, cache lyrics Future, fix shadowing
- Settings: Build single merged device list to avoid index mismatch
- EditMetadata: Add confirmation dialog before clearing tags
- PlaylistSharing: Handle null list, binary images, use proxy-aware client
- UpdateManager: Fix response variable, add null fallback for body text
- WidgetFactory: Check context.mounted, remove contradictory isLargeScreen checks
- ArtistList: Clamp remWidth to prevent negatives, implement navigation
- PlaylistHeader: Separate Row/Column builders, add albumsLength subtitle
- SectionHeader: Dispose Timer and SearchController
- Spinner: Remove unconditional Center wrapper
- AnnouncementBox: Add URL launch error handling
…iveness

- Album/Artist/Song: Pass Map copy to parseEntityId to prevent mutating original entities
- Song: Remove double-assignment of songUrl (PM.getSongUrl already sets internally)
- Playlist: Use checkPlaylist predicate instead of checkEntityId for semantic correctness
- Formatter: Rename returnYTPlaylistLayout to returnYtPlaylistLayout (consistent casing)
- AudioHandler: Update playback state before early returns in skipToNext
- AnnouncementBox: Add responsive layout with breakpoint (Row/Column based on width), URL guard
… cleanup

- EditMetadata: Remove dart:math, use conditional instead of min()
- PlaylistSharing: Batch YouTube API calls (5 at a time) with throttling, add validation
- AnnouncementBox: Extract breakpoint constant, add Semantics/InkWell, use unawaited()
- ArtistHeader: Add responsive Row/Column layout, use textTheme.headlineLarge
- ArtistList: Remove duplicate widget.child rendering
- PlaylistHeader: Extract breakpoint, use l10n with fallback, handle zero songs
- SongArtwork: Add cacheKey, mark file as dead code
…ervices

- Fix playlist like status comparison to avoid Map mutation
- Fix offline song download to include file extension in path
- Fix sponsor block skip/seek logic corruption on song transition
- Add HTTP timeouts and duplicate guards to update manager
- Fix memory leaks in widget factory (proper controller disposal)
- Fix edit metadata page error handling and widget lifecycle
- Remove unused BuildContext fields and unused methods
- Improve mini player volume slider and navigation error handling
- Fix song list to respect current queue position when playing
…del)

- Add immutable model classes with fromMap/toMap, copyWith, equality
- Fix audio player volume initialization from settings
- Fix NotifiableList to not register cache listener on init error
… security fixes (HTTPS, URL allowlist), fix theme/dark mode, add null/bounds checks, prevent double disposal, fix unbounded recursion in plugins, fix race conditions, extract SongBarTile widget, fix method typo restSettings->resetSettings
…rel file structure with song_state, song_metadata, song_likes, song_cache, song_youtube, song_musicbrainz, and song_offline files
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