From fe65f4d6f86dd57fbc62d5f90b347e35dc3d9ba4 Mon Sep 17 00:00:00 2001
From: arkon <eugcheung94@gmail.com>
Date: Wed, 29 Apr 2020 09:29:50 -0400
Subject: [PATCH] Option to only include pinned sources in global search

---
 .../data/preference/PreferenceKeys.kt         |  2 ++
 .../data/preference/PreferencesHelper.kt      |  2 ++
 .../globalsearch/GlobalSearchPresenter.kt     | 26 +++++++++++--------
 .../ui/setting/SettingsBrowseController.kt    |  5 ++++
 app/src/main/res/values/strings.xml           |  7 +++--
 5 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt
index 63e7ebc46..8ae37d9fc 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt
@@ -143,6 +143,8 @@ object PreferenceKeys {
 
     const val alwaysShowChapterTransition = "always_show_chapter_transition"
 
+    const val searchPinnedSourcesOnly = "search_pinned_sources_only"
+
     fun trackUsername(syncId: Int) = "pref_mangasync_username_$syncId"
 
     fun trackPassword(syncId: Int) = "pref_mangasync_password_$syncId"
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt
index b9356cd0f..60404bff3 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt
@@ -221,6 +221,8 @@ class PreferencesHelper(val context: Context) {
 
     fun lastExtCheck() = flowPrefs.getLong("last_ext_check", 0)
 
+    fun searchPinnedSourcesOnly() = prefs.getBoolean(Keys.searchPinnedSourcesOnly, false)
+
     fun hiddenCatalogues() = flowPrefs.getStringSet("hidden_catalogues", emptySet())
 
     fun pinnedCatalogues() = flowPrefs.getStringSet("pinned_catalogues", emptySet())
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchPresenter.kt
index 3be5ee5db..1d77def19 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchPresenter.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchPresenter.kt
@@ -114,21 +114,25 @@ open class GlobalSearchPresenter(
     private fun getSourcesToQuery(): List<CatalogueSource> {
         val filter = extensionFilter
         val enabledSources = getEnabledSources()
-        if (filter.isNullOrEmpty()) {
-            return enabledSources
+        var filteredSources: List<CatalogueSource>? = null
+
+        if (!filter.isNullOrEmpty()) {
+            filteredSources = extensionManager.installedExtensions
+                .filter { it.pkgName == filter }
+                .flatMap { it.sources }
+                .filter { it in enabledSources }
+                .filterIsInstance<CatalogueSource>()
         }
 
-        val filterSources = extensionManager.installedExtensions
-            .filter { it.pkgName == filter }
-            .flatMap { it.sources }
-            .filter { it in enabledSources }
-            .filterIsInstance<CatalogueSource>()
-
-        if (filterSources.isEmpty()) {
-            return enabledSources
+        if (filteredSources != null && filteredSources.isNotEmpty()) {
+            return filteredSources
         }
 
-        return filterSources
+        val onlyPinnedSources = preferences.searchPinnedSourcesOnly()
+        val pinnedCatalogues = preferences.pinnedCatalogues().get()
+
+        return enabledSources
+            .filter { if (onlyPinnedSources) it.id.toString() in pinnedCatalogues else true }
     }
 
     /**
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBrowseController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBrowseController.kt
index 69df8fc02..a6f78c915 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBrowseController.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBrowseController.kt
@@ -25,5 +25,10 @@ class SettingsBrowseController : SettingsController() {
                 true
             }
         }
+        switchPreference {
+            key = Keys.searchPinnedSourcesOnly
+            titleRes = R.string.pref_search_pinned_sources_only
+            defaultValue = false
+        }
     }
 }
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ca52cb56b..063a06176 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -212,7 +212,6 @@
     <string name="ext_version_info">Version: %1$s</string>
     <string name="ext_language_info">Language: %1$s</string>
     <string name="ext_empty_preferences">No preferences to edit for this extension</string>
-    <string name="pref_enable_automatic_extension_updates">Check for extension updates</string>
 
       <!-- Reader section -->
     <string name="pref_fullscreen">Fullscreen</string>
@@ -300,10 +299,14 @@
     <string name="pref_download_new">Download new chapters</string>
     <string name="pref_download_new_categories">Categories to include in download</string>
 
-      <!-- Sync section -->
+      <!-- Tracking section -->
     <string name="pref_auto_update_manga_sync">Sync chapters after reading</string>
     <string name="services">Services</string>
 
+      <!-- Browse section -->
+    <string name="pref_enable_automatic_extension_updates">Check for extension updates</string>
+    <string name="pref_search_pinned_sources_only">Only include pinned sources in global search</string>
+
       <!-- Backup section -->
     <string name="backup">Backup</string>
     <string name="pref_create_backup">Create backup</string>