mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Download new chapters when only excluded categories is selected (#6984)
(cherry picked from commit 06bec0ad54)
			
			
This commit is contained in:
		@@ -278,10 +278,10 @@ class PreferencesHelper(val context: Context) {
 | 
			
		||||
 | 
			
		||||
    fun pinnedSources() = flowPrefs.getStringSet("pinned_catalogues", emptySet())
 | 
			
		||||
 | 
			
		||||
    fun downloadNew() = flowPrefs.getBoolean("download_new", false)
 | 
			
		||||
    fun downloadNewChapter() = flowPrefs.getBoolean("download_new", false)
 | 
			
		||||
 | 
			
		||||
    fun downloadNewCategories() = flowPrefs.getStringSet("download_new_categories", emptySet())
 | 
			
		||||
    fun downloadNewCategoriesExclude() = flowPrefs.getStringSet("download_new_categories_exclude", emptySet())
 | 
			
		||||
    fun downloadNewChapterCategories() = flowPrefs.getStringSet("download_new_categories", emptySet())
 | 
			
		||||
    fun downloadNewChapterCategoriesExclude() = flowPrefs.getStringSet("download_new_categories_exclude", emptySet())
 | 
			
		||||
 | 
			
		||||
    fun defaultCategory() = prefs.getInt(Keys.defaultCategory, -1)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -125,20 +125,20 @@ class SettingsDownloadController : SettingsController() {
 | 
			
		||||
            titleRes = R.string.pref_category_auto_download
 | 
			
		||||
 | 
			
		||||
            switchPreference {
 | 
			
		||||
                bindTo(preferences.downloadNew())
 | 
			
		||||
                bindTo(preferences.downloadNewChapter())
 | 
			
		||||
                titleRes = R.string.pref_download_new
 | 
			
		||||
            }
 | 
			
		||||
            preference {
 | 
			
		||||
                bindTo(preferences.downloadNewCategories())
 | 
			
		||||
                bindTo(preferences.downloadNewChapterCategories())
 | 
			
		||||
                titleRes = R.string.categories
 | 
			
		||||
                onClick {
 | 
			
		||||
                    DownloadCategoriesDialog().showDialog(router)
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                visibleIf(preferences.downloadNew()) { it }
 | 
			
		||||
                visibleIf(preferences.downloadNewChapter()) { it }
 | 
			
		||||
 | 
			
		||||
                fun updateSummary() {
 | 
			
		||||
                    val selectedCategories = preferences.downloadNewCategories().get()
 | 
			
		||||
                    val selectedCategories = preferences.downloadNewChapterCategories().get()
 | 
			
		||||
                        .mapNotNull { id -> categories.find { it.id == id.toInt() } }
 | 
			
		||||
                        .sortedBy { it.order }
 | 
			
		||||
                    val includedItemsText = if (selectedCategories.isEmpty()) {
 | 
			
		||||
@@ -147,7 +147,7 @@ class SettingsDownloadController : SettingsController() {
 | 
			
		||||
                        selectedCategories.joinToString { it.name }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    val excludedCategories = preferences.downloadNewCategoriesExclude().get()
 | 
			
		||||
                    val excludedCategories = preferences.downloadNewChapterCategoriesExclude().get()
 | 
			
		||||
                        .mapNotNull { id -> categories.find { it.id == id.toInt() } }
 | 
			
		||||
                        .sortedBy { it.order }
 | 
			
		||||
                    val excludedItemsText = if (excludedCategories.isEmpty()) {
 | 
			
		||||
@@ -163,10 +163,10 @@ class SettingsDownloadController : SettingsController() {
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                preferences.downloadNewCategories().asFlow()
 | 
			
		||||
                preferences.downloadNewChapterCategories().asFlow()
 | 
			
		||||
                    .onEach { updateSummary() }
 | 
			
		||||
                    .launchIn(viewScope)
 | 
			
		||||
                preferences.downloadNewCategoriesExclude().asFlow()
 | 
			
		||||
                preferences.downloadNewChapterCategoriesExclude().asFlow()
 | 
			
		||||
                    .onEach { updateSummary() }
 | 
			
		||||
                    .launchIn(viewScope)
 | 
			
		||||
            }
 | 
			
		||||
@@ -254,8 +254,8 @@ class SettingsDownloadController : SettingsController() {
 | 
			
		||||
            var selected = categories
 | 
			
		||||
                .map {
 | 
			
		||||
                    when (it.id.toString()) {
 | 
			
		||||
                        in preferences.downloadNewCategories().get() -> QuadStateTextView.State.CHECKED.ordinal
 | 
			
		||||
                        in preferences.downloadNewCategoriesExclude().get() -> QuadStateTextView.State.INVERSED.ordinal
 | 
			
		||||
                        in preferences.downloadNewChapterCategories().get() -> QuadStateTextView.State.CHECKED.ordinal
 | 
			
		||||
                        in preferences.downloadNewChapterCategoriesExclude().get() -> QuadStateTextView.State.INVERSED.ordinal
 | 
			
		||||
                        else -> QuadStateTextView.State.UNCHECKED.ordinal
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
@@ -282,8 +282,8 @@ class SettingsDownloadController : SettingsController() {
 | 
			
		||||
                        .map { categories[it].id.toString() }
 | 
			
		||||
                        .toSet()
 | 
			
		||||
 | 
			
		||||
                    preferences.downloadNewCategories().set(included)
 | 
			
		||||
                    preferences.downloadNewCategoriesExclude().set(excluded)
 | 
			
		||||
                    preferences.downloadNewChapterCategories().set(included)
 | 
			
		||||
                    preferences.downloadNewChapterCategoriesExclude().set(excluded)
 | 
			
		||||
                }
 | 
			
		||||
                .setNegativeButton(android.R.string.cancel, null)
 | 
			
		||||
                .create()
 | 
			
		||||
 
 | 
			
		||||
@@ -56,14 +56,14 @@ fun Manga.shouldDownloadNewChapters(db: DatabaseHelper, prefs: PreferencesHelper
 | 
			
		||||
    if (!favorite) return false
 | 
			
		||||
 | 
			
		||||
    // Boolean to determine if user wants to automatically download new chapters.
 | 
			
		||||
    val downloadNew = prefs.downloadNew().get()
 | 
			
		||||
    if (!downloadNew) return false
 | 
			
		||||
    val downloadNewChapter = prefs.downloadNewChapter().get()
 | 
			
		||||
    if (!downloadNewChapter) return false
 | 
			
		||||
 | 
			
		||||
    val categoriesToDownload = prefs.downloadNewCategories().get().map(String::toInt)
 | 
			
		||||
    val categoriesToExclude = prefs.downloadNewCategoriesExclude().get().map(String::toInt)
 | 
			
		||||
    val includedCategories = prefs.downloadNewChapterCategories().get().map { it.toInt() }
 | 
			
		||||
    val excludedCategories = prefs.downloadNewChapterCategoriesExclude().get().map { it.toInt() }
 | 
			
		||||
 | 
			
		||||
    // Default: download from all categories
 | 
			
		||||
    if (categoriesToDownload.isEmpty() && categoriesToExclude.isEmpty()) return true
 | 
			
		||||
    // Default: Download from all categories
 | 
			
		||||
    if (includedCategories.isEmpty() && excludedCategories.isEmpty()) return true
 | 
			
		||||
 | 
			
		||||
    // Get all categories, else default category (0)
 | 
			
		||||
    val categoriesForManga =
 | 
			
		||||
@@ -72,8 +72,11 @@ fun Manga.shouldDownloadNewChapters(db: DatabaseHelper, prefs: PreferencesHelper
 | 
			
		||||
            .takeUnless { it.isEmpty() } ?: listOf(0)
 | 
			
		||||
 | 
			
		||||
    // In excluded category
 | 
			
		||||
    if (categoriesForManga.intersect(categoriesToExclude).isNotEmpty()) return false
 | 
			
		||||
    if (categoriesForManga.any { it in excludedCategories }) return false
 | 
			
		||||
 | 
			
		||||
    // Included category not selected
 | 
			
		||||
    if (includedCategories.isEmpty()) return true
 | 
			
		||||
 | 
			
		||||
    // In included category
 | 
			
		||||
    return categoriesForManga.intersect(categoriesToDownload).isNotEmpty()
 | 
			
		||||
    return categoriesForManga.any { it in includedCategories }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user