Added random library sort (#1317)

Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com>
(cherry picked from commit a72db41bf1746db095fd27bbbce9765c06453581)

# Conflicts:
#	app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt
#	domain/src/main/java/tachiyomi/domain/library/model/LibrarySortMode.kt
This commit is contained in:
Jack Hamilton
2024-10-13 02:51:34 -05:00
committed by Jobobby04
parent 457e5f963b
commit 2f102db19d
8 changed files with 55 additions and 9 deletions
@@ -6,6 +6,8 @@ import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Refresh
import androidx.compose.material3.FilterChip
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@@ -35,6 +37,7 @@ import tachiyomi.domain.library.model.sort
import tachiyomi.domain.library.service.LibraryPreferences
import tachiyomi.i18n.MR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.presentation.core.components.BaseSortItem
import tachiyomi.presentation.core.components.CheckboxItem
import tachiyomi.presentation.core.components.HeadingItem
import tachiyomi.presentation.core.components.IconItem
@@ -222,6 +225,7 @@ private fun ColumnScope.SortPage(
MR.strings.action_sort_latest_chapter to LibrarySort.Type.LatestChapter,
MR.strings.action_sort_chapter_fetch_date to LibrarySort.Type.ChapterFetchDate,
MR.strings.action_sort_date_added to LibrarySort.Type.DateAdded,
MR.strings.action_sort_random to LibrarySort.Type.Random,
// SY -->
if (hasSortTags) {
SYMR.strings.tag_sorting to LibrarySort.Type.TagList
@@ -230,6 +234,17 @@ private fun ColumnScope.SortPage(
},
// SY <--
).plus(trackerSortOption).map { (titleRes, mode) ->
if (mode == LibrarySort.Type.Random) {
BaseSortItem(
label = stringResource(titleRes),
icon = Icons.Default.Refresh
.takeIf { sortingMode == LibrarySort.Type.Random },
onClick = {
screenModel.setSort(category, mode, LibrarySort.Direction.Ascending)
},
)
return@map
}
SortItem(
label = stringResource(titleRes),
sortDescending = sortDescending.takeIf { sortingMode == mode },
@@ -241,7 +256,11 @@ private fun ColumnScope.SortPage(
} else {
LibrarySort.Direction.Descending
}
else -> if (sortDescending) LibrarySort.Direction.Descending else LibrarySort.Direction.Ascending
else -> if (sortDescending) {
LibrarySort.Direction.Descending
} else {
LibrarySort.Direction.Ascending
}
}
screenModel.setSort(category, mode, direction)
},
@@ -117,6 +117,7 @@ import tachiyomi.source.local.LocalSource
import tachiyomi.source.local.isLocal
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import kotlin.random.Random
/**
* Typealias for the library manga, using the category as keys, and list of manga as values.
@@ -447,6 +448,9 @@ class LibraryScreenModel(
val item2Score = trackerScores[i2.libraryManga.id] ?: defaultTrackerScoreSortValue
item1Score.compareTo(item2Score)
}
LibrarySort.Type.Random -> {
error("Why Are We Still Here? Just To Suffer?")
}
// SY -->
LibrarySort.Type.TagList -> {
val manga1IndexOfTag = listOfTags.indexOfFirst {
@@ -463,10 +467,13 @@ class LibraryScreenModel(
return mapValues { (key, value) ->
// SY -->
val isAscending = groupSort?.isAscending ?: key.sort.isAscending
// SY <--
val comparator = key.sort.comparator()
.let { if (/* SY --> */ isAscending /* SY <-- */) it else it.reversed() }
val sort = groupSort ?: key.sort
if (sort.type == LibrarySort.Type.Random) {
return@mapValues value.shuffled(Random(libraryPreferences.randomSortSeed().get()))
}
val comparator = sort.comparator()
// SY <--
.let { if (/* SY --> */ sort.isAscending /* SY <-- */) it else it.reversed() }
.thenComparator(sortAlphabetically)
value.sortedWith(comparator)