Remove SourceData and use StubSource directly for database (#9429)

This commit is contained in:
Andreas
2023-05-03 16:33:05 +02:00
committed by GitHub
parent b328f0e344
commit f63573f25f
12 changed files with 81 additions and 97 deletions

View File

@@ -13,9 +13,8 @@ import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import tachiyomi.domain.source.model.SourceData
import tachiyomi.domain.source.model.StubSource
import tachiyomi.domain.source.repository.SourceDataRepository
import tachiyomi.domain.source.repository.StubSourceRepository
import tachiyomi.domain.source.service.SourceManager
import tachiyomi.source.local.LocalSource
import uy.kohesive.injekt.Injekt
@@ -26,7 +25,7 @@ import java.util.concurrent.ConcurrentHashMap
class AndroidSourceManager(
private val context: Context,
private val extensionManager: ExtensionManager,
private val sourceRepository: SourceDataRepository,
private val sourceRepository: StubSourceRepository,
) : SourceManager {
private val downloadManager: DownloadManager by injectLazy()
@@ -55,7 +54,7 @@ class AndroidSourceManager(
extensions.forEach { extension ->
extension.sources.forEach {
mutableMap[it.id] = it
registerStubSource(it.toSourceData())
registerStubSource(it.toStubSource())
}
}
sourcesMapFlow.value = mutableMap
@@ -67,7 +66,7 @@ class AndroidSourceManager(
.collectLatest { sources ->
val mutableMap = stubSourcesMap.toMutableMap()
sources.forEach {
mutableMap[it.id] = StubSource(it)
mutableMap[it.id] = it
}
}
}
@@ -92,26 +91,25 @@ class AndroidSourceManager(
return stubSourcesMap.values.filterNot { it.id in onlineSourceIds }
}
private fun registerStubSource(sourceData: SourceData) {
private fun registerStubSource(source: StubSource) {
scope.launch {
val (id, lang, name) = sourceData
val dbSourceData = sourceRepository.getSourceData(id)
if (dbSourceData == sourceData) return@launch
sourceRepository.upsertSourceData(id, lang, name)
if (dbSourceData != null) {
downloadManager.renameSource(StubSource(dbSourceData), StubSource(sourceData))
val dbSource = sourceRepository.getStubSource(source.id)
if (dbSource == source) return@launch
sourceRepository.upsertStubSource(source.id, source.lang, source.name)
if (dbSource != null) {
downloadManager.renameSource(dbSource, source)
}
}
}
private suspend fun createStubSource(id: Long): StubSource {
sourceRepository.getSourceData(id)?.let {
return StubSource(it)
sourceRepository.getStubSource(id)?.let {
return it
}
extensionManager.getSourceData(id)?.let {
registerStubSource(it)
return StubSource(it)
return it
}
return StubSource(SourceData(id, "", ""))
return StubSource(id, "", "")
}
}

View File

@@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.source
import android.graphics.drawable.Drawable
import eu.kanade.domain.source.service.SourcePreferences
import eu.kanade.tachiyomi.extension.ExtensionManager
import tachiyomi.domain.source.model.SourceData
import tachiyomi.domain.source.model.StubSource
import tachiyomi.source.local.isLocal
import uy.kohesive.injekt.Injekt
@@ -13,7 +12,7 @@ fun Source.icon(): Drawable? = Injekt.get<ExtensionManager>().getAppIconForSourc
fun Source.getPreferenceKey(): String = "source_$id"
fun Source.toSourceData(): SourceData = SourceData(id = id, lang = lang, name = name)
fun Source.toStubSource(): StubSource = StubSource(id = id, lang = lang, name = name)
fun Source.getNameForMangaInfo(): String {
val preferences = Injekt.get<SourcePreferences>()