Use domain layer for saved searches
This commit is contained in:
@@ -14,6 +14,8 @@ import eu.kanade.domain.manga.interactor.GetMangaBySource
|
||||
import eu.kanade.domain.manga.interactor.InsertMergedReference
|
||||
import eu.kanade.domain.manga.interactor.UpdateManga
|
||||
import eu.kanade.domain.manga.model.MangaUpdate
|
||||
import eu.kanade.domain.source.interactor.InsertFeedSavedSearch
|
||||
import eu.kanade.domain.source.interactor.InsertSavedSearch
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
import eu.kanade.tachiyomi.data.backup.BackupCreatorJob
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
@@ -40,6 +42,8 @@ import eu.kanade.tachiyomi.util.system.DeviceUtil
|
||||
import exh.eh.EHentaiUpdateWorker
|
||||
import exh.log.xLogE
|
||||
import exh.merged.sql.models.MergedMangaReference
|
||||
import exh.savedsearches.models.FeedSavedSearch
|
||||
import exh.savedsearches.models.SavedSearch
|
||||
import exh.source.BlacklistedSources
|
||||
import exh.source.EH_SOURCE_ID
|
||||
import exh.source.HBROWSE_SOURCE_ID
|
||||
@@ -76,6 +80,8 @@ object EXHMigrations {
|
||||
private val updateChapter: UpdateChapter by injectLazy()
|
||||
private val deleteChapters: DeleteChapters by injectLazy()
|
||||
private val insertMergedReference: InsertMergedReference by injectLazy()
|
||||
private val insertSavedSearch: InsertSavedSearch by injectLazy()
|
||||
private val insertFeedSavedSearch: InsertFeedSavedSearch by injectLazy()
|
||||
|
||||
/**
|
||||
* Performs a migration when the application is updated.
|
||||
@@ -360,29 +366,32 @@ object EXHMigrations {
|
||||
}
|
||||
if (oldVersion under 31) {
|
||||
runBlocking {
|
||||
handler.await(true) {
|
||||
prefs.getStringSet("eh_saved_searches", emptySet())?.forEach {
|
||||
kotlin.runCatching {
|
||||
val content = Json.decodeFromString<JsonObject>(it.substringAfter(':'))
|
||||
saved_searchQueries.insertSavedSearch(
|
||||
_id = null,
|
||||
source = it.substringBefore(':').toLongOrNull() ?: return@forEach,
|
||||
name = content["name"]!!.jsonPrimitive.content,
|
||||
query = content["query"]!!.jsonPrimitive.contentOrNull?.nullIfBlank(),
|
||||
filters_json = Json.encodeToString(content["filters"]!!.jsonArray),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
handler.await(true) {
|
||||
prefs.getStringSet("latest_tab_sources", emptySet())?.forEach {
|
||||
feed_saved_searchQueries.insertFeedSavedSearch(
|
||||
_id = null,
|
||||
source = it.toLong(),
|
||||
saved_search = null,
|
||||
global = true,
|
||||
val savedSearch = prefs.getStringSet("eh_saved_searches", emptySet())?.mapNotNull {
|
||||
runCatching {
|
||||
val content = Json.decodeFromString<JsonObject>(it.substringAfter(':'))
|
||||
SavedSearch(
|
||||
id = -1,
|
||||
source = it.substringBefore(':').toLongOrNull()
|
||||
?: return@runCatching null,
|
||||
name = content["name"]!!.jsonPrimitive.content,
|
||||
query = content["query"]!!.jsonPrimitive.contentOrNull?.nullIfBlank(),
|
||||
filtersJson = Json.encodeToString(content["filters"]!!.jsonArray),
|
||||
)
|
||||
}
|
||||
}.getOrNull()
|
||||
}
|
||||
if (!savedSearch.isNullOrEmpty()) {
|
||||
insertSavedSearch.awaitAll(savedSearch)
|
||||
}
|
||||
val feedSavedSearch = prefs.getStringSet("latest_tab_sources", emptySet())?.map {
|
||||
FeedSavedSearch(
|
||||
id = -1,
|
||||
source = it.toLong(),
|
||||
savedSearch = null,
|
||||
global = true,
|
||||
)
|
||||
}
|
||||
if (!feedSavedSearch.isNullOrEmpty()) {
|
||||
insertFeedSavedSearch.awaitAll(feedSavedSearch)
|
||||
}
|
||||
}
|
||||
prefs.edit(commit = true) {
|
||||
|
||||
@@ -3,11 +3,11 @@ package exh.favorites
|
||||
import android.content.Context
|
||||
import android.net.wifi.WifiManager
|
||||
import android.os.PowerManager
|
||||
import eu.kanade.data.AndroidDatabaseHandler
|
||||
import eu.kanade.data.DatabaseHandler
|
||||
import eu.kanade.domain.category.interactor.GetCategories
|
||||
import eu.kanade.domain.category.interactor.SetMangaCategories
|
||||
import eu.kanade.domain.category.model.Category
|
||||
import eu.kanade.domain.manga.interactor.GetLibraryManga
|
||||
import eu.kanade.domain.manga.interactor.GetManga
|
||||
import eu.kanade.domain.manga.interactor.UpdateManga
|
||||
import eu.kanade.domain.manga.model.Manga
|
||||
@@ -49,6 +49,7 @@ import kotlin.time.Duration.Companion.seconds
|
||||
// TODO only apply database changes after sync
|
||||
class FavoritesSyncHelper(val context: Context) {
|
||||
private val handler: DatabaseHandler by injectLazy()
|
||||
private val getLibraryManga: GetLibraryManga by injectLazy()
|
||||
private val getCategories: GetCategories by injectLazy()
|
||||
private val getManga: GetManga by injectLazy()
|
||||
private val updateManga: UpdateManga by injectLazy()
|
||||
@@ -96,7 +97,7 @@ class FavoritesSyncHelper(val context: Context) {
|
||||
|
||||
// Validate library state
|
||||
status.value = FavoritesSyncStatus.Processing(context.getString(R.string.favorites_sync_verifying_library), context = context)
|
||||
val libraryManga = handler.awaitList { (handler as AndroidDatabaseHandler).getLibraryQuery() }
|
||||
val libraryManga = getLibraryManga.await()
|
||||
val seenManga = HashSet<Long>(libraryManga.size)
|
||||
libraryManga.forEach {
|
||||
if (!it.isEhBasedManga()) return@forEach
|
||||
|
||||
@@ -2,14 +2,14 @@ package exh.savedsearches.models
|
||||
|
||||
data class FeedSavedSearch(
|
||||
// Tag identifier, unique
|
||||
var id: Long?,
|
||||
val id: Long,
|
||||
|
||||
// Source for the saved search
|
||||
var source: Long,
|
||||
val source: Long,
|
||||
|
||||
// If -1 then get latest, if set get the saved search
|
||||
var savedSearch: Long?,
|
||||
val savedSearch: Long?,
|
||||
|
||||
// If the feed is a global or source specific feed
|
||||
var global: Boolean,
|
||||
val global: Boolean,
|
||||
)
|
||||
|
||||
@@ -2,17 +2,17 @@ package exh.savedsearches.models
|
||||
|
||||
data class SavedSearch(
|
||||
// Tag identifier, unique
|
||||
var id: Long?,
|
||||
val id: Long,
|
||||
|
||||
// The source the saved search is for
|
||||
var source: Long,
|
||||
val source: Long,
|
||||
|
||||
// If false the manga will not grab chapter updates
|
||||
var name: String,
|
||||
val name: String,
|
||||
|
||||
// The query if there is any
|
||||
var query: String?,
|
||||
val query: String?,
|
||||
|
||||
// The filter list
|
||||
var filtersJson: String?,
|
||||
val filtersJson: String?,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user