mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Don't run automatic backup or library update jobs if battery is low
This commit is contained in:
		@@ -180,7 +180,7 @@ private val displayModes = listOf(
 | 
			
		||||
private fun ColumnScope.DisplayPage(
 | 
			
		||||
    screenModel: LibrarySettingsScreenModel,
 | 
			
		||||
) {
 | 
			
		||||
    val displayMode by screenModel.libraryPreferences.libraryDisplayMode().collectAsState()
 | 
			
		||||
    val displayMode by screenModel.libraryPreferences.displayMode().collectAsState()
 | 
			
		||||
    SettingsChipRow(R.string.action_display_mode) {
 | 
			
		||||
        displayModes.map { (titleRes, mode) ->
 | 
			
		||||
            FilterChip(
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,6 @@ import tachiyomi.domain.category.interactor.GetCategories
 | 
			
		||||
import tachiyomi.domain.category.interactor.ResetCategoryFlags
 | 
			
		||||
import tachiyomi.domain.category.model.Category
 | 
			
		||||
import tachiyomi.domain.library.service.LibraryPreferences
 | 
			
		||||
import tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_BATTERY_NOT_LOW
 | 
			
		||||
import tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_CHARGING
 | 
			
		||||
import tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_NETWORK_NOT_METERED
 | 
			
		||||
import tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_ONLY_ON_WIFI
 | 
			
		||||
@@ -123,14 +122,14 @@ object SettingsLibraryScreen : SearchableSettings {
 | 
			
		||||
    ): Preference.PreferenceGroup {
 | 
			
		||||
        val context = LocalContext.current
 | 
			
		||||
 | 
			
		||||
        val libraryUpdateIntervalPref = libraryPreferences.libraryUpdateInterval()
 | 
			
		||||
        val libraryUpdateCategoriesPref = libraryPreferences.libraryUpdateCategories()
 | 
			
		||||
        val libraryUpdateCategoriesExcludePref = libraryPreferences.libraryUpdateCategoriesExclude()
 | 
			
		||||
        val autoUpdateIntervalPref = libraryPreferences.autoUpdateInterval()
 | 
			
		||||
        val autoUpdateCategoriesPref = libraryPreferences.updateCategories()
 | 
			
		||||
        val autoUpdateCategoriesExcludePref = libraryPreferences.updateCategoriesExclude()
 | 
			
		||||
 | 
			
		||||
        val libraryUpdateInterval by libraryUpdateIntervalPref.collectAsState()
 | 
			
		||||
        val autoUpdateInterval by autoUpdateIntervalPref.collectAsState()
 | 
			
		||||
 | 
			
		||||
        val included by libraryUpdateCategoriesPref.collectAsState()
 | 
			
		||||
        val excluded by libraryUpdateCategoriesExcludePref.collectAsState()
 | 
			
		||||
        val included by autoUpdateCategoriesPref.collectAsState()
 | 
			
		||||
        val excluded by autoUpdateCategoriesExcludePref.collectAsState()
 | 
			
		||||
        var showCategoriesDialog by rememberSaveable { mutableStateOf(false) }
 | 
			
		||||
        if (showCategoriesDialog) {
 | 
			
		||||
            TriStateListDialog(
 | 
			
		||||
@@ -142,8 +141,8 @@ object SettingsLibraryScreen : SearchableSettings {
 | 
			
		||||
                itemLabel = { it.visualName },
 | 
			
		||||
                onDismissRequest = { showCategoriesDialog = false },
 | 
			
		||||
                onValueChanged = { newIncluded, newExcluded ->
 | 
			
		||||
                    libraryUpdateCategoriesPref.set(newIncluded.map { it.id.toString() }.toSet())
 | 
			
		||||
                    libraryUpdateCategoriesExcludePref.set(newExcluded.map { it.id.toString() }.toSet())
 | 
			
		||||
                    autoUpdateCategoriesPref.set(newIncluded.map { it.id.toString() }.toSet())
 | 
			
		||||
                    autoUpdateCategoriesExcludePref.set(newExcluded.map { it.id.toString() }.toSet())
 | 
			
		||||
                    showCategoriesDialog = false
 | 
			
		||||
                },
 | 
			
		||||
            )
 | 
			
		||||
@@ -153,7 +152,7 @@ object SettingsLibraryScreen : SearchableSettings {
 | 
			
		||||
            title = stringResource(R.string.pref_category_library_update),
 | 
			
		||||
            preferenceItems = listOf(
 | 
			
		||||
                Preference.PreferenceItem.ListPreference(
 | 
			
		||||
                    pref = libraryUpdateIntervalPref,
 | 
			
		||||
                    pref = autoUpdateIntervalPref,
 | 
			
		||||
                    title = stringResource(R.string.pref_library_update_interval),
 | 
			
		||||
                    entries = mapOf(
 | 
			
		||||
                        0 to stringResource(R.string.update_never),
 | 
			
		||||
@@ -169,15 +168,14 @@ object SettingsLibraryScreen : SearchableSettings {
 | 
			
		||||
                    },
 | 
			
		||||
                ),
 | 
			
		||||
                Preference.PreferenceItem.MultiSelectListPreference(
 | 
			
		||||
                    pref = libraryPreferences.libraryUpdateDeviceRestriction(),
 | 
			
		||||
                    enabled = libraryUpdateInterval > 0,
 | 
			
		||||
                    pref = libraryPreferences.autoUpdateDeviceRestrictions(),
 | 
			
		||||
                    enabled = autoUpdateInterval > 0,
 | 
			
		||||
                    title = stringResource(R.string.pref_library_update_restriction),
 | 
			
		||||
                    subtitle = stringResource(R.string.restrictions),
 | 
			
		||||
                    entries = mapOf(
 | 
			
		||||
                        DEVICE_ONLY_ON_WIFI to stringResource(R.string.connected_to_wifi),
 | 
			
		||||
                        DEVICE_NETWORK_NOT_METERED to stringResource(R.string.network_not_metered),
 | 
			
		||||
                        DEVICE_CHARGING to stringResource(R.string.charging),
 | 
			
		||||
                        DEVICE_BATTERY_NOT_LOW to stringResource(R.string.battery_not_low),
 | 
			
		||||
                    ),
 | 
			
		||||
                    onValueChanged = {
 | 
			
		||||
                        // Post to event looper to allow the preference to be updated.
 | 
			
		||||
@@ -206,7 +204,7 @@ object SettingsLibraryScreen : SearchableSettings {
 | 
			
		||||
                    subtitle = stringResource(R.string.pref_library_update_refresh_trackers_summary),
 | 
			
		||||
                ),
 | 
			
		||||
                Preference.PreferenceItem.MultiSelectListPreference(
 | 
			
		||||
                    pref = libraryPreferences.libraryUpdateMangaRestriction(),
 | 
			
		||||
                    pref = libraryPreferences.autoUpdateMangaRestrictions(),
 | 
			
		||||
                    title = stringResource(R.string.pref_library_update_manga_restriction),
 | 
			
		||||
                    entries = mapOf(
 | 
			
		||||
                        MANGA_HAS_UNREAD to stringResource(R.string.pref_update_only_completely_read),
 | 
			
		||||
 
 | 
			
		||||
@@ -20,6 +20,7 @@ import eu.kanade.tachiyomi.util.system.toast
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.workManager
 | 
			
		||||
import tachiyomi.core.preference.PreferenceStore
 | 
			
		||||
import tachiyomi.core.preference.TriState
 | 
			
		||||
import tachiyomi.core.preference.getAndSet
 | 
			
		||||
import tachiyomi.core.preference.getEnum
 | 
			
		||||
import tachiyomi.core.preference.minusAssign
 | 
			
		||||
import tachiyomi.core.preference.plusAssign
 | 
			
		||||
@@ -101,11 +102,11 @@ object Migrations {
 | 
			
		||||
            }
 | 
			
		||||
            if (oldVersion < 44) {
 | 
			
		||||
                // Reset sorting preference if using removed sort by source
 | 
			
		||||
                val oldSortingMode = prefs.getInt(libraryPreferences.librarySortingMode().key(), 0)
 | 
			
		||||
                val oldSortingMode = prefs.getInt(libraryPreferences.sortingMode().key(), 0)
 | 
			
		||||
 | 
			
		||||
                if (oldSortingMode == 5) { // SOURCE = 5
 | 
			
		||||
                    prefs.edit {
 | 
			
		||||
                        putInt(libraryPreferences.librarySortingMode().key(), 0) // ALPHABETICAL = 0
 | 
			
		||||
                        putInt(libraryPreferences.sortingMode().key(), 0) // ALPHABETICAL = 0
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@@ -180,14 +181,14 @@ object Migrations {
 | 
			
		||||
            }
 | 
			
		||||
            if (oldVersion < 61) {
 | 
			
		||||
                // Handle removed every 1 or 2 hour library updates
 | 
			
		||||
                val updateInterval = libraryPreferences.libraryUpdateInterval().get()
 | 
			
		||||
                val updateInterval = libraryPreferences.autoUpdateInterval().get()
 | 
			
		||||
                if (updateInterval == 1 || updateInterval == 2) {
 | 
			
		||||
                    libraryPreferences.libraryUpdateInterval().set(3)
 | 
			
		||||
                    libraryPreferences.autoUpdateInterval().set(3)
 | 
			
		||||
                    LibraryUpdateJob.setupTask(context, 3)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (oldVersion < 64) {
 | 
			
		||||
                val oldSortingMode = prefs.getInt(libraryPreferences.librarySortingMode().key(), 0)
 | 
			
		||||
                val oldSortingMode = prefs.getInt(libraryPreferences.sortingMode().key(), 0)
 | 
			
		||||
                val oldSortingDirection = prefs.getBoolean("library_sorting_ascending", true)
 | 
			
		||||
 | 
			
		||||
                val newSortingMode = when (oldSortingMode) {
 | 
			
		||||
@@ -208,12 +209,12 @@ object Migrations {
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                prefs.edit(commit = true) {
 | 
			
		||||
                    remove(libraryPreferences.librarySortingMode().key())
 | 
			
		||||
                    remove(libraryPreferences.sortingMode().key())
 | 
			
		||||
                    remove("library_sorting_ascending")
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                prefs.edit {
 | 
			
		||||
                    putString(libraryPreferences.librarySortingMode().key(), newSortingMode)
 | 
			
		||||
                    putString(libraryPreferences.sortingMode().key(), newSortingMode)
 | 
			
		||||
                    putString("library_sorting_ascending", newSortingDirection)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@@ -224,16 +225,16 @@ object Migrations {
 | 
			
		||||
            }
 | 
			
		||||
            if (oldVersion < 71) {
 | 
			
		||||
                // Handle removed every 3, 4, 6, and 8 hour library updates
 | 
			
		||||
                val updateInterval = libraryPreferences.libraryUpdateInterval().get()
 | 
			
		||||
                val updateInterval = libraryPreferences.autoUpdateInterval().get()
 | 
			
		||||
                if (updateInterval in listOf(3, 4, 6, 8)) {
 | 
			
		||||
                    libraryPreferences.libraryUpdateInterval().set(12)
 | 
			
		||||
                    libraryPreferences.autoUpdateInterval().set(12)
 | 
			
		||||
                    LibraryUpdateJob.setupTask(context, 12)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (oldVersion < 72) {
 | 
			
		||||
                val oldUpdateOngoingOnly = prefs.getBoolean("pref_update_only_non_completed_key", true)
 | 
			
		||||
                if (!oldUpdateOngoingOnly) {
 | 
			
		||||
                    libraryPreferences.libraryUpdateMangaRestriction() -= MANGA_NON_COMPLETED
 | 
			
		||||
                    libraryPreferences.autoUpdateMangaRestrictions() -= MANGA_NON_COMPLETED
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (oldVersion < 75) {
 | 
			
		||||
@@ -258,20 +259,20 @@ object Migrations {
 | 
			
		||||
            if (oldVersion < 81) {
 | 
			
		||||
                // Handle renamed enum values
 | 
			
		||||
                prefs.edit {
 | 
			
		||||
                    val newSortingMode = when (val oldSortingMode = prefs.getString(libraryPreferences.librarySortingMode().key(), "ALPHABETICAL")) {
 | 
			
		||||
                    val newSortingMode = when (val oldSortingMode = prefs.getString(libraryPreferences.sortingMode().key(), "ALPHABETICAL")) {
 | 
			
		||||
                        "LAST_CHECKED" -> "LAST_MANGA_UPDATE"
 | 
			
		||||
                        "UNREAD" -> "UNREAD_COUNT"
 | 
			
		||||
                        "DATE_FETCHED" -> "CHAPTER_FETCH_DATE"
 | 
			
		||||
                        else -> oldSortingMode
 | 
			
		||||
                    }
 | 
			
		||||
                    putString(libraryPreferences.librarySortingMode().key(), newSortingMode)
 | 
			
		||||
                    putString(libraryPreferences.sortingMode().key(), newSortingMode)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (oldVersion < 82) {
 | 
			
		||||
                prefs.edit {
 | 
			
		||||
                    val sort = prefs.getString(libraryPreferences.librarySortingMode().key(), null) ?: return@edit
 | 
			
		||||
                    val sort = prefs.getString(libraryPreferences.sortingMode().key(), null) ?: return@edit
 | 
			
		||||
                    val direction = prefs.getString("library_sorting_ascending", "ASCENDING")!!
 | 
			
		||||
                    putString(libraryPreferences.librarySortingMode().key(), "$sort,$direction")
 | 
			
		||||
                    putString(libraryPreferences.sortingMode().key(), "$sort,$direction")
 | 
			
		||||
                    remove("library_sorting_ascending")
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@@ -368,6 +369,12 @@ object Migrations {
 | 
			
		||||
                    readerPreferences.longStripSplitWebtoon().set(false)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (oldVersion < 105) {
 | 
			
		||||
                val pref = libraryPreferences.autoUpdateDeviceRestrictions()
 | 
			
		||||
                if (pref.isSet() && "battery_not_low" in pref.get()) {
 | 
			
		||||
                    pref.getAndSet { it - "battery_not_low" }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return true
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ import android.content.Context
 | 
			
		||||
import android.net.Uri
 | 
			
		||||
import androidx.core.net.toUri
 | 
			
		||||
import androidx.work.BackoffPolicy
 | 
			
		||||
import androidx.work.Constraints
 | 
			
		||||
import androidx.work.CoroutineWorker
 | 
			
		||||
import androidx.work.ExistingPeriodicWorkPolicy
 | 
			
		||||
import androidx.work.ExistingWorkPolicy
 | 
			
		||||
@@ -76,6 +77,10 @@ class BackupCreateJob(private val context: Context, workerParams: WorkerParamete
 | 
			
		||||
            val backupPreferences = Injekt.get<BackupPreferences>()
 | 
			
		||||
            val interval = prefInterval ?: backupPreferences.backupInterval().get()
 | 
			
		||||
            if (interval > 0) {
 | 
			
		||||
                val constraints = Constraints(
 | 
			
		||||
                    requiresBatteryNotLow = true,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                val request = PeriodicWorkRequestBuilder<BackupCreateJob>(
 | 
			
		||||
                    interval.toLong(),
 | 
			
		||||
                    TimeUnit.HOURS,
 | 
			
		||||
@@ -84,6 +89,7 @@ class BackupCreateJob(private val context: Context, workerParams: WorkerParamete
 | 
			
		||||
                )
 | 
			
		||||
                    .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 10.minutes.toJavaDuration())
 | 
			
		||||
                    .addTag(TAG_AUTO)
 | 
			
		||||
                    .setConstraints(constraints)
 | 
			
		||||
                    .setInputData(workDataOf(IS_AUTO_BACKUP_KEY to true))
 | 
			
		||||
                    .build()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -59,7 +59,6 @@ import tachiyomi.domain.chapter.model.NoChaptersException
 | 
			
		||||
import tachiyomi.domain.download.service.DownloadPreferences
 | 
			
		||||
import tachiyomi.domain.library.model.LibraryManga
 | 
			
		||||
import tachiyomi.domain.library.service.LibraryPreferences
 | 
			
		||||
import tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_BATTERY_NOT_LOW
 | 
			
		||||
import tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_CHARGING
 | 
			
		||||
import tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_NETWORK_NOT_METERED
 | 
			
		||||
import tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_ONLY_ON_WIFI
 | 
			
		||||
@@ -113,7 +112,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
 | 
			
		||||
    override suspend fun doWork(): Result {
 | 
			
		||||
        if (tags.contains(WORK_NAME_AUTO)) {
 | 
			
		||||
            val preferences = Injekt.get<LibraryPreferences>()
 | 
			
		||||
            val restrictions = preferences.libraryUpdateDeviceRestriction().get()
 | 
			
		||||
            val restrictions = preferences.autoUpdateDeviceRestrictions().get()
 | 
			
		||||
            if ((DEVICE_ONLY_ON_WIFI in restrictions) && !context.isConnectedToWifi()) {
 | 
			
		||||
                return Result.retry()
 | 
			
		||||
            }
 | 
			
		||||
@@ -134,7 +133,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
 | 
			
		||||
 | 
			
		||||
        // If this is a chapter update, set the last update time to now
 | 
			
		||||
        if (target == Target.CHAPTERS) {
 | 
			
		||||
            libraryPreferences.libraryUpdateLastTimestamp().set(Date().time)
 | 
			
		||||
            libraryPreferences.lastUpdatedTimestamp().set(Date().time)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val categoryId = inputData.getLong(KEY_CATEGORY, -1L)
 | 
			
		||||
@@ -181,14 +180,14 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
 | 
			
		||||
        val listToUpdate = if (categoryId != -1L) {
 | 
			
		||||
            libraryManga.filter { it.category == categoryId }
 | 
			
		||||
        } else {
 | 
			
		||||
            val categoriesToUpdate = libraryPreferences.libraryUpdateCategories().get().map { it.toLong() }
 | 
			
		||||
            val categoriesToUpdate = libraryPreferences.updateCategories().get().map { it.toLong() }
 | 
			
		||||
            val includedManga = if (categoriesToUpdate.isNotEmpty()) {
 | 
			
		||||
                libraryManga.filter { it.category in categoriesToUpdate }
 | 
			
		||||
            } else {
 | 
			
		||||
                libraryManga
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            val categoriesToExclude = libraryPreferences.libraryUpdateCategoriesExclude().get().map { it.toLong() }
 | 
			
		||||
            val categoriesToExclude = libraryPreferences.updateCategoriesExclude().get().map { it.toLong() }
 | 
			
		||||
            val excludedMangaIds = if (categoriesToExclude.isNotEmpty()) {
 | 
			
		||||
                libraryManga.filter { it.category in categoriesToExclude }.map { it.manga.id }
 | 
			
		||||
            } else {
 | 
			
		||||
@@ -229,7 +228,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
 | 
			
		||||
        val skippedUpdates = CopyOnWriteArrayList<Pair<Manga, String?>>()
 | 
			
		||||
        val failedUpdates = CopyOnWriteArrayList<Pair<Manga, String?>>()
 | 
			
		||||
        val hasDownloads = AtomicBoolean(false)
 | 
			
		||||
        val restrictions = libraryPreferences.libraryUpdateMangaRestriction().get()
 | 
			
		||||
        val restrictions = libraryPreferences.autoUpdateMangaRestrictions().get()
 | 
			
		||||
        val fetchWindow = setFetchInterval.getWindow(ZonedDateTime.now())
 | 
			
		||||
 | 
			
		||||
        coroutineScope {
 | 
			
		||||
@@ -558,13 +557,13 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
 | 
			
		||||
            prefInterval: Int? = null,
 | 
			
		||||
        ) {
 | 
			
		||||
            val preferences = Injekt.get<LibraryPreferences>()
 | 
			
		||||
            val interval = prefInterval ?: preferences.libraryUpdateInterval().get()
 | 
			
		||||
            val interval = prefInterval ?: preferences.autoUpdateInterval().get()
 | 
			
		||||
            if (interval > 0) {
 | 
			
		||||
                val restrictions = preferences.libraryUpdateDeviceRestriction().get()
 | 
			
		||||
                val restrictions = preferences.autoUpdateDeviceRestrictions().get()
 | 
			
		||||
                val constraints = Constraints(
 | 
			
		||||
                    requiredNetworkType = if (DEVICE_NETWORK_NOT_METERED in restrictions) { NetworkType.UNMETERED } else { NetworkType.CONNECTED },
 | 
			
		||||
                    requiresCharging = DEVICE_CHARGING in restrictions,
 | 
			
		||||
                    requiresBatteryNotLow = DEVICE_BATTERY_NOT_LOW in restrictions,
 | 
			
		||||
                    requiresBatteryNotLow = true,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                val request = PeriodicWorkRequestBuilder<LibraryUpdateJob>(
 | 
			
		||||
 
 | 
			
		||||
@@ -519,7 +519,7 @@ class LibraryScreenModel(
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun getDisplayMode(): PreferenceMutableState<LibraryDisplayMode> {
 | 
			
		||||
        return libraryPreferences.libraryDisplayMode().asState(coroutineScope)
 | 
			
		||||
        return libraryPreferences.displayMode().asState(coroutineScope)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun getColumnsPreferenceForCurrentOrientation(isLandscape: Boolean): PreferenceMutableState<Int> {
 | 
			
		||||
 
 | 
			
		||||
@@ -128,7 +128,7 @@ class MangaScreenModel(
 | 
			
		||||
    val dateFormat by mutableStateOf(UiPreferences.dateFormat(uiPreferences.dateFormat().get()))
 | 
			
		||||
    private val skipFiltered by readerPreferences.skipFiltered().asState(coroutineScope)
 | 
			
		||||
 | 
			
		||||
    val isUpdateIntervalEnabled = LibraryPreferences.MANGA_OUTSIDE_RELEASE_PERIOD in libraryPreferences.libraryUpdateMangaRestriction().get()
 | 
			
		||||
    val isUpdateIntervalEnabled = LibraryPreferences.MANGA_OUTSIDE_RELEASE_PERIOD in libraryPreferences.autoUpdateMangaRestrictions().get()
 | 
			
		||||
 | 
			
		||||
    private val selectedPositions: Array<Int> = arrayOf(-1, -1) // first and last selected index in list
 | 
			
		||||
    private val selectedChapterIds: HashSet<Long> = HashSet()
 | 
			
		||||
 
 | 
			
		||||
@@ -87,14 +87,14 @@ class StatsScreenModel(
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun getGlobalUpdateItemCount(libraryManga: List<LibraryManga>): Int {
 | 
			
		||||
        val includedCategories = preferences.libraryUpdateCategories().get().map { it.toLong() }
 | 
			
		||||
        val includedCategories = preferences.updateCategories().get().map { it.toLong() }
 | 
			
		||||
        val includedManga = if (includedCategories.isNotEmpty()) {
 | 
			
		||||
            libraryManga.filter { it.category in includedCategories }
 | 
			
		||||
        } else {
 | 
			
		||||
            libraryManga
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val excludedCategories = preferences.libraryUpdateCategoriesExclude().get().map { it.toLong() }
 | 
			
		||||
        val excludedCategories = preferences.updateCategoriesExclude().get().map { it.toLong() }
 | 
			
		||||
        val excludedMangaIds = if (excludedCategories.isNotEmpty()) {
 | 
			
		||||
            libraryManga.fastMapNotNull { manga ->
 | 
			
		||||
                manga.id.takeIf { manga.category in excludedCategories }
 | 
			
		||||
@@ -103,7 +103,7 @@ class StatsScreenModel(
 | 
			
		||||
            emptyList()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val updateRestrictions = preferences.libraryUpdateMangaRestriction().get()
 | 
			
		||||
        val updateRestrictions = preferences.autoUpdateMangaRestrictions().get()
 | 
			
		||||
        return includedManga
 | 
			
		||||
            .fastFilterNot { it.manga.id in excludedMangaIds }
 | 
			
		||||
            .fastDistinctBy { it.manga.id }
 | 
			
		||||
 
 | 
			
		||||
@@ -64,7 +64,7 @@ class UpdatesScreenModel(
 | 
			
		||||
    private val _events: Channel<Event> = Channel(Int.MAX_VALUE)
 | 
			
		||||
    val events: Flow<Event> = _events.receiveAsFlow()
 | 
			
		||||
 | 
			
		||||
    val lastUpdated by libraryPreferences.libraryUpdateLastTimestamp().asState(coroutineScope)
 | 
			
		||||
    val lastUpdated by libraryPreferences.lastUpdatedTimestamp().asState(coroutineScope)
 | 
			
		||||
 | 
			
		||||
    // First and last selected index in list
 | 
			
		||||
    private val selectedPositions: Array<Int> = arrayOf(-1, -1)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user