Move more models to domain module
(cherry picked from commit b53e24e0dbd4affd6066a03ce543c3ecc88bdb99) # Conflicts: # app/src/main/java/eu/kanade/data/history/HistoryRepositoryImpl.kt # app/src/main/java/eu/kanade/data/updates/UpdatesMapper.kt # app/src/main/java/eu/kanade/domain/category/interactor/SetDisplayModeForCategory.kt # app/src/main/java/eu/kanade/domain/category/interactor/SetSortModeForCategory.kt # app/src/main/java/eu/kanade/domain/history/repository/HistoryRepository.kt # app/src/main/java/eu/kanade/domain/library/service/LibraryPreferences.kt # app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt # app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt # app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateDialog.kt # app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt # app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt # domain/src/main/java/tachiyomi/domain/history/model/HistoryWithRelations.kt # domain/src/main/java/tachiyomi/domain/updates/model/UpdatesWithRelations.kt
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
package tachiyomi.data.manga
|
||||
|
||||
import android.content.Context
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.decodeFromString
|
||||
import kotlinx.serialization.encodeToString
|
||||
import kotlinx.serialization.json.Json
|
||||
import tachiyomi.domain.manga.model.CustomMangaInfo
|
||||
import tachiyomi.domain.manga.repository.CustomMangaRepository
|
||||
import java.io.File
|
||||
|
||||
class CustomMangaRepositoryImpl(context: Context) : CustomMangaRepository {
|
||||
private val editJson = File(context.getExternalFilesDir(null), "edits.json")
|
||||
|
||||
private val customMangaMap = fetchCustomData()
|
||||
|
||||
override fun get(mangaId: Long) = customMangaMap[mangaId]
|
||||
|
||||
private fun fetchCustomData(): MutableMap<Long, CustomMangaInfo> {
|
||||
if (!editJson.exists() || !editJson.isFile) return mutableMapOf()
|
||||
|
||||
val json = try {
|
||||
Json.decodeFromString<MangaList>(
|
||||
editJson.bufferedReader().use { it.readText() },
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
null
|
||||
} ?: return mutableMapOf()
|
||||
|
||||
val mangasJson = json.mangas ?: return mutableMapOf()
|
||||
return mangasJson
|
||||
.mapNotNull { mangaJson ->
|
||||
val id = mangaJson.id ?: return@mapNotNull null
|
||||
id to mangaJson.toManga()
|
||||
}
|
||||
.toMap()
|
||||
.toMutableMap()
|
||||
}
|
||||
|
||||
override fun set(mangaInfo: CustomMangaInfo) {
|
||||
if (
|
||||
mangaInfo.title == null &&
|
||||
mangaInfo.author == null &&
|
||||
mangaInfo.artist == null &&
|
||||
mangaInfo.description == null &&
|
||||
mangaInfo.genre == null &&
|
||||
mangaInfo.status == null
|
||||
) {
|
||||
customMangaMap.remove(mangaInfo.id)
|
||||
} else {
|
||||
customMangaMap[mangaInfo.id] = mangaInfo
|
||||
}
|
||||
saveCustomInfo()
|
||||
}
|
||||
|
||||
private fun saveCustomInfo() {
|
||||
val jsonElements = customMangaMap.values.map { it.toJson() }
|
||||
if (jsonElements.isNotEmpty()) {
|
||||
editJson.delete()
|
||||
editJson.writeText(Json.encodeToString(MangaList(jsonElements)))
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class MangaList(
|
||||
val mangas: List<MangaJson>? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class MangaJson(
|
||||
var id: Long? = null,
|
||||
val title: String? = null,
|
||||
val author: String? = null,
|
||||
val artist: String? = null,
|
||||
val description: String? = null,
|
||||
val genre: List<String>? = null,
|
||||
val status: Long? = null,
|
||||
) {
|
||||
|
||||
fun toManga() = CustomMangaInfo(
|
||||
id = this@MangaJson.id!!,
|
||||
title = this@MangaJson.title?.takeUnless { it.isBlank() },
|
||||
author = this@MangaJson.author,
|
||||
artist = this@MangaJson.artist,
|
||||
description = this@MangaJson.description,
|
||||
genre = this@MangaJson.genre,
|
||||
status = this@MangaJson.status?.takeUnless { it == 0L },
|
||||
)
|
||||
}
|
||||
|
||||
fun CustomMangaInfo.toJson(): MangaJson {
|
||||
return MangaJson(
|
||||
id,
|
||||
title,
|
||||
author,
|
||||
artist,
|
||||
description,
|
||||
genre,
|
||||
status,
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user