From 1dcf49200a0b9a58225afa38e59749ab0db019b5 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Fri, 11 Jun 2021 19:51:34 -0400 Subject: [PATCH] Saved searches tweaks --- .../data/backup/full/FullBackupManager.kt | 35 +++++++++---------- .../data/backup/legacy/LegacyBackupManager.kt | 22 ++++++------ .../source/browse/BrowseSourcePresenter.kt | 21 ++++++----- .../ui/browse/source/index/IndexPresenter.kt | 9 +++-- 4 files changed, 41 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/FullBackupManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/FullBackupManager.kt index d69b8ebdd..bea236aac 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/FullBackupManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/FullBackupManager.kt @@ -147,8 +147,8 @@ class FullBackupManager(context: Context) : AbstractBackupManager(context) { * @return list of [BackupSavedSearch] to be backed up */ private fun backupSavedSearches(): List { - return preferences.savedSearches().get().map { - val sourceId = it.substringBefore(':').toLong() + return preferences.savedSearches().get().mapNotNull { + val sourceId = it.substringBefore(':').toLongOrNull() ?: return@mapNotNull null val content = Json.decodeFromString(it.substringAfter(':')) BackupSavedSearch( content.name, @@ -414,8 +414,8 @@ class FullBackupManager(context: Context) : AbstractBackupManager(context) { // SY --> internal fun restoreSavedSearches(backupSavedSearches: List) { - val currentSavedSearches = preferences.savedSearches().get().map { - val sourceId = it.substringBefore(':').toLong() + val currentSavedSearches = preferences.savedSearches().get().mapNotNull { + val sourceId = it.substringBefore(':').toLongOrNull() ?: return@mapNotNull null val content = Json.decodeFromString(it.substringAfter(':')) BackupSavedSearch( content.name, @@ -425,22 +425,19 @@ class FullBackupManager(context: Context) : AbstractBackupManager(context) { ) } - preferences.savedSearches() - .set( - ( - backupSavedSearches.filter { backupSavedSearch -> currentSavedSearches.none { it.name == backupSavedSearch.name && it.source == backupSavedSearch.source } } - .map { - "${it.source}:" + Json.encodeToString( - JsonSavedSearch( - it.name, - it.query, - Json.decodeFromString(it.filterList) - ) - ) - } + preferences.savedSearches().get() - ) - .toSet() + val newSavedSearches = backupSavedSearches.filter { backupSavedSearch -> + currentSavedSearches.none { it.name == backupSavedSearch.name && it.source == backupSavedSearch.source } + }.map { + "${it.source}:" + Json.encodeToString( + JsonSavedSearch( + it.name, + it.query, + Json.decodeFromString(it.filterList) + ) ) + }.toSet() + + preferences.savedSearches().set(newSavedSearches + preferences.savedSearches().get()) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/legacy/LegacyBackupManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/legacy/LegacyBackupManager.kt index 50e3c09da..b2220eb74 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/legacy/LegacyBackupManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/legacy/LegacyBackupManager.kt @@ -289,32 +289,32 @@ class LegacyBackupManager(context: Context, version: Int = CURRENT_VERSION) : Ab val newSavedSearches = backupSavedSearches.mapNotNull { runCatching { - val id = it.substringBefore(':').toLong() + val id = it.substringBefore(':').toLongOrNull() ?: return@mapNotNull null val content = parser.decodeFromString(it.substringAfter(':')) id to content }.getOrNull() - }.toMutableList() + }.toMutableSet() - val currentSources = newSavedSearches.map { it.first }.toSet() + val currentSources = newSavedSearches.map(Pair::first).toSet() newSavedSearches += preferences.savedSearches().get().mapNotNull { kotlin.runCatching { - val id = it.substringBefore(':').toLong() + val id = it.substringBefore(':').toLongOrNull() ?: return@mapNotNull null val content = parser.decodeFromString(it.substringAfter(':')) id to content }.getOrNull() - }.toMutableList() + } val otherSerialized = preferences.savedSearches().get().mapNotNull { - val sourceId = it.split(":")[0].toLongOrNull() ?: return@mapNotNull null + val sourceId = it.substringBefore(":").toLongOrNull() ?: return@mapNotNull null if (sourceId in currentSources) return@mapNotNull null it - } + }.toSet() - val newSerialized = newSavedSearches.map { - "${it.first}:" + Json.encodeToString(it.second) - } - preferences.savedSearches().set((otherSerialized + newSerialized).toSet()) + val newSerialized = newSavedSearches.map { (source, savedSearch) -> + "$source:" + Json.encodeToString(savedSearch) + }.toSet() + preferences.savedSearches().set(otherSerialized + newSerialized) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt index 4d5e4f329..d7ef7152c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt @@ -39,6 +39,7 @@ import eu.kanade.tachiyomi.util.chapter.syncChaptersWithTrackServiceTwoWay import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.lang.withUIContext import eu.kanade.tachiyomi.util.removeCovers +import exh.log.xLogE import exh.savedsearches.EXHSavedSearch import exh.savedsearches.JsonSavedSearch import kotlinx.coroutines.Job @@ -443,9 +444,9 @@ open class BrowseSourcePresenter( // EXH --> fun saveSearches(searches: List) { - val otherSerialized = prefs.savedSearches().get().filter { - !it.startsWith("${source.id}:") - } + val otherSerialized = prefs.savedSearches().get().filterNot { + it.startsWith("${source.id}:") + }.toSet() val newSerialized = searches.map { "${source.id}:" + Json.encodeToString( JsonSavedSearch( @@ -457,14 +458,13 @@ open class BrowseSourcePresenter( ) ) } - prefs.savedSearches().set((otherSerialized + newSerialized).toSet()) + prefs.savedSearches().set(otherSerialized + newSerialized) } fun loadSearches(): List { - val loaded = prefs.savedSearches().get() - return loaded.map { - val id = it.substringBefore(':').toLong() - if (id != source.id) return@map null + return prefs.savedSearches().get().mapNotNull { + val id = it.substringBefore(':').toLongOrNull() ?: return@mapNotNull null + if (id != source.id) return@mapNotNull null val content = Json.decodeFromString(it.substringAfter(':')) try { val originalFilters = source.getFilterList() @@ -476,15 +476,14 @@ open class BrowseSourcePresenter( ) } catch (t: RuntimeException) { // Load failed - Timber.e(t, "Failed to load saved search!") - t.printStackTrace() + xLogE("Failed to load saved search!", t) EXHSavedSearch( content.name, content.query, null ) } - }.filterNotNull() + } } // EXH <-- } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/index/IndexPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/index/IndexPresenter.kt index 094b7c8ec..20236fd1a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/index/IndexPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/index/IndexPresenter.kt @@ -16,6 +16,7 @@ import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourcePresenter.Compani import eu.kanade.tachiyomi.util.lang.awaitSingle import eu.kanade.tachiyomi.util.lang.runAsObservable import eu.kanade.tachiyomi.util.lang.withUIContext +import exh.log.xLogE import exh.savedsearches.EXHSavedSearch import exh.savedsearches.JsonSavedSearch import kotlinx.coroutines.Dispatchers @@ -213,9 +214,8 @@ open class IndexPresenter( private val filterSerializer = FilterSerializer() fun loadSearches(): List { - val loaded = preferences.savedSearches().get() - return loaded.mapNotNull { - val id = it.substringBefore(':').toLong() + return preferences.savedSearches().get().mapNotNull { + val id = it.substringBefore(':').toLongOrNull() ?: return@mapNotNull null if (id != source.id) return@mapNotNull null val content = Json.decodeFromString(it.substringAfter(':')) try { @@ -228,8 +228,7 @@ open class IndexPresenter( ) } catch (t: RuntimeException) { // Load failed - Timber.e(t, "Failed to load saved search!") - t.printStackTrace() + xLogE("Failed to load saved search!", t) EXHSavedSearch( content.name, content.query,