Move SQLDelight to data module (#8954)

And use tachiyomi instead of eu.kanade.tachiyomi for package names in the module

(cherry picked from commit 823749fc1ed16dbf52d43839888a70de089d65b1)

# Conflicts:
#	app/build.gradle.kts
#	app/src/main/java/eu/kanade/data/history/HistoryRepositoryImpl.kt
#	app/src/main/java/eu/kanade/data/manga/MangaRepositoryImpl.kt
#	app/src/main/java/eu/kanade/data/updates/UpdatesRepositoryImpl.kt
#	app/src/main/java/eu/kanade/tachiyomi/App.kt
#	app/src/main/java/eu/kanade/tachiyomi/AppModule.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt
#	app/src/main/java/eu/kanade/tachiyomi/source/model/SMangaExtensions.kt
#	data/src/main/java/tachiyomi/data/AndroidDatabaseHandler.kt
#	data/src/main/sqldelight/tachiyomi/data/eh.sq
#	data/src/main/sqldelight/tachiyomi/data/eh_favorites.sq
#	data/src/main/sqldelight/tachiyomi/data/feed_saved_search.sq
#	data/src/main/sqldelight/tachiyomi/data/merged.sq
#	data/src/main/sqldelight/tachiyomi/data/saved_search.sq
#	data/src/main/sqldelight/tachiyomi/data/search_metadata.sq
#	data/src/main/sqldelight/tachiyomi/data/search_tags.sq
#	data/src/main/sqldelight/tachiyomi/data/search_titles.sq
#	data/src/main/sqldelight/tachiyomi/migrations/16.sqm
#	data/src/main/sqldelight/tachiyomi/migrations/24.sqm
This commit is contained in:
Andreas 2023-01-21 16:37:07 +01:00 committed by Jobobby04
parent 888d1f0983
commit 64d829d304
84 changed files with 206 additions and 119 deletions

View File

@ -8,7 +8,6 @@ plugins {
kotlin("plugin.parcelize") kotlin("plugin.parcelize")
kotlin("plugin.serialization") kotlin("plugin.serialization")
id("com.github.zellius.shortcut-helper") id("com.github.zellius.shortcut-helper")
id("com.squareup.sqldelight")
id("com.github.ben-manes.versions") id("com.github.ben-manes.versions")
} }
@ -134,19 +133,13 @@ android {
composeOptions { composeOptions {
kotlinCompilerExtensionVersion = compose.versions.compiler.get() kotlinCompilerExtensionVersion = compose.versions.compiler.get()
} }
sqldelight {
database("Database") {
packageName = "eu.kanade.tachiyomi"
dialect = "sqlite:3.24"
}
}
} }
dependencies { dependencies {
implementation(project(":i18n")) implementation(project(":i18n"))
implementation(project(":core")) implementation(project(":core"))
implementation(project(":source-api")) implementation(project(":source-api"))
implementation(project(":data"))
// Compose // Compose
implementation(platform(compose.bom)) implementation(platform(compose.bom))
@ -169,9 +162,6 @@ dependencies {
implementation(androidx.paging.compose) implementation(androidx.paging.compose)
implementation(libs.bundles.sqlite) implementation(libs.bundles.sqlite)
implementation(libs.sqldelight.android.driver)
implementation(libs.sqldelight.coroutines)
implementation(libs.sqldelight.android.paging)
implementation(kotlinx.reflect) implementation(kotlinx.reflect)

View File

@ -1,11 +1,11 @@
package eu.kanade.data.category package eu.kanade.data.category
import eu.kanade.data.DatabaseHandler
import eu.kanade.domain.category.model.Category import eu.kanade.domain.category.model.Category
import eu.kanade.domain.category.model.CategoryUpdate import eu.kanade.domain.category.model.CategoryUpdate
import eu.kanade.domain.category.repository.CategoryRepository import eu.kanade.domain.category.repository.CategoryRepository
import eu.kanade.tachiyomi.Database
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import tachiyomi.data.Database
import tachiyomi.data.DatabaseHandler
class CategoryRepositoryImpl( class CategoryRepositoryImpl(
private val handler: DatabaseHandler, private val handler: DatabaseHandler,

View File

@ -1,6 +1,5 @@
package eu.kanade.data.chapter package eu.kanade.data.chapter
import eu.kanade.data.DatabaseHandler
import eu.kanade.domain.chapter.model.Chapter import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.domain.chapter.model.ChapterUpdate import eu.kanade.domain.chapter.model.ChapterUpdate
import eu.kanade.domain.chapter.repository.ChapterRepository import eu.kanade.domain.chapter.repository.ChapterRepository
@ -8,6 +7,7 @@ import eu.kanade.tachiyomi.util.system.logcat
import eu.kanade.tachiyomi.util.system.toLong import eu.kanade.tachiyomi.util.system.toLong
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import logcat.LogPriority import logcat.LogPriority
import tachiyomi.data.DatabaseHandler
class ChapterRepositoryImpl( class ChapterRepositoryImpl(
private val handler: DatabaseHandler, private val handler: DatabaseHandler,

View File

@ -1,6 +1,5 @@
package eu.kanade.data.history package eu.kanade.data.history
import eu.kanade.data.DatabaseHandler
import eu.kanade.domain.history.model.History import eu.kanade.domain.history.model.History
import eu.kanade.domain.history.model.HistoryUpdate import eu.kanade.domain.history.model.HistoryUpdate
import eu.kanade.domain.history.model.HistoryWithRelations import eu.kanade.domain.history.model.HistoryWithRelations
@ -8,6 +7,7 @@ import eu.kanade.domain.history.repository.HistoryRepository
import eu.kanade.tachiyomi.util.system.logcat import eu.kanade.tachiyomi.util.system.logcat
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import logcat.LogPriority import logcat.LogPriority
import tachiyomi.data.DatabaseHandler
class HistoryRepositoryImpl( class HistoryRepositoryImpl(
private val handler: DatabaseHandler, private val handler: DatabaseHandler,

View File

@ -1,9 +1,9 @@
package eu.kanade.data.manga package eu.kanade.data.manga
import eu.kanade.data.DatabaseHandler
import eu.kanade.data.exh.favoriteEntryMapper import eu.kanade.data.exh.favoriteEntryMapper
import eu.kanade.domain.manga.repository.FavoritesEntryRepository import eu.kanade.domain.manga.repository.FavoritesEntryRepository
import exh.favorites.sql.models.FavoriteEntry import exh.favorites.sql.models.FavoriteEntry
import tachiyomi.data.DatabaseHandler
class FavoritesEntryRepositoryImpl( class FavoritesEntryRepositoryImpl(
private val handler: DatabaseHandler, private val handler: DatabaseHandler,

View File

@ -3,6 +3,7 @@ package eu.kanade.data.manga
import eu.kanade.domain.library.model.LibraryManga import eu.kanade.domain.library.model.LibraryManga
import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.Manga
import eu.kanade.tachiyomi.source.model.UpdateStrategy import eu.kanade.tachiyomi.source.model.UpdateStrategy
import tachiyomi.view.LibraryView
val mangaMapper: (Long, Long, String, String?, String?, String?, List<String>?, String, Long, String?, Boolean, Long?, Long?, Boolean, Long, Long, Long, Long, List<String>?, UpdateStrategy) -> Manga = val mangaMapper: (Long, Long, String, String?, String?, String?, List<String>?, String, Long, String?, Boolean, Long?, Long?, Boolean, Long, Long, Long, Long, List<String>?, UpdateStrategy) -> Manga =
{ id, source, url, artist, author, description, genre, title, status, thumbnailUrl, favorite, lastUpdate, _, initialized, viewerFlags, chapterFlags, coverLastModified, dateAdded, filteredScanlators, updateStrategy -> { id, source, url, artist, author, description, genre, title, status, thumbnailUrl, favorite, lastUpdate, _, initialized, viewerFlags, chapterFlags, coverLastModified, dateAdded, filteredScanlators, updateStrategy ->
@ -69,3 +70,36 @@ val libraryManga: (Long, Long, String, String?, String?, String?, List<String>?,
lastRead = lastRead, lastRead = lastRead,
) )
} }
val libraryViewMapper: (LibraryView) -> LibraryManga = {
LibraryManga(
Manga(
id = it._id,
source = it.source,
favorite = it.favorite,
lastUpdate = it.last_update ?: 0,
dateAdded = it.date_added,
viewerFlags = it.viewer,
chapterFlags = it.chapter_flags,
coverLastModified = it.cover_last_modified,
url = it.url,
ogTitle = it.title,
ogArtist = it.artist,
ogAuthor = it.author,
ogDescription = it.description,
ogGenre = it.genre,
ogStatus = it.status,
thumbnailUrl = it.thumbnail_url,
updateStrategy = it.update_strategy,
initialized = it.initialized,
filteredScanlators = it.filtered_scanlators,
),
it.category,
it.totalCount,
it.readCount,
it.bookmarkCount,
it.latestUpload,
it.chapterFetchedAt,
it.lastRead,
)
}

View File

@ -1,6 +1,5 @@
package eu.kanade.data.manga package eu.kanade.data.manga
import eu.kanade.data.DatabaseHandler
import eu.kanade.data.exh.mergedMangaReferenceMapper import eu.kanade.data.exh.mergedMangaReferenceMapper
import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MergeMangaSettingsUpdate import eu.kanade.domain.manga.model.MergeMangaSettingsUpdate
@ -10,6 +9,7 @@ import eu.kanade.tachiyomi.util.system.toLong
import exh.merged.sql.models.MergedMangaReference import exh.merged.sql.models.MergedMangaReference
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import logcat.LogPriority import logcat.LogPriority
import tachiyomi.data.DatabaseHandler
class MangaMergeRepositoryImpl( class MangaMergeRepositoryImpl(
private val handler: DatabaseHandler, private val handler: DatabaseHandler,

View File

@ -1,6 +1,5 @@
package eu.kanade.data.manga package eu.kanade.data.manga
import eu.kanade.data.DatabaseHandler
import eu.kanade.data.exh.searchMetadataMapper import eu.kanade.data.exh.searchMetadataMapper
import eu.kanade.data.exh.searchTagMapper import eu.kanade.data.exh.searchTagMapper
import eu.kanade.data.exh.searchTitleMapper import eu.kanade.data.exh.searchTitleMapper
@ -13,6 +12,7 @@ import exh.metadata.sql.models.SearchTitle
import exh.source.EH_SOURCE_ID import exh.source.EH_SOURCE_ID
import exh.source.EXH_SOURCE_ID import exh.source.EXH_SOURCE_ID
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import tachiyomi.data.DatabaseHandler
class MangaMetadataRepositoryImpl( class MangaMetadataRepositoryImpl(
private val handler: DatabaseHandler, private val handler: DatabaseHandler,

View File

@ -1,10 +1,5 @@
package eu.kanade.data.manga package eu.kanade.data.manga
import eu.kanade.data.AndroidDatabaseHandler
import eu.kanade.data.DatabaseHandler
import eu.kanade.data.listOfStringsAdapter
import eu.kanade.data.listOfStringsAndAdapter
import eu.kanade.data.updateStrategyAdapter
import eu.kanade.domain.library.model.LibraryManga import eu.kanade.domain.library.model.LibraryManga
import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MangaUpdate import eu.kanade.domain.manga.model.MangaUpdate
@ -14,6 +9,11 @@ import eu.kanade.tachiyomi.util.system.toLong
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import logcat.LogPriority import logcat.LogPriority
import tachiyomi.data.AndroidDatabaseHandler
import tachiyomi.data.DatabaseHandler
import tachiyomi.data.listOfStringsAdapter
import tachiyomi.data.listOfStringsAndAdapter
import tachiyomi.data.updateStrategyAdapter
class MangaRepositoryImpl( class MangaRepositoryImpl(
private val handler: DatabaseHandler, private val handler: DatabaseHandler,
@ -40,7 +40,7 @@ class MangaRepositoryImpl(
} }
override suspend fun getLibraryManga(): List<LibraryManga> { override suspend fun getLibraryManga(): List<LibraryManga> {
return handler.awaitList { (handler as AndroidDatabaseHandler).getLibraryQuery() } return handler.awaitList { (handler as AndroidDatabaseHandler).getLibraryQuery() }.map(libraryViewMapper)
// return handler.awaitList { libraryViewQueries.library(libraryManga) } // return handler.awaitList { libraryViewQueries.library(libraryManga) }
} }

View File

@ -1,12 +1,12 @@
package eu.kanade.data.source package eu.kanade.data.source
import eu.kanade.data.DatabaseHandler
import eu.kanade.data.exh.feedSavedSearchMapper import eu.kanade.data.exh.feedSavedSearchMapper
import eu.kanade.data.exh.savedSearchMapper import eu.kanade.data.exh.savedSearchMapper
import eu.kanade.domain.source.repository.FeedSavedSearchRepository import eu.kanade.domain.source.repository.FeedSavedSearchRepository
import exh.savedsearches.models.FeedSavedSearch import exh.savedsearches.models.FeedSavedSearch
import exh.savedsearches.models.SavedSearch import exh.savedsearches.models.SavedSearch
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import tachiyomi.data.DatabaseHandler
class FeedSavedSearchRepositoryImpl( class FeedSavedSearchRepositoryImpl(
private val handler: DatabaseHandler, private val handler: DatabaseHandler,

View File

@ -1,10 +1,10 @@
package eu.kanade.data.source package eu.kanade.data.source
import eu.kanade.data.DatabaseHandler
import eu.kanade.data.exh.savedSearchMapper import eu.kanade.data.exh.savedSearchMapper
import eu.kanade.domain.source.repository.SavedSearchRepository import eu.kanade.domain.source.repository.SavedSearchRepository
import exh.savedsearches.models.SavedSearch import exh.savedsearches.models.SavedSearch
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import tachiyomi.data.DatabaseHandler
class SavedSearchRepositoryImpl( class SavedSearchRepositoryImpl(
private val handler: DatabaseHandler, private val handler: DatabaseHandler,

View File

@ -1,9 +1,9 @@
package eu.kanade.data.source package eu.kanade.data.source
import eu.kanade.data.DatabaseHandler
import eu.kanade.domain.source.model.SourceData import eu.kanade.domain.source.model.SourceData
import eu.kanade.domain.source.repository.SourceDataRepository import eu.kanade.domain.source.repository.SourceDataRepository
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import tachiyomi.data.DatabaseHandler
class SourceDataRepositoryImpl( class SourceDataRepositoryImpl(
private val handler: DatabaseHandler, private val handler: DatabaseHandler,

View File

@ -1,6 +1,5 @@
package eu.kanade.data.source package eu.kanade.data.source
import eu.kanade.data.DatabaseHandler
import eu.kanade.domain.source.model.Source import eu.kanade.domain.source.model.Source
import eu.kanade.domain.source.model.SourcePagingSourceType import eu.kanade.domain.source.model.SourcePagingSourceType
import eu.kanade.domain.source.model.SourceWithCount import eu.kanade.domain.source.model.SourceWithCount
@ -13,6 +12,7 @@ import eu.kanade.tachiyomi.source.online.all.EHentai
import exh.source.MERGED_SOURCE_ID import exh.source.MERGED_SOURCE_ID
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import tachiyomi.data.DatabaseHandler
class SourceRepositoryImpl( class SourceRepositoryImpl(
private val sourceManager: SourceManager, private val sourceManager: SourceManager,

View File

@ -1,9 +1,9 @@
package eu.kanade.data.track package eu.kanade.data.track
import eu.kanade.data.DatabaseHandler
import eu.kanade.domain.track.model.Track import eu.kanade.domain.track.model.Track
import eu.kanade.domain.track.repository.TrackRepository import eu.kanade.domain.track.repository.TrackRepository
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import tachiyomi.data.DatabaseHandler
class TrackRepositoryImpl( class TrackRepositoryImpl(
private val handler: DatabaseHandler, private val handler: DatabaseHandler,

View File

@ -2,6 +2,7 @@ package eu.kanade.data.updates
import eu.kanade.domain.manga.model.MangaCover import eu.kanade.domain.manga.model.MangaCover
import eu.kanade.domain.updates.model.UpdatesWithRelations import eu.kanade.domain.updates.model.UpdatesWithRelations
import tachiyomi.view.UpdatesView
val updateWithRelationMapper: (Long, String, Long, String, String?, Boolean, Boolean, Long, Long, Boolean, String?, Long, Long, Long) -> UpdatesWithRelations = { val updateWithRelationMapper: (Long, String, Long, String, String?, Boolean, Boolean, Long, Long, Boolean, String?, Long, Long, Long) -> UpdatesWithRelations = {
mangaId, mangaTitle, chapterId, chapterName, scanlator, read, bookmark, lastPageRead, sourceId, favorite, thumbnailUrl, coverLastModified, _, dateFetch -> mangaId, mangaTitle, chapterId, chapterName, scanlator, read, bookmark, lastPageRead, sourceId, favorite, thumbnailUrl, coverLastModified, _, dateFetch ->
@ -27,3 +28,25 @@ val updateWithRelationMapper: (Long, String, Long, String, String?, Boolean, Boo
), ),
) )
} }
val updatesViewMapper: (UpdatesView) -> UpdatesWithRelations = {
UpdatesWithRelations(
mangaId = it.mangaId,
ogMangaTitle = it.mangaTitle,
chapterId = it.chapterId,
chapterName = it.chapterName,
scanlator = it.scanlator,
read = it.read,
bookmark = it.bookmark,
lastPageRead = it.last_page_read,
sourceId = it.source,
dateFetch = it.datefetch,
coverData = MangaCover(
mangaId = it.mangaId,
sourceId = it.source,
isMangaFavorite = it.favorite,
url = it.thumbnailUrl,
lastModified = it.coverLastModified,
),
)
}

View File

@ -1,11 +1,11 @@
package eu.kanade.data.updates package eu.kanade.data.updates
import eu.kanade.data.AndroidDatabaseHandler
import eu.kanade.data.DatabaseHandler
import eu.kanade.domain.updates.model.UpdatesWithRelations import eu.kanade.domain.updates.model.UpdatesWithRelations
import eu.kanade.domain.updates.repository.UpdatesRepository import eu.kanade.domain.updates.repository.UpdatesRepository
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import tachiyomi.data.AndroidDatabaseHandler
import tachiyomi.data.DatabaseHandler
class UpdatesRepositoryImpl( class UpdatesRepositoryImpl(
val databaseHandler: DatabaseHandler, val databaseHandler: DatabaseHandler,
@ -16,6 +16,7 @@ class UpdatesRepositoryImpl(
updatesViewQueries.updates(after, updateWithRelationMapper) updatesViewQueries.updates(after, updateWithRelationMapper)
}.map { }.map {
databaseHandler.awaitList { (databaseHandler as AndroidDatabaseHandler).getUpdatesQuery(after) } databaseHandler.awaitList { (databaseHandler as AndroidDatabaseHandler).getUpdatesQuery(after) }
.map(updatesViewMapper)
} }
} }
} }

View File

@ -50,7 +50,6 @@ import eu.kanade.presentation.components.FastScrollLazyColumn
import eu.kanade.presentation.components.LoadingScreen import eu.kanade.presentation.components.LoadingScreen
import eu.kanade.presentation.components.Scaffold import eu.kanade.presentation.components.Scaffold
import eu.kanade.presentation.util.selectedBackground import eu.kanade.presentation.util.selectedBackground
import eu.kanade.tachiyomi.Database
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.lang.launchUI import eu.kanade.tachiyomi.util.lang.launchUI
@ -58,6 +57,7 @@ import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.system.toast
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import tachiyomi.data.Database
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get

View File

@ -74,10 +74,6 @@ import eu.kanade.tachiyomi.util.CrashLogUtil
import eu.kanade.tachiyomi.util.lang.launchNonCancellable import eu.kanade.tachiyomi.util.lang.launchNonCancellable
import eu.kanade.tachiyomi.util.lang.withUIContext import eu.kanade.tachiyomi.util.lang.withUIContext
import eu.kanade.tachiyomi.util.storage.DiskUtil import eu.kanade.tachiyomi.util.storage.DiskUtil
import eu.kanade.tachiyomi.util.system.DeviceUtil
import eu.kanade.tachiyomi.util.system.isPackageInstalled
import eu.kanade.tachiyomi.util.system.isPreviewBuildType
import eu.kanade.tachiyomi.util.system.isReleaseBuildType
import eu.kanade.tachiyomi.util.system.isShizukuInstalled import eu.kanade.tachiyomi.util.system.isShizukuInstalled
import eu.kanade.tachiyomi.util.system.logcat import eu.kanade.tachiyomi.util.system.logcat
import eu.kanade.tachiyomi.util.system.powerManager import eu.kanade.tachiyomi.util.system.powerManager

View File

@ -35,7 +35,6 @@ import com.elvishew.xlog.printer.file.clean.FileLastModifiedCleanStrategy
import com.elvishew.xlog.printer.file.naming.DateFileNameGenerator import com.elvishew.xlog.printer.file.naming.DateFileNameGenerator
import com.google.firebase.analytics.ktx.analytics import com.google.firebase.analytics.ktx.analytics
import com.google.firebase.ktx.Firebase import com.google.firebase.ktx.Firebase
import eu.kanade.data.DatabaseHandler
import eu.kanade.domain.DomainModule import eu.kanade.domain.DomainModule
import eu.kanade.domain.SYDomainModule import eu.kanade.domain.SYDomainModule
import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.base.BasePreferences
@ -74,6 +73,7 @@ import kotlinx.coroutines.flow.onEach
import logcat.LogPriority import logcat.LogPriority
import logcat.LogcatLogger import logcat.LogcatLogger
import org.conscrypt.Conscrypt import org.conscrypt.Conscrypt
import tachiyomi.data.DatabaseHandler
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy

View File

@ -7,16 +7,6 @@ import androidx.sqlite.db.SupportSQLiteDatabase
import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory
import com.squareup.sqldelight.android.AndroidSqliteDriver import com.squareup.sqldelight.android.AndroidSqliteDriver
import com.squareup.sqldelight.db.SqlDriver import com.squareup.sqldelight.db.SqlDriver
import data.Categories
import data.History
import data.Mangas
import eu.kanade.data.AndroidDatabaseHandler
import eu.kanade.data.DatabaseHandler
import eu.kanade.data.dateAdapter
import eu.kanade.data.listOfLongsAdapter
import eu.kanade.data.listOfStringsAdapter
import eu.kanade.data.listOfStringsAndAdapter
import eu.kanade.data.updateStrategyAdapter
import eu.kanade.domain.UnsortedPreferences import eu.kanade.domain.UnsortedPreferences
import eu.kanade.domain.backup.service.BackupPreferences import eu.kanade.domain.backup.service.BackupPreferences
import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.base.BasePreferences
@ -55,6 +45,17 @@ import nl.adaptivity.xmlutil.XmlDeclMode
import nl.adaptivity.xmlutil.core.XmlVersion import nl.adaptivity.xmlutil.core.XmlVersion
import nl.adaptivity.xmlutil.serialization.UnknownChildHandler import nl.adaptivity.xmlutil.serialization.UnknownChildHandler
import nl.adaptivity.xmlutil.serialization.XML import nl.adaptivity.xmlutil.serialization.XML
import tachiyomi.data.AndroidDatabaseHandler
import tachiyomi.data.Categories
import tachiyomi.data.Database
import tachiyomi.data.DatabaseHandler
import tachiyomi.data.History
import tachiyomi.data.Mangas
import tachiyomi.data.dateAdapter
import tachiyomi.data.listOfLongsAdapter
import tachiyomi.data.listOfStringsAdapter
import tachiyomi.data.listOfStringsAndAdapter
import tachiyomi.data.updateStrategyAdapter
import uy.kohesive.injekt.api.InjektModule import uy.kohesive.injekt.api.InjektModule
import uy.kohesive.injekt.api.InjektRegistrar import uy.kohesive.injekt.api.InjektRegistrar
import uy.kohesive.injekt.api.addSingleton import uy.kohesive.injekt.api.addSingleton

View File

@ -4,13 +4,8 @@ import android.Manifest
import android.content.Context import android.content.Context
import android.net.Uri import android.net.Uri
import com.hippo.unifile.UniFile import com.hippo.unifile.UniFile
import data.Manga_sync
import data.Mangas
import eu.kanade.data.DatabaseHandler
import eu.kanade.data.exh.mergedMangaReferenceMapper import eu.kanade.data.exh.mergedMangaReferenceMapper
import eu.kanade.data.listOfStringsAndAdapter
import eu.kanade.data.manga.mangaMapper import eu.kanade.data.manga.mangaMapper
import eu.kanade.data.updateStrategyAdapter
import eu.kanade.domain.backup.service.BackupPreferences import eu.kanade.domain.backup.service.BackupPreferences
import eu.kanade.domain.category.interactor.GetCategories import eu.kanade.domain.category.interactor.GetCategories
import eu.kanade.domain.category.model.Category import eu.kanade.domain.category.model.Category
@ -65,6 +60,11 @@ import logcat.LogPriority
import okio.buffer import okio.buffer
import okio.gzip import okio.gzip
import okio.sink import okio.sink
import tachiyomi.data.DatabaseHandler
import tachiyomi.data.Manga_sync
import tachiyomi.data.Mangas
import tachiyomi.data.listOfStringsAndAdapter
import tachiyomi.data.updateStrategyAdapter
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import java.io.FileOutputStream import java.io.FileOutputStream

View File

@ -1,6 +1,5 @@
package eu.kanade.tachiyomi.data.backup.models package eu.kanade.tachiyomi.data.backup.models
import eu.kanade.data.listOfStringsAndAdapter
import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.Manga
import eu.kanade.tachiyomi.data.database.models.ChapterImpl import eu.kanade.tachiyomi.data.database.models.ChapterImpl
import eu.kanade.tachiyomi.data.database.models.MangaImpl import eu.kanade.tachiyomi.data.database.models.MangaImpl
@ -10,6 +9,7 @@ import eu.kanade.tachiyomi.source.model.UpdateStrategy
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber import kotlinx.serialization.protobuf.ProtoNumber
import tachiyomi.data.listOfStringsAndAdapter
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
@Serializable @Serializable

View File

@ -1,10 +1,10 @@
package eu.kanade.tachiyomi.data.database.models package eu.kanade.tachiyomi.data.database.models
import eu.kanade.data.listOfStringsAndAdapter
import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
import exh.util.nullIfEmpty import exh.util.nullIfEmpty
import tachiyomi.data.listOfStringsAndAdapter
import eu.kanade.domain.manga.model.Manga as DomainManga import eu.kanade.domain.manga.model.Manga as DomainManga
interface Manga : SManga { interface Manga : SManga {

View File

@ -43,7 +43,6 @@ import coil.request.ImageRequest
import coil.size.Precision import coil.size.Precision
import coil.size.Scale import coil.size.Scale
import coil.transform.RoundedCornersTransformation import coil.transform.RoundedCornersTransformation
import eu.kanade.data.DatabaseHandler
import eu.kanade.domain.manga.model.MangaCover import eu.kanade.domain.manga.model.MangaCover
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.core.security.SecurityPreferences
@ -52,10 +51,11 @@ import eu.kanade.tachiyomi.util.Constants
import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.system.dpToPx import eu.kanade.tachiyomi.util.system.dpToPx
import kotlinx.coroutines.MainScope import kotlinx.coroutines.MainScope
import tachiyomi.data.DatabaseHandler
import tachiyomi.view.UpdatesView
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
import view.UpdatesView
import java.util.Calendar import java.util.Calendar
import java.util.Date import java.util.Date

View File

@ -1,6 +1,6 @@
package eu.kanade.tachiyomi.source.model package eu.kanade.tachiyomi.source.model
import data.Chapters import tachiyomi.data.Chapters
fun SChapter.copyFrom(other: Chapters) { fun SChapter.copyFrom(other: Chapters) {
name = other.name name = other.name

View File

@ -1,8 +1,8 @@
package eu.kanade.tachiyomi.source.model package eu.kanade.tachiyomi.source.model
import data.Mangas
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.DownloadManager
import tachiyomi.data.Mangas
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
@ -31,7 +31,7 @@ fun SManga.copyFrom(other: Mangas) {
} }
if (other.genre != null) { if (other.genre != null) {
genre = other.genre.joinToString(separator = ", ") genre = other.genre!!.joinToString(separator = ", ")
} }
if (other.thumbnail_url != null) { if (other.thumbnail_url != null) {

View File

@ -5,7 +5,6 @@ package exh
import android.content.Context import android.content.Context
import androidx.core.content.edit import androidx.core.content.edit
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import eu.kanade.data.DatabaseHandler
import eu.kanade.data.category.categoryMapper import eu.kanade.data.category.categoryMapper
import eu.kanade.data.chapter.chapterMapper import eu.kanade.data.chapter.chapterMapper
import eu.kanade.domain.backup.service.BackupPreferences import eu.kanade.domain.backup.service.BackupPreferences
@ -66,6 +65,7 @@ import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.contentOrNull import kotlinx.serialization.json.contentOrNull
import kotlinx.serialization.json.jsonArray import kotlinx.serialization.json.jsonArray
import kotlinx.serialization.json.jsonPrimitive import kotlinx.serialization.json.jsonPrimitive
import tachiyomi.data.DatabaseHandler
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy

View File

@ -2,7 +2,6 @@ package exh.debug
import android.app.Application import android.app.Application
import androidx.work.WorkManager import androidx.work.WorkManager
import eu.kanade.data.DatabaseHandler
import eu.kanade.domain.backup.service.BackupPreferences import eu.kanade.domain.backup.service.BackupPreferences
import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.base.BasePreferences
import eu.kanade.domain.library.service.LibraryPreferences import eu.kanade.domain.library.service.LibraryPreferences
@ -32,6 +31,7 @@ import exh.source.nHentaiSourceIds
import exh.util.jobScheduler import exh.util.jobScheduler
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import kotlinx.serialization.protobuf.schema.ProtoBufSchemaGenerator import kotlinx.serialization.protobuf.schema.ProtoBufSchemaGenerator
import tachiyomi.data.DatabaseHandler
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
import java.util.UUID import java.util.UUID

View File

@ -1,6 +1,6 @@
package exh.source package exh.source
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.domain.manga.model.Manga
import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.source.online.all.MangaDex import eu.kanade.tachiyomi.source.online.all.MangaDex
@ -9,22 +9,11 @@ import eu.kanade.tachiyomi.source.online.english.EightMuses
import eu.kanade.tachiyomi.source.online.english.HBrowse import eu.kanade.tachiyomi.source.online.english.HBrowse
import eu.kanade.tachiyomi.source.online.english.Pururin import eu.kanade.tachiyomi.source.online.english.Pururin
import eu.kanade.tachiyomi.source.online.english.Tsumino import eu.kanade.tachiyomi.source.online.english.Tsumino
import eu.kanade.domain.manga.model.Manga as DomainManga
/** /**
* Source helpers * Source helpers
*/ */
// Lewd source IDs
const val LEWD_SOURCE_SERIES = 6900L
const val EH_SOURCE_ID = LEWD_SOURCE_SERIES + 1
const val EXH_SOURCE_ID = LEWD_SOURCE_SERIES + 2
const val PURURIN_SOURCE_ID = 2221515250486218861
const val TSUMINO_SOURCE_ID = 6707338697138388238
const val EIGHTMUSES_SOURCE_ID = 1802675169972965535
const val HBROWSE_SOURCE_ID = 1401584337232758222
const val MERGED_SOURCE_ID = LEWD_SOURCE_SERIES + 69
private val DELEGATED_METADATA_SOURCES by lazy { private val DELEGATED_METADATA_SOURCES by lazy {
listOf( listOf(
Pururin::class, Pururin::class,
@ -87,8 +76,6 @@ fun Source.isMdBasedSource() = id in mangaDexSourceIds
fun Manga.isEhBasedManga() = source == EH_SOURCE_ID || source == EXH_SOURCE_ID fun Manga.isEhBasedManga() = source == EH_SOURCE_ID || source == EXH_SOURCE_ID
fun DomainManga.isEhBasedManga() = source == EH_SOURCE_ID || source == EXH_SOURCE_ID
fun Source.getMainSource(): Source = if (this is EnhancedHttpSource) { fun Source.getMainSource(): Source = if (this is EnhancedHttpSource) {
this.source() this.source()
} else { } else {

1
data/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build

27
data/build.gradle.kts Normal file
View File

@ -0,0 +1,27 @@
plugins {
id("com.android.library")
kotlin("android")
id("com.squareup.sqldelight")
}
android {
namespace = "tachiyomi.data"
defaultConfig {
consumerProguardFiles("consumer-rules.pro")
}
sqldelight {
database("Database") {
packageName = "tachiyomi.data"
dialect = "sqlite:3.24"
}
}
}
dependencies {
implementation(project(":source-api"))
api(libs.sqldelight.android.driver)
api(libs.sqldelight.coroutines)
api(libs.sqldelight.android.paging)
}

21
data/proguard-rules.pro vendored Normal file
View File

@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>

View File

@ -1,4 +1,4 @@
package eu.kanade.data package tachiyomi.data
import androidx.paging.PagingSource import androidx.paging.PagingSource
import com.squareup.sqldelight.Query import com.squareup.sqldelight.Query
@ -7,9 +7,6 @@ import com.squareup.sqldelight.runtime.coroutines.asFlow
import com.squareup.sqldelight.runtime.coroutines.mapToList import com.squareup.sqldelight.runtime.coroutines.mapToList
import com.squareup.sqldelight.runtime.coroutines.mapToOne import com.squareup.sqldelight.runtime.coroutines.mapToOne
import com.squareup.sqldelight.runtime.coroutines.mapToOneOrNull import com.squareup.sqldelight.runtime.coroutines.mapToOneOrNull
import eu.kanade.data.manga.LibraryQuery
import eu.kanade.data.updates.UpdatesQuery
import eu.kanade.tachiyomi.Database
import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow

View File

@ -1,4 +1,4 @@
package eu.kanade.data package tachiyomi.data
import com.squareup.sqldelight.ColumnAdapter import com.squareup.sqldelight.ColumnAdapter
import eu.kanade.tachiyomi.source.model.UpdateStrategy import eu.kanade.tachiyomi.source.model.UpdateStrategy

View File

@ -1,8 +1,7 @@
package eu.kanade.data package tachiyomi.data
import androidx.paging.PagingSource import androidx.paging.PagingSource
import com.squareup.sqldelight.Query import com.squareup.sqldelight.Query
import eu.kanade.tachiyomi.Database
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
interface DatabaseHandler { interface DatabaseHandler {

View File

@ -1,40 +1,35 @@
package eu.kanade.data.manga package tachiyomi.data
import com.squareup.sqldelight.Query import com.squareup.sqldelight.Query
import com.squareup.sqldelight.db.SqlCursor import com.squareup.sqldelight.db.SqlCursor
import com.squareup.sqldelight.db.SqlDriver import com.squareup.sqldelight.db.SqlDriver
import com.squareup.sqldelight.internal.copyOnWriteList import com.squareup.sqldelight.internal.copyOnWriteList
import eu.kanade.data.listOfStringsAdapter
import eu.kanade.data.listOfStringsAndAdapter
import eu.kanade.data.updateStrategyAdapter
import eu.kanade.domain.library.model.LibraryManga
import exh.source.MERGED_SOURCE_ID import exh.source.MERGED_SOURCE_ID
import tachiyomi.view.LibraryView
private val mapper = { cursor: SqlCursor -> private val mapper = { cursor: SqlCursor ->
LibraryManga( LibraryView(
manga = mangaMapper( _id = cursor.getLong(0)!!,
cursor.getLong(0)!!, source = cursor.getLong(1)!!,
cursor.getLong(1)!!, url = cursor.getString(2)!!,
cursor.getString(2)!!, artist = cursor.getString(3),
cursor.getString(3), author = cursor.getString(4),
cursor.getString(4), description = cursor.getString(5),
cursor.getString(5), genre = cursor.getString(6)?.let(listOfStringsAdapter::decode),
cursor.getString(6)?.let(listOfStringsAdapter::decode), title = cursor.getString(7)!!,
cursor.getString(7)!!, status = cursor.getLong(8)!!,
cursor.getLong(8)!!, thumbnail_url = cursor.getString(9),
cursor.getString(9), favorite = cursor.getLong(10)!! == 1L,
cursor.getLong(10)!! == 1L, last_update = cursor.getLong(11) ?: 0,
cursor.getLong(11) ?: 0, next_update = null,
null, initialized = cursor.getLong(13)!! == 1L,
cursor.getLong(13)!! == 1L, viewer = cursor.getLong(14)!!,
cursor.getLong(14)!!, chapter_flags = cursor.getLong(15)!!,
cursor.getLong(15)!!, cover_last_modified = cursor.getLong(16)!!,
cursor.getLong(16)!!, date_added = cursor.getLong(17)!!,
cursor.getLong(17)!!, filtered_scanlators = cursor.getString(18)?.let(listOfStringsAndAdapter::decode),
cursor.getString(18)?.let(listOfStringsAndAdapter::decode), update_strategy = updateStrategyAdapter.decode(cursor.getLong(19)!!),
updateStrategyAdapter.decode(cursor.getLong(19)!!), totalCount = cursor.getLong(20)!!,
),
totalChapters = cursor.getLong(20)!!,
readCount = cursor.getLong(21)!!, readCount = cursor.getLong(21)!!,
latestUpload = cursor.getLong(22)!!, latestUpload = cursor.getLong(22)!!,
chapterFetchedAt = cursor.getLong(23)!!, chapterFetchedAt = cursor.getLong(23)!!,
@ -44,7 +39,7 @@ private val mapper = { cursor: SqlCursor ->
) )
} }
class LibraryQuery(val driver: SqlDriver) : Query<LibraryManga>(copyOnWriteList(), mapper) { class LibraryQuery(val driver: SqlDriver) : Query<LibraryView>(copyOnWriteList(), mapper) {
override fun execute(): SqlCursor { override fun execute(): SqlCursor {
return driver.executeQuery( return driver.executeQuery(
null, null,

View File

@ -1,9 +1,8 @@
package eu.kanade.data package tachiyomi.data
import androidx.paging.PagingSource import androidx.paging.PagingSource
import androidx.paging.PagingState import androidx.paging.PagingState
import com.squareup.sqldelight.Query import com.squareup.sqldelight.Query
import eu.kanade.tachiyomi.Database
import kotlin.properties.Delegates import kotlin.properties.Delegates
class QueryPagingSource<RowType : Any>( class QueryPagingSource<RowType : Any>(

View File

@ -1,4 +1,4 @@
package eu.kanade.data package tachiyomi.data
import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Job import kotlinx.coroutines.Job

View File

@ -1,14 +1,14 @@
package eu.kanade.data.updates package tachiyomi.data
import com.squareup.sqldelight.Query import com.squareup.sqldelight.Query
import com.squareup.sqldelight.db.SqlCursor import com.squareup.sqldelight.db.SqlCursor
import com.squareup.sqldelight.db.SqlDriver import com.squareup.sqldelight.db.SqlDriver
import com.squareup.sqldelight.internal.copyOnWriteList import com.squareup.sqldelight.internal.copyOnWriteList
import eu.kanade.domain.updates.model.UpdatesWithRelations
import exh.source.MERGED_SOURCE_ID import exh.source.MERGED_SOURCE_ID
import tachiyomi.view.UpdatesView
private val mapper = { cursor: SqlCursor -> private val mapper = { cursor: SqlCursor ->
updateWithRelationMapper( UpdatesView(
cursor.getLong(0)!!, cursor.getLong(0)!!,
cursor.getString(1)!!, cursor.getString(1)!!,
cursor.getLong(2)!!, cursor.getLong(2)!!,
@ -26,7 +26,7 @@ private val mapper = { cursor: SqlCursor ->
) )
} }
class UpdatesQuery(val driver: SqlDriver, val after: Long) : Query<UpdatesWithRelations>(copyOnWriteList(), mapper) { class UpdatesQuery(val driver: SqlDriver, val after: Long) : Query<UpdatesView>(copyOnWriteList(), mapper) {
override fun execute(): SqlCursor { override fun execute(): SqlCursor {
return driver.executeQuery( return driver.executeQuery(
null, null,

View File

@ -44,3 +44,4 @@ include(":i18n")
include(":source-api") include(":source-api")
include(":core") include(":core")
include(":macrobenchmark") include(":macrobenchmark")
include(":data")

View File

@ -0,0 +1,11 @@
package exh.source
// Lewd source IDs
const val LEWD_SOURCE_SERIES = 6900L
const val EH_SOURCE_ID = LEWD_SOURCE_SERIES + 1
const val EXH_SOURCE_ID = LEWD_SOURCE_SERIES + 2
const val PURURIN_SOURCE_ID = 2221515250486218861
const val TSUMINO_SOURCE_ID = 6707338697138388238
const val EIGHTMUSES_SOURCE_ID = 1802675169972965535
const val HBROWSE_SOURCE_ID = 1401584337232758222
const val MERGED_SOURCE_ID = LEWD_SOURCE_SERIES + 69