Remove need for SQLDelight primitive adapters

(cherry picked from commit cd91ea9b7723eec378bbbefd916d3da6407d685e)

# Conflicts:
#	app/build.gradle.kts
#	app/src/main/java/eu/kanade/tachiyomi/AppModule.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt
#	data/src/main/java/tachiyomi/data/manga/MangaRepositoryImpl.kt
#	domain/src/main/java/tachiyomi/domain/history/model/HistoryWithRelations.kt
This commit is contained in:
arkon
2023-07-29 16:14:23 -04:00
committed by Jobobby04
parent af41e65b3d
commit 873742f6f4
42 changed files with 99 additions and 138 deletions
@@ -4,23 +4,23 @@ import app.cash.sqldelight.ColumnAdapter
import eu.kanade.tachiyomi.source.model.UpdateStrategy
import java.util.Date
val dateAdapter = object : ColumnAdapter<Date, Long> {
object DateColumnAdapter : ColumnAdapter<Date, Long> {
override fun decode(databaseValue: Long): Date = Date(databaseValue)
override fun encode(value: Date): Long = value.time
}
private const val listOfStringsSeparator = ", "
val listOfStringsAdapter = object : ColumnAdapter<List<String>, String> {
private const val LIST_OF_STRINGS_SEPARATOR = ", "
object StringListColumnAdapter : ColumnAdapter<List<String>, String> {
override fun decode(databaseValue: String) =
if (databaseValue.isEmpty()) {
emptyList()
} else {
databaseValue.split(listOfStringsSeparator)
databaseValue.split(LIST_OF_STRINGS_SEPARATOR)
}
override fun encode(value: List<String>) = value.joinToString(separator = listOfStringsSeparator)
override fun encode(value: List<String>) = value.joinToString(separator = LIST_OF_STRINGS_SEPARATOR)
}
val updateStrategyAdapter = object : ColumnAdapter<UpdateStrategy, Long> {
object UpdateStrategyColumnAdapter : ColumnAdapter<UpdateStrategy, Long> {
override fun decode(databaseValue: Long): UpdateStrategy =
UpdateStrategy.entries.getOrElse(databaseValue.toInt()) { UpdateStrategy.ALWAYS_UPDATE }
@@ -28,25 +28,14 @@ val updateStrategyAdapter = object : ColumnAdapter<UpdateStrategy, Long> {
}
// SY -->
private const val listOfStringsAndSeparator = " & "
val listOfStringsAndAdapter = object : ColumnAdapter<List<String>, String> {
private const val LIST_OF_STRINGS_AND_SEPARATOR = " & "
object StringListAndColumnAdapter : ColumnAdapter<List<String>, String> {
override fun decode(databaseValue: String) =
if (databaseValue.isEmpty()) {
emptyList()
} else {
databaseValue.split(listOfStringsAndSeparator)
databaseValue.split(LIST_OF_STRINGS_AND_SEPARATOR)
}
override fun encode(value: List<String>) = value.joinToString(separator = listOfStringsAndSeparator)
}
private const val listOfLongsSeparator = "/"
val listOfLongsAdapter = object : ColumnAdapter<List<Long>, String> {
override fun decode(databaseValue: String) =
if (databaseValue.isEmpty()) {
emptyList()
} else {
databaseValue.split(listOfLongsSeparator).mapNotNull { it.toLongOrNull() }
}
override fun encode(value: List<Long>) = value.joinToString(separator = listOfLongsSeparator)
override fun encode(value: List<String>) = value.joinToString(separator = LIST_OF_STRINGS_AND_SEPARATOR)
}
// SY <--
@@ -15,7 +15,7 @@ private val mapper = { cursor: SqlCursor ->
artist = cursor.getString(3),
author = cursor.getString(4),
description = cursor.getString(5),
genre = cursor.getString(6)?.let(listOfStringsAdapter::decode),
genre = cursor.getString(6)?.let(StringListColumnAdapter::decode),
title = cursor.getString(7)!!,
status = cursor.getLong(8)!!,
thumbnail_url = cursor.getString(9),
@@ -27,8 +27,8 @@ private val mapper = { cursor: SqlCursor ->
chapter_flags = cursor.getLong(15)!!,
cover_last_modified = cursor.getLong(16)!!,
date_added = cursor.getLong(17)!!,
filtered_scanlators = cursor.getString(18)?.let(listOfStringsAndAdapter::decode),
update_strategy = updateStrategyAdapter.decode(cursor.getLong(19)!!),
filtered_scanlators = cursor.getString(18)?.let(StringListAndColumnAdapter::decode),
update_strategy = UpdateStrategyColumnAdapter.decode(cursor.getLong(19)!!),
calculate_interval = cursor.getLong(20)!!,
last_modified_at = cursor.getLong(21)!!,
favorite_modified_at = cursor.getLong(22),
@@ -2,7 +2,7 @@ package tachiyomi.data.chapter
import tachiyomi.domain.chapter.model.Chapter
val chapterMapper: (Long, Long, String, String, String?, Boolean, Boolean, Long, Float, Long, Long, Long, Long) -> Chapter =
val chapterMapper: (Long, Long, String, String, String?, Boolean, Boolean, Long, Double, Long, Long, Long, Long) -> Chapter =
{ id, mangaId, url, name, scanlator, read, bookmark, lastPageRead, chapterNumber, sourceOrder, dateFetch, dateUpload, lastModifiedAt ->
Chapter(
id = id,
@@ -14,7 +14,7 @@ val historyMapper: (Long, Long, Date?, Long) -> History = { id, chapterId, readA
)
}
val historyWithRelationsMapper: (Long, Long, Long, String, String?, Long, Boolean, Long, Float, Date?, Long) -> HistoryWithRelations = {
val historyWithRelationsMapper: (Long, Long, Long, String, String?, Long, Boolean, Long, Double, Date?, Long) -> HistoryWithRelations = {
historyId, mangaId, chapterId, title, thumbnailUrl, sourceId, isFavorite, coverLastModified, chapterNumber, readAt, readDuration ->
HistoryWithRelations(
id = historyId,
@@ -44,15 +44,15 @@ class MangaMetadataRepositoryImpl(
handler.await(true) {
flatMetadata.metadata.run {
search_metadataQueries.upsert(mangaId, uploader, extra, indexedExtra, extraVersion)
search_metadataQueries.upsert(mangaId, uploader, extra, indexedExtra, extraVersion.toLong())
}
search_tagsQueries.deleteByManga(flatMetadata.metadata.mangaId)
flatMetadata.tags.forEach {
search_tagsQueries.insert(it.mangaId, it.namespace, it.name, it.type)
search_tagsQueries.insert(it.mangaId, it.namespace, it.name, it.type.toLong())
}
search_titlesQueries.deleteByManga(flatMetadata.metadata.mangaId)
flatMetadata.titles.forEach {
search_titlesQueries.insert(it.mangaId, it.title, it.type)
search_titlesQueries.insert(it.mangaId, it.title, it.type.toLong())
}
}
}
@@ -6,9 +6,9 @@ import logcat.LogPriority
import tachiyomi.core.util.system.logcat
import tachiyomi.data.AndroidDatabaseHandler
import tachiyomi.data.DatabaseHandler
import tachiyomi.data.listOfStringsAdapter
import tachiyomi.data.listOfStringsAndAdapter
import tachiyomi.data.updateStrategyAdapter
import tachiyomi.data.StringListAndColumnAdapter
import tachiyomi.data.StringListColumnAdapter
import tachiyomi.data.UpdateStrategyColumnAdapter
import tachiyomi.domain.library.model.LibraryManga
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.model.MangaUpdate
@@ -143,7 +143,7 @@ class MangaRepositoryImpl(
artist = value.artist,
author = value.author,
description = value.description,
genre = value.genre?.let(listOfStringsAdapter::encode),
genre = value.genre?.let(StringListColumnAdapter::encode),
title = value.title,
status = value.status,
thumbnailUrl = value.thumbnailUrl,
@@ -157,10 +157,10 @@ class MangaRepositoryImpl(
coverLastModified = value.coverLastModified,
dateAdded = value.dateAdded,
// SY -->
filteredScanlators = value.filteredScanlators?.let(listOfStringsAndAdapter::encode),
filteredScanlators = value.filteredScanlators?.let(StringListAndColumnAdapter::encode),
// SY <--
mangaId = value.id,
updateStrategy = value.updateStrategy?.let(updateStrategyAdapter::encode),
updateStrategy = value.updateStrategy?.let(UpdateStrategyColumnAdapter::encode),
)
}
}
@@ -2,13 +2,13 @@ package tachiyomi.data.manga
import exh.metadata.sql.models.SearchMetadata
val searchMetadataMapper: (Long, String?, String, String?, Int) -> SearchMetadata =
val searchMetadataMapper: (Long, String?, String, String?, Long) -> SearchMetadata =
{ mangaId, uploader, extra, indexedExtra, extraVersion ->
SearchMetadata(
mangaId = mangaId,
uploader = uploader,
extra = extra,
indexedExtra = indexedExtra,
extraVersion = extraVersion,
extraVersion = extraVersion.toInt(),
)
}
@@ -2,13 +2,13 @@ package tachiyomi.data.manga
import exh.metadata.sql.models.SearchTag
val searchTagMapper: (Long, Long, String?, String, Int) -> SearchTag =
val searchTagMapper: (Long, Long, String?, String, Long) -> SearchTag =
{ id, mangaId, namespace, name, type ->
SearchTag(
id = id,
mangaId = mangaId,
namespace = namespace,
name = name,
type = type,
type = type.toInt(),
)
}
@@ -2,12 +2,12 @@ package tachiyomi.data.manga
import exh.metadata.sql.models.SearchTitle
val searchTitleMapper: (Long, Long, String, Int) -> SearchTitle =
val searchTitleMapper: (Long, Long, String, Long) -> SearchTitle =
{ id, mangaId, title, type ->
SearchTitle(
id = id,
mangaId = mangaId,
title = title,
type = type,
type = type.toInt(),
)
}
@@ -2,7 +2,7 @@ package tachiyomi.data.track
import tachiyomi.domain.track.model.Track
val trackMapper: (Long, Long, Long, Long, Long?, String, Double, Long, Long, Float, String, Long, Long) -> Track =
val trackMapper: (Long, Long, Long, Long, Long?, String, Double, Long, Long, Double, String, Long, Long) -> Track =
{ id, mangaId, syncId, remoteId, libraryId, title, lastChapterRead, totalChapters, status, score, remoteUrl, startDate, finishDate ->
Track(
id = id,