From 7f9211f57027875c0173f4c0f70f2c31e1525818 Mon Sep 17 00:00:00 2001 From: Malopieds Date: Tue, 9 Jul 2024 10:15:21 +0200 Subject: [PATCH] feat: add playlist sorting artists --- .../innertune/viewmodels/AutoPlaylistViewModel.kt | 11 +++++++---- .../innertune/viewmodels/LocalPlaylistViewModel.kt | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/malopieds/innertune/viewmodels/AutoPlaylistViewModel.kt b/app/src/main/java/com/malopieds/innertune/viewmodels/AutoPlaylistViewModel.kt index 0befb7829..3d9a01125 100644 --- a/app/src/main/java/com/malopieds/innertune/viewmodels/AutoPlaylistViewModel.kt +++ b/app/src/main/java/com/malopieds/innertune/viewmodels/AutoPlaylistViewModel.kt @@ -25,6 +25,8 @@ import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn +import java.text.Collator +import java.util.Locale import javax.inject.Inject @HiltViewModel @@ -52,10 +54,11 @@ class AutoPlaylistViewModel PlaylistSongSortType.CUSTOM -> songs PlaylistSongSortType.CREATE_DATE -> songs.sortedBy { it.id } PlaylistSongSortType.NAME -> songs.sortedBy { it.song.title } - PlaylistSongSortType.ARTIST -> - songs.sortedBy { song -> - song.artists.joinToString { it.name } - } + PlaylistSongSortType.ARTIST -> { + val collator = Collator.getInstance(Locale.getDefault()) + collator.strength = Collator.PRIMARY + songs.sortedWith(compareBy(collator) { song -> song.artists.joinToString("") { it.name } }) + } PlaylistSongSortType.PLAY_TIME -> songs.sortedBy { it.song.totalPlayTime } }.reversed(sortDescending && sortType != PlaylistSongSortType.CUSTOM) }.stateIn(viewModelScope, SharingStarted.Lazily, emptyList()) diff --git a/app/src/main/java/com/malopieds/innertune/viewmodels/LocalPlaylistViewModel.kt b/app/src/main/java/com/malopieds/innertune/viewmodels/LocalPlaylistViewModel.kt index 7ea81cfd7..ea27e49db 100644 --- a/app/src/main/java/com/malopieds/innertune/viewmodels/LocalPlaylistViewModel.kt +++ b/app/src/main/java/com/malopieds/innertune/viewmodels/LocalPlaylistViewModel.kt @@ -18,6 +18,8 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn +import java.text.Collator +import java.util.Locale import javax.inject.Inject @HiltViewModel @@ -45,10 +47,11 @@ class LocalPlaylistViewModel PlaylistSongSortType.CUSTOM -> songs PlaylistSongSortType.CREATE_DATE -> songs.sortedBy { it.map.id } PlaylistSongSortType.NAME -> songs.sortedBy { it.song.song.title } - PlaylistSongSortType.ARTIST -> - songs.sortedBy { song -> - song.song.artists.joinToString { it.name } - } + PlaylistSongSortType.ARTIST -> { + val collator = Collator.getInstance(Locale.getDefault()) + collator.strength = Collator.PRIMARY + songs.sortedWith(compareBy(collator) { song -> song.song.artists.joinToString("") { it.name } }) + } PlaylistSongSortType.PLAY_TIME -> songs.sortedBy { it.song.song.totalPlayTime } }.reversed(sortDescending && sortType != PlaylistSongSortType.CUSTOM) }.stateIn(viewModelScope, SharingStarted.Lazily, emptyList())