mirror of
https://github.com/gokadzev/Musify.git
synced 2026-03-13 15:20:46 +08:00
fix: add default sorting option for playlists and user songs (should fix: #637)
This commit is contained in:
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "اسم قائمة التشغيل الخاصة",
|
||||
"customPlaylists": "Custom playlists",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Delete",
|
||||
"deleteFolder": "Delete folder",
|
||||
"deleteFolderQuestion": "Are you sure you want to delete this folder? Playlists inside will be moved to the main library.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "Name der benutzerdefinierten Playlist",
|
||||
"customPlaylists": "Custom playlists",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Delete",
|
||||
"deleteFolder": "Delete folder",
|
||||
"deleteFolderQuestion": "Are you sure you want to delete this folder? Playlists inside will be moved to the main library.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "Όνομα προσαρμοσμένης λίστας αναπαραγωγής",
|
||||
"customPlaylists": "Custom playlists",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Delete",
|
||||
"deleteFolder": "Delete folder",
|
||||
"deleteFolderQuestion": "Are you sure you want to delete this folder? Playlists inside will be moved to the main library.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "Custom playlist name",
|
||||
"customPlaylists": "Custom playlists",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Delete",
|
||||
"deleteFolder": "Delete folder",
|
||||
"deleteFolderQuestion": "Are you sure you want to delete this folder? Playlists inside will be moved to the main library.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "Nombre personalizado de la lista de reproducción",
|
||||
"customPlaylists": "Listas de reproducción personalizadas",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Eliminar",
|
||||
"deleteFolder": "Eliminar carpeta",
|
||||
"deleteFolderQuestion": "¿Estás seguro de que deseas eliminar esta carpeta? Las listas de reproducción que contiene se moverán a la biblioteca principal.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "Kohandatud nimekirja nimi",
|
||||
"customPlaylists": "Kohandatud nimekirjad",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Kustuta",
|
||||
"deleteFolder": "Kustuta kaust",
|
||||
"deleteFolderQuestion": "Kas olete kindel, et soovite selle kausta kustutada? Kaustas olevad nimekirjad liigutatakse peamise teeki.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "Nom de la playlist personnalisée",
|
||||
"customPlaylists": "Playlists personnalisées",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Supprimer",
|
||||
"deleteFolder": "Supprimer le dossier",
|
||||
"deleteFolderQuestion": "Êtes-vous sûr de vouloir supprimer ce dossier ? Les playlists qu'il contient seront déplacées vers la bibliothèque principale.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "שם רשימת השמעה מותאם אישית",
|
||||
"customPlaylists": "רשימות השמעה מותאמות אישית",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Delete",
|
||||
"deleteFolder": "Delete folder",
|
||||
"deleteFolderQuestion": "Are you sure you want to delete this folder? Playlists inside will be moved to the main library.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "कस्टम प्लेलिस्ट नाम",
|
||||
"customPlaylists": "कस्टम प्लेलिस्ट",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Delete",
|
||||
"deleteFolder": "Delete folder",
|
||||
"deleteFolderQuestion": "Are you sure you want to delete this folder? Playlists inside will be moved to the main library.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "Saját lejátszási lista neve",
|
||||
"customPlaylists": "Saját lejátszási listák",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Törlés",
|
||||
"deleteFolder": "Mappa törlése",
|
||||
"deleteFolderQuestion": "Biztos törölni akarod a mappát? A benne lévő lejátszási listák átkerülnek a fő könyvtárba.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "Nama playlist khusus",
|
||||
"customPlaylists": "Playlist khusus",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Delete",
|
||||
"deleteFolder": "Delete folder",
|
||||
"deleteFolderQuestion": "Are you sure you want to delete this folder? Playlists inside will be moved to the main library.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "Nome playlist personalizzata",
|
||||
"customPlaylists": "Custom playlists",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Delete",
|
||||
"deleteFolder": "Delete folder",
|
||||
"deleteFolderQuestion": "Are you sure you want to delete this folder? Playlists inside will be moved to the main library.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "リスト名の指定",
|
||||
"customPlaylists": "あなたの再生リスト",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "削除",
|
||||
"deleteFolder": "フォルダーを削除",
|
||||
"deleteFolderQuestion": "このフォルダーを削除しますか? 中身の再生リストは、メインのライブラリに移動されます。",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "커스텀 재생목록 이름",
|
||||
"customPlaylists": "커스텀 재생목록",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "삭제",
|
||||
"deleteFolder": "폴더 삭제",
|
||||
"deleteFolderQuestion": "이 폴더를 삭제할까요? 폴더 안의 재생목록이 기본 라이브러리로 이동합니다.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "Własna nazwa playlisty",
|
||||
"customPlaylists": "Custom playlists",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Delete",
|
||||
"deleteFolder": "Delete folder",
|
||||
"deleteFolderQuestion": "Are you sure you want to delete this folder? Playlists inside will be moved to the main library.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "Nome da playlist",
|
||||
"customPlaylists": "Playlists personalizadas",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Delete",
|
||||
"deleteFolder": "Delete folder",
|
||||
"deleteFolderQuestion": "Are you sure you want to delete this folder? Playlists inside will be moved to the main library.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "Название плейлиста",
|
||||
"customPlaylists": "Плейлисты",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Delete",
|
||||
"deleteFolder": "Delete folder",
|
||||
"deleteFolderQuestion": "Are you sure you want to delete this folder? Playlists inside will be moved to the main library.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "Anpassat spellistsnamn",
|
||||
"customPlaylists": "Anpassade spellistor",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Delete",
|
||||
"deleteFolder": "Delete folder",
|
||||
"deleteFolderQuestion": "Are you sure you want to delete this folder? Playlists inside will be moved to the main library.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "Çalma Listesi İsmi",
|
||||
"customPlaylists": "Kişisel Çalma Listeleri",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Delete",
|
||||
"deleteFolder": "Delete folder",
|
||||
"deleteFolderQuestion": "Are you sure you want to delete this folder? Playlists inside will be moved to the main library.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "Назва власного плейлиста",
|
||||
"customPlaylists": "Custom playlists",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Delete",
|
||||
"deleteFolder": "Delete folder",
|
||||
"deleteFolderQuestion": "Are you sure you want to delete this folder? Playlists inside will be moved to the main library.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "新建播放列表名稱",
|
||||
"customPlaylists": "Custom playlists",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Delete",
|
||||
"deleteFolder": "Delete folder",
|
||||
"deleteFolderQuestion": "Are you sure you want to delete this folder? Playlists inside will be moved to the main library.",
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"customPlaylistName": "新建播放列表名称",
|
||||
"customPlaylists": "Custom playlists",
|
||||
"dateAdded": "Date Added",
|
||||
"default_": "Default",
|
||||
"delete": "Delete",
|
||||
"deleteFolder": "Delete folder",
|
||||
"deleteFolderQuestion": "Are you sure you want to delete this folder? Playlists inside will be moved to the main library.",
|
||||
|
||||
@@ -43,7 +43,7 @@ import 'package:musify/widgets/song_bar.dart';
|
||||
import 'package:musify/widgets/sort_button.dart';
|
||||
import 'package:musify/widgets/spinner.dart';
|
||||
|
||||
enum PlaylistSortType { title, artist }
|
||||
enum PlaylistSortType { default_, title, artist }
|
||||
|
||||
class PlaylistPage extends StatefulWidget {
|
||||
const PlaylistPage({
|
||||
@@ -77,7 +77,7 @@ class _PlaylistPageState extends State<PlaylistPage> {
|
||||
// Sorting
|
||||
late PlaylistSortType _sortType = PlaylistSortType.values.firstWhere(
|
||||
(e) => e.name == playlistSortSetting,
|
||||
orElse: () => PlaylistSortType.title,
|
||||
orElse: () => PlaylistSortType.default_,
|
||||
);
|
||||
|
||||
@override
|
||||
@@ -558,6 +558,8 @@ class _PlaylistPageState extends State<PlaylistPage> {
|
||||
|
||||
String _getSortTypeDisplayText(PlaylistSortType type) {
|
||||
switch (type) {
|
||||
case PlaylistSortType.default_:
|
||||
return context.l10n!.default_;
|
||||
case PlaylistSortType.title:
|
||||
return context.l10n!.name;
|
||||
case PlaylistSortType.artist:
|
||||
@@ -587,10 +589,23 @@ class _PlaylistPageState extends State<PlaylistPage> {
|
||||
void _sortPlaylist(PlaylistSortType type) {
|
||||
if (_playlist == null || _playlist['list'] == null) return;
|
||||
|
||||
final playlist = _playlist['list'] as List;
|
||||
final sortKey = type == PlaylistSortType.title ? 'title' : 'artist';
|
||||
// Skip sorting if using default order
|
||||
if (type == PlaylistSortType.default_) return;
|
||||
|
||||
final playlist = _playlist['list'] as List;
|
||||
|
||||
switch (type) {
|
||||
case PlaylistSortType.default_:
|
||||
// Should not reach here due to early return above
|
||||
break;
|
||||
case PlaylistSortType.title:
|
||||
sortSongsByKey(playlist, 'title');
|
||||
break;
|
||||
case PlaylistSortType.artist:
|
||||
sortSongsByKey(playlist, 'artist');
|
||||
break;
|
||||
}
|
||||
|
||||
sortSongsByKey(playlist, sortKey);
|
||||
_playlist['list'] = playlist;
|
||||
}
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ import 'package:musify/widgets/playlist_header.dart';
|
||||
import 'package:musify/widgets/song_bar.dart';
|
||||
import 'package:musify/widgets/sort_button.dart';
|
||||
|
||||
enum OfflineSortType { title, artist, dateAdded }
|
||||
enum OfflineSortType { default_, title, artist, dateAdded }
|
||||
|
||||
class UserSongsPage extends StatefulWidget {
|
||||
const UserSongsPage({super.key, required this.page});
|
||||
@@ -88,7 +88,7 @@ class _UserSongsPageState extends State<UserSongsPage> {
|
||||
OfflineSortType _getCurrentOfflineSortType() {
|
||||
return OfflineSortType.values.firstWhere(
|
||||
(e) => e.name == offlineSortSetting,
|
||||
orElse: () => OfflineSortType.title,
|
||||
orElse: () => OfflineSortType.default_,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -283,6 +283,7 @@ class _UserSongsPageState extends State<UserSongsPage> {
|
||||
|
||||
String _getSortTypeDisplayText(OfflineSortType type) {
|
||||
return switch (type) {
|
||||
OfflineSortType.default_ => context.l10n!.default_,
|
||||
OfflineSortType.title => context.l10n!.name,
|
||||
OfflineSortType.artist => context.l10n!.artist,
|
||||
OfflineSortType.dateAdded => context.l10n!.dateAdded,
|
||||
@@ -290,7 +291,13 @@ class _UserSongsPageState extends State<UserSongsPage> {
|
||||
}
|
||||
|
||||
void _sortOfflineSongs(OfflineSortType type) {
|
||||
// Skip sorting and saving if using default order
|
||||
if (type == OfflineSortType.default_) return;
|
||||
|
||||
switch (type) {
|
||||
case OfflineSortType.default_:
|
||||
// Should not reach here due to early return above
|
||||
break;
|
||||
case OfflineSortType.title:
|
||||
userOfflineSongs.sort((a, b) {
|
||||
final titleA = (a['title'] ?? '').toString().toLowerCase();
|
||||
|
||||
@@ -81,11 +81,11 @@ final themeModeSetting =
|
||||
|
||||
String playlistSortSetting = Hive.box(
|
||||
'settings',
|
||||
).get('playlistSortType', defaultValue: PlaylistSortType.title.name);
|
||||
).get('playlistSortType', defaultValue: PlaylistSortType.default_.name);
|
||||
|
||||
String offlineSortSetting = Hive.box(
|
||||
'settings',
|
||||
).get('offlineSortType', defaultValue: OfflineSortType.title.name);
|
||||
).get('offlineSortType', defaultValue: OfflineSortType.default_.name);
|
||||
|
||||
Color primaryColorSetting = Color(
|
||||
Hive.box('settings').get('accentColor', defaultValue: 0xff91cef4),
|
||||
|
||||
Reference in New Issue
Block a user