mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 06:17:57 +01:00 
			
		
		
		
	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:
		| @@ -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 New Issue
	
	Block a user