Feature/metadata tagging#68
Closed
akashskypatel wants to merge 214 commits into
Closed
Conversation
- improved data logic and responsiveness
… 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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.
(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.
Home page
Complete or verify all features on Home Page.
Artist Page
Complete or verify all features on Artist Page functions.
Album Page
Complete or verify all features on Album Page functions.
Song List component
Complete or verify all features on Song list component functions.
Android Auto (Android Only)
Now Playing Page
Complete or verify all features on Now Playing Page.
Mini-player
Complete or verify all features on Mini-player.
Search page
Complete or verify all features on Search Page.
Library page
Complete or verify all features on Library Page.
Offline Playlist
Complete or verify all features on a playlist.
Recently Played page
Complete or verify all features on Recently Played Page.
Liked Songs page
Complete or verify all features on Liked Songs Page.
Liked Artists page
Complete or verify all features on Liked Artists Page.
Liked Albums page
Complete or verify all features on Liked Albums Page.
Offline Songs page
Complete or verify all features on Offline Songs Page.
Song Queue page
Complete or verify all features on Song Queue Page.
Settings Page
Complete or verify all features on Settings Page.
Offline Mode
Complete or verify all features in Offline Mode Works.
Plugins
Complete or verify all features for Plugins