From 33b9848f6141739f55dc055b4e0ca72a8cf4d528 Mon Sep 17 00:00:00 2001 From: mikooomich Date: Thu, 13 Jun 2024 15:47:08 -0400 Subject: [PATCH] app: local: Sort songs and folders * We sort in UI instead of view model as the directory trees have their own nuances and I do not feel like torturing myself with database gymnastics today * Song folders are only sortable by name --- .../library/LibrarySongsFolderScreen.kt | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/app/src/main/java/com/dd3boh/outertune/ui/screens/library/LibrarySongsFolderScreen.kt b/app/src/main/java/com/dd3boh/outertune/ui/screens/library/LibrarySongsFolderScreen.kt index 6f47b6296..d160f2734 100644 --- a/app/src/main/java/com/dd3boh/outertune/ui/screens/library/LibrarySongsFolderScreen.kt +++ b/app/src/main/java/com/dd3boh/outertune/ui/screens/library/LibrarySongsFolderScreen.kt @@ -57,6 +57,7 @@ import com.dd3boh.outertune.utils.rememberEnumPreference import com.dd3boh.outertune.utils.rememberPreference import com.dd3boh.outertune.viewmodels.LibrarySongsViewModel import com.dd3boh.outertune.ui.utils.ItemWrapper +import java.time.ZoneOffset import java.util.Stack @SuppressLint("StateFlowValueCalledInComposition") @@ -108,6 +109,27 @@ fun LibrarySongsFolderScreen( } val wrappedSongs = currDir.files.map { item -> ItemWrapper(item) }.toMutableList() + + // sort songs + wrappedSongs.sortBy { + when (sortType) { + SongSortType.CREATE_DATE -> it.item.song.inLibrary?.toEpochSecond(ZoneOffset.UTC).toString() + SongSortType.NAME -> it.item.song.title + SongSortType.ARTIST -> it.item.artists.firstOrNull()?.name + SongSortType.PLAY_TIME -> it.item.song.totalPlayTime.toString() + } + } + if (sortDescending) { + wrappedSongs.reverse() + } + + // sort folders + currDir.subdirs.sortBy { it.currentDir } // only sort by name + + if (sortDescending) { + currDir.subdirs.reverse() + } + var selection by remember { mutableStateOf(false) }