Minor cleanup 2: Electric Boogaloo
- Reword pins on top setting - Make "Latest" button style match old UI - Sort sources by name
This commit is contained in:
parent
0ec9496d26
commit
08e63e5fab
7 changed files with 45 additions and 50 deletions
|
@ -12,46 +12,36 @@ import kotlinx.coroutines.flow.distinctUntilChanged
|
|||
|
||||
class GetEnabledSources(
|
||||
private val repository: SourceRepository,
|
||||
private val preferences: PreferencesHelper
|
||||
private val preferences: PreferencesHelper,
|
||||
) {
|
||||
|
||||
fun subscribe(): Flow<List<Source>> {
|
||||
return preferences.pinnedSources().asFlow()
|
||||
.combine(preferences.enabledLanguages().asFlow()) { pinList, enabledLanguages ->
|
||||
Config(pinSet = pinList, enabledSources = enabledLanguages)
|
||||
}
|
||||
.combine(preferences.disabledSources().asFlow()) { config, disabledSources ->
|
||||
config.copy(disabledSources = disabledSources)
|
||||
}
|
||||
.combine(preferences.lastUsedSource().asFlow()) { config, lastUsedSource ->
|
||||
config.copy(lastUsedSource = lastUsedSource)
|
||||
}
|
||||
.combine(repository.getSources()) { (pinList, enabledLanguages, disabledSources, lastUsedSource), sources ->
|
||||
val pinsOnTop = preferences.pinsOnTop().get()
|
||||
sources
|
||||
.filter { it.lang in enabledLanguages || it.id == LocalSource.ID }
|
||||
.filterNot { it.id.toString() in disabledSources }
|
||||
.flatMap {
|
||||
val flag = if ("${it.id}" in pinList) Pins.pinned else Pins.unpinned
|
||||
val source = it.copy(pin = flag)
|
||||
val toFlatten = mutableListOf(source)
|
||||
if (source.id == lastUsedSource) {
|
||||
toFlatten.add(source.copy(isUsedLast = true, pin = source.pin - Pin.Actual))
|
||||
}
|
||||
if (pinsOnTop.not() && Pin.Pinned in source.pin) {
|
||||
toFlatten[0] = toFlatten[0].copy(pin = source.pin + Pin.Forced)
|
||||
toFlatten.add(source.copy(pin = source.pin - Pin.Actual))
|
||||
}
|
||||
toFlatten
|
||||
return combine(
|
||||
preferences.pinnedSources().asFlow(),
|
||||
preferences.enabledLanguages().asFlow(),
|
||||
preferences.disabledSources().asFlow(),
|
||||
preferences.lastUsedSource().asFlow(),
|
||||
repository.getSources(),
|
||||
) { pinnedSourceIds, enabledLanguages, disabledSources, lastUsedSource, sources ->
|
||||
val duplicatePins = preferences.duplicatePinnedSources().get()
|
||||
sources
|
||||
.filter { it.lang in enabledLanguages || it.id == LocalSource.ID }
|
||||
.filterNot { it.id.toString() in disabledSources }
|
||||
.sortedBy { it.name }
|
||||
.flatMap {
|
||||
val flag = if ("${it.id}" in pinnedSourceIds) Pins.pinned else Pins.unpinned
|
||||
val source = it.copy(pin = flag)
|
||||
val toFlatten = mutableListOf(source)
|
||||
if (source.id == lastUsedSource) {
|
||||
toFlatten.add(source.copy(isUsedLast = true, pin = source.pin - Pin.Actual))
|
||||
}
|
||||
}
|
||||
if (duplicatePins && Pin.Pinned in source.pin) {
|
||||
toFlatten[0] = toFlatten[0].copy(pin = source.pin + Pin.Forced)
|
||||
toFlatten.add(source.copy(pin = source.pin - Pin.Actual))
|
||||
}
|
||||
toFlatten
|
||||
}
|
||||
}
|
||||
.distinctUntilChanged()
|
||||
}
|
||||
}
|
||||
|
||||
private data class Config(
|
||||
val pinSet: Set<String> = setOf(),
|
||||
val enabledSources: Set<String> = setOf(),
|
||||
val disabledSources: Set<String> = setOf(),
|
||||
val lastUsedSource: Long? = null
|
||||
)
|
||||
|
|
|
@ -26,11 +26,11 @@ data class Source(
|
|||
?.asImageBitmap()
|
||||
}
|
||||
|
||||
val key: () -> Long = {
|
||||
val key: () -> String = {
|
||||
when {
|
||||
isUsedLast -> id shr 16
|
||||
Pin.Forced in pin -> id shr 32
|
||||
else -> id
|
||||
isUsedLast -> "$id-lastused"
|
||||
Pin.Forced in pin -> "$id-forced"
|
||||
else -> "$id"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ import androidx.compose.material3.AlertDialog
|
|||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.LocalTextStyle
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
|
@ -195,7 +196,12 @@ fun SourceItem(
|
|||
}
|
||||
if (item.supportsLatest) {
|
||||
TextButton(onClick = { onClickLatest(item) }) {
|
||||
Text(text = stringResource(id = R.string.latest))
|
||||
Text(
|
||||
text = stringResource(id = R.string.latest),
|
||||
style = LocalTextStyle.current.copy(
|
||||
color = MaterialTheme.colorScheme.primary
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
SourcePinButton(
|
||||
|
|
|
@ -324,7 +324,7 @@ class PreferencesHelper(val context: Context) {
|
|||
|
||||
fun autoClearChapterCache() = prefs.getBoolean(Keys.autoClearChapterCache, false)
|
||||
|
||||
fun pinsOnTop() = flowPrefs.getBoolean("pins_on_top", true)
|
||||
fun duplicatePinnedSources() = flowPrefs.getBoolean("duplicate_pinned_sources", false)
|
||||
|
||||
fun setChapterSettingsDefault(manga: Manga) {
|
||||
prefs.edit {
|
||||
|
|
|
@ -44,7 +44,7 @@ class SourcePresenter(
|
|||
}
|
||||
}
|
||||
|
||||
private suspend fun collectLatestSources(sources: List<Source>) {
|
||||
private fun collectLatestSources(sources: List<Source>) {
|
||||
val map = TreeMap<String, MutableList<Source>> { d1, d2 ->
|
||||
// Catalogues without a lang defined will be placed at the end
|
||||
when {
|
||||
|
|
|
@ -22,13 +22,12 @@ class SettingsBrowseController : SettingsController() {
|
|||
titleRes = R.string.browse
|
||||
|
||||
preferenceCategory {
|
||||
titleRes = R.string.pref_category_general
|
||||
titleRes = R.string.label_sources
|
||||
|
||||
switchPreference {
|
||||
bindTo(preferences.pinsOnTop())
|
||||
titleRes = R.string.pref_move_on_top
|
||||
summaryRes = R.string.pref_move_on_top_summary
|
||||
defaultValue = true
|
||||
bindTo(preferences.duplicatePinnedSources())
|
||||
titleRes = R.string.pref_duplicate_pinned_sources
|
||||
summaryRes = R.string.pref_duplicate_pinned_sources_summary
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -419,10 +419,10 @@
|
|||
<string name="action_track">Track</string>
|
||||
|
||||
<!-- Browse section -->
|
||||
<string name="pref_duplicate_pinned_sources">Show duplicated pinned sources</string>
|
||||
<string name="pref_duplicate_pinned_sources_summary">Repeat pinned sources in their respective language groups</string>
|
||||
<string name="pref_enable_automatic_extension_updates">Check for extension updates</string>
|
||||
<string name="pref_search_pinned_sources_only">Only include pinned sources</string>
|
||||
<string name="pref_move_on_top">Move pins on top</string>
|
||||
<string name="pref_move_on_top_summary">Move up pins to top of the source list</string>
|
||||
|
||||
<!-- Backup section -->
|
||||
<string name="pref_create_backup">Create backup</string>
|
||||
|
|
Reference in a new issue