From 4e37fbca174fd17ef7ce12c8bca866d3b6ee67a2 Mon Sep 17 00:00:00 2001
From: arkon <eugcheung94@gmail.com>
Date: Fri, 4 Nov 2022 09:39:23 -0400
Subject: [PATCH] Toggle enabled source in bulk

Maybe fixes #8439

(cherry picked from commit 280b0f42db2cc8c21ac046b11717cac6975746ca)
---
 .../java/eu/kanade/domain/SYDomainModule.kt   |  2 --
 .../domain/source/interactor/ToggleSource.kt  |  7 +++++++
 .../domain/source/interactor/ToggleSources.kt | 20 -------------------
 .../details/ExtensionDetailsPresenter.kt      |  4 +++-
 .../browse/source/SourcesFilterController.kt  |  4 ++--
 .../browse/source/SourcesFilterPresenter.kt   |  8 ++------
 6 files changed, 14 insertions(+), 31 deletions(-)
 delete mode 100644 app/src/main/java/eu/kanade/domain/source/interactor/ToggleSources.kt

diff --git a/app/src/main/java/eu/kanade/domain/SYDomainModule.kt b/app/src/main/java/eu/kanade/domain/SYDomainModule.kt
index 301c2ab1a..23796671d 100644
--- a/app/src/main/java/eu/kanade/domain/SYDomainModule.kt
+++ b/app/src/main/java/eu/kanade/domain/SYDomainModule.kt
@@ -63,7 +63,6 @@ import eu.kanade.domain.source.interactor.InsertSavedSearch
 import eu.kanade.domain.source.interactor.RenameSourceCategory
 import eu.kanade.domain.source.interactor.SetSourceCategories
 import eu.kanade.domain.source.interactor.ToggleExcludeFromDataSaver
-import eu.kanade.domain.source.interactor.ToggleSources
 import eu.kanade.domain.source.repository.FeedSavedSearchRepository
 import eu.kanade.domain.source.repository.SavedSearchRepository
 import eu.kanade.tachiyomi.source.online.MetadataSource
@@ -80,7 +79,6 @@ class SYDomainModule : InjektModule {
         addFactory { GetShowLatest(get()) }
         addFactory { ToggleExcludeFromDataSaver(get()) }
         addFactory { SetSourceCategories(get()) }
-        addFactory { ToggleSources(get()) }
         addFactory { SetMangaFilteredScanlators(get()) }
         addFactory { GetAllManga(get()) }
         addFactory { GetMangaBySource(get()) }
diff --git a/app/src/main/java/eu/kanade/domain/source/interactor/ToggleSource.kt b/app/src/main/java/eu/kanade/domain/source/interactor/ToggleSource.kt
index bb602da5c..e69e76dab 100644
--- a/app/src/main/java/eu/kanade/domain/source/interactor/ToggleSource.kt
+++ b/app/src/main/java/eu/kanade/domain/source/interactor/ToggleSource.kt
@@ -18,6 +18,13 @@ class ToggleSource(
         }
     }
 
+    fun await(sourceIds: List<Long>, enable: Boolean) {
+        val transformedSourceIds = sourceIds.map { it.toString() }
+        preferences.disabledSources().getAndSet { disabled ->
+            if (enable) disabled.minus(transformedSourceIds) else disabled.plus(transformedSourceIds)
+        }
+    }
+
     private fun isEnabled(sourceId: Long): Boolean {
         return sourceId.toString() in preferences.disabledSources().get()
     }
diff --git a/app/src/main/java/eu/kanade/domain/source/interactor/ToggleSources.kt b/app/src/main/java/eu/kanade/domain/source/interactor/ToggleSources.kt
deleted file mode 100644
index 8a95e499b..000000000
--- a/app/src/main/java/eu/kanade/domain/source/interactor/ToggleSources.kt
+++ /dev/null
@@ -1,20 +0,0 @@
-package eu.kanade.domain.source.interactor
-
-import eu.kanade.domain.source.model.Source
-import eu.kanade.domain.source.service.SourcePreferences
-import eu.kanade.tachiyomi.core.preference.getAndSet
-
-class ToggleSources(
-    private val preferences: SourcePreferences,
-) {
-
-    fun await(isEnable: Boolean, sources: List<Source>) {
-        preferences.disabledSources().getAndSet { disabledSources ->
-            if (isEnable) {
-                disabledSources - sources.map { it.id.toString() }.toSet()
-            } else {
-                disabledSources + sources.map { it.id.toString() }
-            }
-        }
-    }
-}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsPresenter.kt
index 3e972394e..1ddc124c5 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsPresenter.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsPresenter.kt
@@ -118,7 +118,9 @@ class ExtensionDetailsPresenter(
     }
 
     fun toggleSources(enable: Boolean) {
-        extension?.sources?.forEach { toggleSource.await(it.id, enable) }
+        extension?.sources
+            ?.map { it.id }
+            ?.let { toggleSource.await(it, enable) }
     }
 
     private fun createUrl(url: String, pkgName: String, pkgFactory: String?, path: String = ""): String {
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterController.kt
index f11d9182c..02c9760a1 100755
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterController.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterController.kt
@@ -21,8 +21,8 @@ class SourceFilterController : FullComposeController<SourcesFilterPresenter>() {
                 presenter.toggleSource(source)
             },
             // SY -->
-            onClickSources = { isEnable, sources ->
-                presenter.toggleSources(isEnable, sources)
+            onClickSources = { enable, sources ->
+                presenter.toggleSources(enable, sources)
             },
             // SY <--
         )
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterPresenter.kt
index a13bab6f7..d62560d8a 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterPresenter.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterPresenter.kt
@@ -4,7 +4,6 @@ import android.os.Bundle
 import eu.kanade.domain.source.interactor.GetLanguagesWithSources
 import eu.kanade.domain.source.interactor.ToggleLanguage
 import eu.kanade.domain.source.interactor.ToggleSource
-import eu.kanade.domain.source.interactor.ToggleSources
 import eu.kanade.domain.source.model.Source
 import eu.kanade.domain.source.service.SourcePreferences
 import eu.kanade.presentation.browse.SourcesFilterState
@@ -26,9 +25,6 @@ class SourcesFilterPresenter(
     private val toggleSource: ToggleSource = Injekt.get(),
     private val toggleLanguage: ToggleLanguage = Injekt.get(),
     private val preferences: SourcePreferences = Injekt.get(),
-    // SY -->
-    private val toggleSources: ToggleSources = Injekt.get(),
-    // SY <--
 ) : BasePresenter<SourceFilterController>(), SourcesFilterState by state {
 
     private val _events = Channel<Event>(Int.MAX_VALUE)
@@ -81,8 +77,8 @@ class SourcesFilterPresenter(
     }
 
     // SY -->
-    fun toggleSources(isEnable: Boolean, sources: List<Source>) {
-        toggleSources.await(isEnable, sources)
+    fun toggleSources(enable: Boolean, sources: List<Source>) {
+        toggleSource.await(sources.map { it.id }, enable)
     }
     // SY <--