From 18835d92ddb29ee7f4f04e38b9aa20c42ea0731b Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Sun, 12 Jul 2026 03:03:14 +0200 Subject: [PATCH] refactor(navigation): reuse library icon mapping --- lib/widgets/side_navigation_rail.dart | 22 +++------------------- test/utils/content_utils_test.dart | 10 ++++++++++ 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/lib/widgets/side_navigation_rail.dart b/lib/widgets/side_navigation_rail.dart index b0dec0c6..adb83c49 100644 --- a/lib/widgets/side_navigation_rail.dart +++ b/lib/widgets/side_navigation_rail.dart @@ -20,6 +20,7 @@ import '../providers/libraries_provider.dart'; import '../services/music/music_playback_service.dart'; import '../services/settings_service.dart'; import '../utils/music_navigation.dart'; +import '../utils/content_utils.dart'; import '../utils/platform_detector.dart'; import '../utils/scroll_utils.dart'; import '../utils/library_grouping.dart'; @@ -592,23 +593,6 @@ class SideNavigationRailState extends State with MountedSetS librariesProvider.refresh(); } - IconData _getLibraryIcon(String type) { - switch (type.toLowerCase()) { - case 'movie': - return Symbols.movie_rounded; - case 'show': - return Symbols.tv_rounded; - case 'artist': - return Symbols.music_note_rounded; - case 'photo': - return Symbols.photo_rounded; - case 'mixed': - return Symbols.share_rounded; - default: - return Symbols.folder_rounded; - } - } - /// Calculate top padding for macOS traffic lights double _getTopPadding(BuildContext context) { double basePadding = MediaQuery.paddingOf(context).top + 16; @@ -1310,8 +1294,8 @@ class SideNavigationRailState extends State with MountedSetS return Padding( padding: const EdgeInsets.only(left: 12), child: NavigationRailItem( - icon: _getLibraryIcon(library.kind.id), - selectedIcon: _getLibraryIcon(library.kind.id), + icon: ContentTypeHelper.getLibraryIcon(library.kind.id), + selectedIcon: ContentTypeHelper.getLibraryIcon(library.kind.id), label: Column( crossAxisAlignment: .start, mainAxisSize: .min, diff --git a/test/utils/content_utils_test.dart b/test/utils/content_utils_test.dart index 0a632f5f..3996b7a8 100644 --- a/test/utils/content_utils_test.dart +++ b/test/utils/content_utils_test.dart @@ -1,4 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; +import 'package:material_symbols_icons/symbols.dart'; import 'package:plezy/media/media_backend.dart'; import 'package:plezy/media/media_item.dart'; import 'package:plezy/media/media_item_types.dart'; @@ -96,5 +97,14 @@ void main() { test('isMusicLibrary returns false for null and non-matching types', () { expect(ContentTypeHelper.isMusicLibrary(null), isFalse); }); + + test('getLibraryIcon normalizes type and falls back to folder', () { + expect(ContentTypeHelper.getLibraryIcon('MOVIE'), Symbols.movie_rounded); + expect(ContentTypeHelper.getLibraryIcon('show'), Symbols.tv_rounded); + expect(ContentTypeHelper.getLibraryIcon('artist'), Symbols.music_note_rounded); + expect(ContentTypeHelper.getLibraryIcon('photo'), Symbols.photo_rounded); + expect(ContentTypeHelper.getLibraryIcon('mixed'), Symbols.share_rounded); + expect(ContentTypeHelper.getLibraryIcon('unknown'), Symbols.folder_rounded); + }); }); }