diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f65a28139..921a00c06 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -204,7 +204,6 @@ dependencies { implementation(libs.androidx.paging.compose) // https://developer.android.com/jetpack/androidx/releases/room - ksp(libs.androidx.room.compiler) implementation(libs.androidx.room.paging) implementation(libs.androidx.work.runtime) @@ -256,14 +255,12 @@ kotlin { optIn.addAll( "coil3.annotation.ExperimentalCoilApi", "androidx.paging.ExperimentalPagingApi", - "kotlinx.serialization.ExperimentalSerializationApi", "me.saket.telephoto.ExperimentalTelephotoApi", ) } } ksp { - arg("room.schemaLocation", "$projectDir/schemas") arg("compose-destinations.codeGenPackageName", "com.hippo.ehviewer.ui") } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/EhApplication.kt b/app/src/main/kotlin/com/hippo/ehviewer/EhApplication.kt index 8155dcfdd..b95943cf5 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/EhApplication.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/EhApplication.kt @@ -38,6 +38,7 @@ import coil3.request.allowRgb565 import coil3.request.crossfade import coil3.serviceLoaderEnabled import coil3.util.DebugLogger +import com.ehviewer.core.database.SearchDatabase import com.ehviewer.core.files.deleteContent import com.ehviewer.core.ui.util.initSETConnection import com.ehviewer.core.util.isAtLeastO @@ -57,7 +58,6 @@ import com.hippo.ehviewer.coil.MapExtraInfoInterceptor import com.hippo.ehviewer.coil.MergeInterceptor import com.hippo.ehviewer.coil.QrCodeInterceptor import com.hippo.ehviewer.dailycheck.checkDawn -import com.hippo.ehviewer.dao.SearchDatabase import com.hippo.ehviewer.download.DownloadManager import com.hippo.ehviewer.download.DownloadsFilterMode import com.hippo.ehviewer.ktbuilder.diskCache diff --git a/app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt b/app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt index 37125ef4a..4f97f21a9 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt @@ -19,19 +19,21 @@ import android.content.Context import android.net.Uri import arrow.fx.coroutines.resource import arrow.fx.coroutines.resourceScope +import com.ehviewer.core.data.model.asEntity +import com.ehviewer.core.database.EhDatabase +import com.ehviewer.core.database.Schema17to18 +import com.ehviewer.core.database.model.DownloadArtist +import com.ehviewer.core.database.model.DownloadDirname +import com.ehviewer.core.database.model.DownloadInfo +import com.ehviewer.core.database.model.DownloadLabel +import com.ehviewer.core.database.model.Filter +import com.ehviewer.core.database.model.GalleryEntity +import com.ehviewer.core.database.model.HistoryInfo +import com.ehviewer.core.database.model.LocalFavoriteInfo +import com.ehviewer.core.database.model.ProgressInfo +import com.ehviewer.core.database.model.QuickSearch import com.ehviewer.core.files.sendTo -import com.hippo.ehviewer.client.data.BaseGalleryInfo -import com.hippo.ehviewer.dao.DownloadArtist -import com.hippo.ehviewer.dao.DownloadDirname -import com.hippo.ehviewer.dao.DownloadInfo -import com.hippo.ehviewer.dao.DownloadLabel -import com.hippo.ehviewer.dao.EhDatabase -import com.hippo.ehviewer.dao.Filter -import com.hippo.ehviewer.dao.HistoryInfo -import com.hippo.ehviewer.dao.LocalFavoriteInfo -import com.hippo.ehviewer.dao.ProgressInfo -import com.hippo.ehviewer.dao.QuickSearch -import com.hippo.ehviewer.dao.Schema17to18 +import com.ehviewer.core.model.GalleryInfo import com.hippo.ehviewer.download.DownloadManager import kotlinx.coroutines.flow.Flow import okio.Path @@ -44,15 +46,15 @@ object EhDB { addMigrations(Schema17to18()) } - suspend fun putGalleryInfo(galleryInfo: BaseGalleryInfo) { + suspend fun putGalleryInfo(galleryInfo: GalleryEntity) { db.galleryDao().upsert(galleryInfo) } - private suspend fun deleteGalleryInfo(galleryInfo: BaseGalleryInfo) { + private suspend fun deleteGalleryInfo(galleryInfo: GalleryEntity) { runCatching { db.galleryDao().delete(galleryInfo) } } - suspend fun updateGalleryInfo(galleryInfoList: List) { + suspend fun updateGalleryInfo(galleryInfoList: List) { db.galleryDao().update(galleryInfoList) } @@ -156,12 +158,12 @@ object EhDB { } } - suspend fun removeLocalFavorites(galleryInfo: BaseGalleryInfo) { + suspend fun removeLocalFavorites(galleryInfo: GalleryInfo) { db.localFavoritesDao().deleteByKey(galleryInfo.gid) - deleteGalleryInfo(galleryInfo) + deleteGalleryInfo(galleryInfo.asEntity()) } - suspend fun removeLocalFavorites(galleryInfoList: Collection) { + suspend fun removeLocalFavorites(galleryInfoList: Collection) { galleryInfoList.forEach { removeLocalFavorites(it) } @@ -172,12 +174,12 @@ object EhDB { return dao.contains(gid) } - suspend fun putLocalFavorites(galleryInfo: BaseGalleryInfo) { - putGalleryInfo(galleryInfo) + suspend fun putLocalFavorites(galleryInfo: GalleryInfo) { + putGalleryInfo(galleryInfo.asEntity()) db.localFavoritesDao().upsert(LocalFavoriteInfo(galleryInfo.gid)) } - suspend fun putLocalFavorites(galleryInfoList: Collection) { + suspend fun putLocalFavorites(galleryInfoList: Collection) { galleryInfoList.forEach { putLocalFavorites(it) } @@ -223,8 +225,8 @@ object EhDB { fun searchLocalFav(keyword: String) = db.localFavoritesDao().joinListLazy("*$keyword*") - suspend fun putHistoryInfo(galleryInfo: BaseGalleryInfo) { - putGalleryInfo(galleryInfo) + suspend fun putHistoryInfo(galleryInfo: GalleryInfo) { + putGalleryInfo(galleryInfo.asEntity()) db.historyDao().upsert(HistoryInfo(galleryInfo.gid)) } @@ -241,7 +243,7 @@ object EhDB { dao.insertOrIgnore(historyInfoList) } - suspend fun deleteHistoryInfo(galleryInfo: BaseGalleryInfo) { + suspend fun deleteHistoryInfo(galleryInfo: GalleryEntity) { val dao = db.historyDao() dao.deleteByKey(galleryInfo.gid) deleteGalleryInfo(galleryInfo) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/EhCacheKeyFactory.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/EhCacheKeyFactory.kt index 05b4055fd..cd4e46dc0 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/EhCacheKeyFactory.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/EhCacheKeyFactory.kt @@ -15,7 +15,7 @@ */ package com.hippo.ehviewer.client -import com.hippo.ehviewer.client.data.GalleryInfo +import com.ehviewer.core.model.GalleryInfo // Normal Preview (v2): https://*.hath.network/c(m|1|2)/[timed token]/[gid]-[index].(jpg|webp) // ExHentai Large Preview (v1 Cover): https://s.exhentai.org/t/*** diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/EhEngine.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/EhEngine.kt index 02c83fcbb..8fb778c66 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/EhEngine.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/EhEngine.kt @@ -22,12 +22,14 @@ import arrow.core.right import arrow.fx.coroutines.parMap import arrow.fx.coroutines.parZip import com.ehviewer.core.i18n.R +import com.ehviewer.core.model.BaseGalleryInfo +import com.ehviewer.core.model.GalleryInfo import com.ehviewer.core.util.logcat import com.hippo.ehviewer.EhDB import com.hippo.ehviewer.Settings -import com.hippo.ehviewer.client.data.BaseGalleryInfo import com.hippo.ehviewer.client.data.FavListUrlBuilder -import com.hippo.ehviewer.client.data.GalleryInfo +import com.hippo.ehviewer.client.data.fillInfo +import com.hippo.ehviewer.client.data.filterComments import com.hippo.ehviewer.client.exception.CloudflareBypassException import com.hippo.ehviewer.client.exception.EhException import com.hippo.ehviewer.client.exception.InsufficientFundsException diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/EhFilter.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/EhFilter.kt index 751749593..3d297b6de 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/EhFilter.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/EhFilter.kt @@ -1,10 +1,10 @@ package com.hippo.ehviewer.client import arrow.core.memoize +import com.ehviewer.core.database.model.Filter +import com.ehviewer.core.database.model.FilterMode +import com.ehviewer.core.model.GalleryInfo import com.hippo.ehviewer.EhDB -import com.hippo.ehviewer.client.data.GalleryInfo -import com.hippo.ehviewer.dao.Filter -import com.hippo.ehviewer.dao.FilterMode import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/EhTagDatabase.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/EhTagDatabase.kt index f5a43f818..d2857f8b0 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/EhTagDatabase.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/EhTagDatabase.kt @@ -23,10 +23,10 @@ import arrow.core.Either import com.ehviewer.core.files.metadataOrNull import com.ehviewer.core.files.read import com.ehviewer.core.files.write +import com.ehviewer.core.model.TagNamespace import com.ehviewer.core.util.logcat import com.hippo.ehviewer.EhApplication.Companion.ktorClient import com.hippo.ehviewer.R -import com.hippo.ehviewer.client.data.TagNamespace import com.hippo.ehviewer.util.AppConfig import com.hippo.ehviewer.util.bodyAsUtf8Text import com.hippo.ehviewer.util.ensureSuccess diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/EhUtils.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/EhUtils.kt index 76b30a930..58253912b 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/EhUtils.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/EhUtils.kt @@ -27,10 +27,10 @@ import androidx.compose.runtime.Stable import androidx.compose.ui.graphics.Color import androidx.core.net.toUri import arrow.core.memoize +import com.ehviewer.core.model.GalleryDetail +import com.ehviewer.core.model.GalleryInfo import com.ehviewer.core.util.withUIContext import com.hippo.ehviewer.Settings -import com.hippo.ehviewer.client.data.GalleryDetail -import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.client.parser.Archive import com.hippo.ehviewer.spider.SpiderDen import com.hippo.ehviewer.util.AppConfig diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/data/AbstractDownloadInfo.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/data/AbstractDownloadInfo.kt deleted file mode 100644 index 7fe9c6a8c..000000000 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/data/AbstractDownloadInfo.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.hippo.ehviewer.client.data - -interface AbstractDownloadInfo { - var state: Int - var legacy: Int - var time: Long - var label: String? - var speed: Long - var remaining: Long - var finished: Int - var downloaded: Int - var total: Int -} diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryDetail.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryDetail.kt index 35c0b2cf4..ece65681b 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryDetail.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryDetail.kt @@ -16,10 +16,13 @@ package com.hippo.ehviewer.client.data import androidx.compose.ui.util.fastFlatMap +import com.ehviewer.core.model.GalleryDetail +import com.ehviewer.core.model.GalleryInfo +import com.ehviewer.core.model.GalleryTagGroup +import com.ehviewer.core.model.PowerStatus import com.hippo.ehviewer.EhDB import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhFilter -import kotlinx.serialization.Serializable private val LANGUAGES = arrayOf( "English", @@ -38,45 +41,27 @@ private val LANGUAGES = arrayOf( "Dutch", ) -@Serializable -data class GalleryDetail( - val galleryInfo: BaseGalleryInfo = BaseGalleryInfo(), - var apiUid: Long = -1L, - var apiKey: String? = null, - var torrentCount: Int = 0, - var parent: String? = null, - var newerVersions: List = emptyList(), - var visible: String? = null, - var language: String? = null, - var size: String? = null, - var favoriteCount: Int = 0, - var ratingCount: Int = 0, - val tagGroups: List, - var comments: GalleryCommentList, - val previewList: List, -) : GalleryInfo by galleryInfo { - suspend fun fillInfo() { - val index = LANGUAGES.indexOf(language) - if (index != -1) simpleLanguage = GalleryInfo.S_LANGS[index] - simpleTags = tagGroups.fastFlatMap(GalleryTagGroup::tags).map { (text, power, _) -> - if (power == PowerStatus.Weak) "_$text" else text - } - if (favoriteSlot == GalleryInfo.NOT_FAVORITED && EhDB.containLocalFavorites(gid)) { - favoriteSlot = GalleryInfo.LOCAL_FAVORITED - } +suspend fun GalleryDetail.fillInfo() { + val index = LANGUAGES.indexOf(language) + if (index != -1) simpleLanguage = GalleryInfo.S_LANGS[index] + simpleTags = tagGroups.fastFlatMap(GalleryTagGroup::tags).map { (text, power, _) -> + if (power == PowerStatus.Weak) "_$text" else text } + if (favoriteSlot == GalleryInfo.NOT_FAVORITED && EhDB.containLocalFavorites(gid)) { + favoriteSlot = GalleryInfo.LOCAL_FAVORITED + } +} - suspend fun filterComments() { - comments = with(comments) { - val scoreThreshold = Settings.commentThreshold.value - copy( - comments = comments.filter { - it.uploader || - it.score > scoreThreshold && - !EhFilter.filterCommenter(it.user.orEmpty()) && - !EhFilter.filterComment(it.comment) - }, - ) - } +suspend fun GalleryDetail.filterComments() { + comments = with(comments) { + val scoreThreshold = Settings.commentThreshold.value + copy( + comments = comments.filter { + it.uploader || + it.score > scoreThreshold && + !EhFilter.filterCommenter(it.user.orEmpty()) && + !EhFilter.filterComment(it.comment) + }, + ) } } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/data/ListUrlBuilder.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/data/ListUrlBuilder.kt index b71fdbda1..93f4a2568 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/data/ListUrlBuilder.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/data/ListUrlBuilder.kt @@ -15,13 +15,14 @@ */ package com.hippo.ehviewer.client.data +import com.ehviewer.core.database.model.QuickSearch +import com.ehviewer.core.model.GalleryInfo import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.EhUtils import com.hippo.ehviewer.client.addQueryParameter import com.hippo.ehviewer.client.addQueryParameterIfNotBlank import com.hippo.ehviewer.client.ehUrl -import com.hippo.ehviewer.dao.QuickSearch import com.hippo.ehviewer.ui.main.AdvanceTable import io.ktor.http.Parameters import kotlinx.serialization.Serializable diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryApiParser.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryApiParser.kt index bb33c6669..7acd09b1a 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryApiParser.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryApiParser.kt @@ -15,9 +15,9 @@ */ package com.hippo.ehviewer.client.parser +import com.ehviewer.core.model.GalleryInfo import com.ehviewer.core.util.unescapeXml import com.hippo.ehviewer.client.EhUtils.getCategory -import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.client.getThumbKey import com.hippo.ehviewer.client.parseAs import kotlinx.serialization.SerialName diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryDetailParser.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryDetailParser.kt index 6540f33e6..cc3669cd0 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryDetailParser.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryDetailParser.kt @@ -17,9 +17,9 @@ package com.hippo.ehviewer.client.parser import arrow.core.Either import arrow.core.getOrElse -import com.hippo.ehviewer.client.data.GalleryCommentList -import com.hippo.ehviewer.client.data.GalleryDetail -import com.hippo.ehviewer.client.data.GalleryPreviewList +import com.ehviewer.core.model.GalleryCommentList +import com.ehviewer.core.model.GalleryDetail +import com.ehviewer.core.model.GalleryPreviewList import com.hippo.ehviewer.client.exception.ParseException import java.nio.ByteBuffer import kotlinx.serialization.Serializable diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryListParser.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryListParser.kt index 8c23c0adb..f55e5383f 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryListParser.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryListParser.kt @@ -1,6 +1,6 @@ package com.hippo.ehviewer.client.parser -import com.hippo.ehviewer.client.data.BaseGalleryInfo +import com.ehviewer.core.model.BaseGalleryInfo import com.hippo.ehviewer.client.exception.ParseException import java.nio.ByteBuffer import kotlinx.serialization.Serializable diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/VoteTagParser.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/VoteTagParser.kt index 75e52bf76..6c8c78e11 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/VoteTagParser.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/VoteTagParser.kt @@ -19,7 +19,7 @@ package com.hippo.ehviewer.client.parser import arrow.core.Either.Companion.catch import arrow.core.getOrElse -import com.hippo.ehviewer.client.data.GalleryTagGroup +import com.ehviewer.core.model.GalleryTagGroup import com.hippo.ehviewer.client.exception.ParseException import java.nio.ByteBuffer diff --git a/app/src/main/kotlin/com/hippo/ehviewer/coil/DownloadThumbInterceptor.kt b/app/src/main/kotlin/com/hippo/ehviewer/coil/DownloadThumbInterceptor.kt index 24a459e64..5c85127ee 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/coil/DownloadThumbInterceptor.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/coil/DownloadThumbInterceptor.kt @@ -6,6 +6,7 @@ import coil3.intercept.Interceptor import coil3.request.ImageRequest import coil3.request.ImageResult import coil3.request.SuccessResult +import com.ehviewer.core.database.model.DownloadInfo import com.ehviewer.core.files.delete import com.ehviewer.core.files.isDirectory import com.ehviewer.core.files.isFile @@ -14,7 +15,6 @@ import com.ehviewer.core.files.toUri import com.hippo.ehviewer.EhApplication.Companion.imageCache import com.hippo.ehviewer.EhDB import com.hippo.ehviewer.client.getThumbKey -import com.hippo.ehviewer.dao.DownloadInfo import com.hippo.ehviewer.download.downloadLocation private val downloadInfoKey = Extras.Key(default = null) @@ -35,7 +35,7 @@ object DownloadThumbInterceptor : Interceptor { info.thumbKey = thumbKey EhDB.putGalleryInfo(info.galleryInfo) } - val dir = downloadLocation / info.dirname + val dir = downloadLocation / info.dirname!! val format = thumbKey.substringAfterLast('.', "") check(format.isNotBlank()) val thumb = dir / "thumb.$format" diff --git a/app/src/main/kotlin/com/hippo/ehviewer/coil/Extensions.kt b/app/src/main/kotlin/com/hippo/ehviewer/coil/Extensions.kt index 828052a3f..c8f143d1c 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/coil/Extensions.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/coil/Extensions.kt @@ -7,10 +7,13 @@ import coil3.decode.BlackholeDecoder import coil3.request.CachePolicy import coil3.request.ImageRequest import coil3.size.SizeResolver -import com.hippo.ehviewer.client.data.GalleryInfo -import com.hippo.ehviewer.client.data.GalleryPreview +import com.ehviewer.core.database.model.DownloadInfo +import com.ehviewer.core.model.GalleryInfo +import com.ehviewer.core.model.GalleryPreview +import com.ehviewer.core.model.V2GalleryPreview +import com.hippo.ehviewer.client.getThumbKey +import com.hippo.ehviewer.client.getV2PreviewKey import com.hippo.ehviewer.client.thumbUrl -import com.hippo.ehviewer.dao.DownloadInfo import com.hippo.ehviewer.download.DownloadManager import com.hippo.ehviewer.ktbuilder.execute @@ -30,7 +33,7 @@ fun ImageRequest.Builder.ehUrl(info: GalleryInfo) = apply { // Load in original size so the memory cache can be reused for preload requests fun ImageRequest.Builder.ehPreview(preview: GalleryPreview) = apply { with(preview) { - val key = imageKey + val key = if (this is V2GalleryPreview) getV2PreviewKey(url) else getThumbKey(url) data(url) size(SizeResolver.ORIGINAL) memoryCacheKey(key) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadManager.kt b/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadManager.kt index d164c721b..f8a8d4867 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadManager.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadManager.kt @@ -26,21 +26,22 @@ import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.remember import androidx.core.util.size import arrow.fx.coroutines.parMapNotNull +import com.ehviewer.core.data.model.asEntity +import com.ehviewer.core.database.model.DownloadArtist +import com.ehviewer.core.database.model.DownloadInfo +import com.ehviewer.core.database.model.DownloadLabel import com.ehviewer.core.files.delete import com.ehviewer.core.files.find import com.ehviewer.core.files.toOkioPath import com.ehviewer.core.files.toUri +import com.ehviewer.core.model.BaseGalleryInfo +import com.ehviewer.core.model.GalleryInfo import com.ehviewer.core.preferences.edit import com.ehviewer.core.util.logcat import com.ehviewer.core.util.mapNotNull import com.hippo.ehviewer.EhDB import com.hippo.ehviewer.Settings -import com.hippo.ehviewer.client.data.BaseGalleryInfo -import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.client.exception.FatalException -import com.hippo.ehviewer.dao.DownloadArtist -import com.hippo.ehviewer.dao.DownloadInfo -import com.hippo.ehviewer.dao.DownloadLabel import com.hippo.ehviewer.spider.COMIC_INFO_FILE import com.hippo.ehviewer.spider.SpeedTracker import com.hippo.ehviewer.spider.SpiderQueen @@ -179,7 +180,7 @@ object DownloadManager : OnSpiderListener, CoroutineScope { } } else { // It is new download info - info = DownloadInfo(galleryInfo, galleryInfo.downloadDirname()) + info = DownloadInfo(galleryInfo.asEntity(), galleryInfo.downloadDirname()) info.label = label info.state = DownloadInfo.STATE_WAIT // Add to all download list and map @@ -198,7 +199,7 @@ object DownloadManager : OnSpiderListener, CoroutineScope { ensureDownload() // Add it to history - EhDB.putHistoryInfo(info.galleryInfo) + EhDB.putHistoryInfo(info) } } @@ -288,7 +289,7 @@ object DownloadManager : OnSpiderListener, CoroutineScope { } suspend fun restoreDownload(galleryInfo: BaseGalleryInfo, dirname: String) { - val info = DownloadInfo(galleryInfo, dirname) + val info = DownloadInfo(galleryInfo.asEntity(), dirname) info.state = DownloadInfo.STATE_NONE // Add to all download list and map @@ -575,13 +576,14 @@ object DownloadManager : OnSpiderListener, CoroutineScope { } } - val galleryInfoList = mutableListOf() - list.forEach { (info, artists) -> - info?.let { - galleryInfoList.add(it) - } - artists?.let { (gid, updateList) -> - EhDB.putDownloadArtist(gid, updateList) + val galleryInfoList = buildList { + list.forEach { (info, artists) -> + info?.let { + add(it) + } + artists?.let { (gid, updateList) -> + EhDB.putDownloadArtist(gid, updateList) + } } } if (galleryInfoList.isNotEmpty()) EhDB.updateGalleryInfo(galleryInfoList) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadService.kt b/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadService.kt index 0270b071b..c1cd6c658 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadService.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadService.kt @@ -31,17 +31,17 @@ import androidx.core.app.NotificationManagerCompat import androidx.core.content.ContextCompat import androidx.savedstate.serialization.decodeFromSavedState import androidx.savedstate.serialization.encodeToSavedState +import com.ehviewer.core.database.model.DownloadInfo import com.ehviewer.core.i18n.R +import com.ehviewer.core.model.BaseGalleryInfo import com.ehviewer.core.util.isAtLeastS import com.ehviewer.core.util.logcat import com.ehviewer.core.util.unsafeLazy import com.hippo.ehviewer.client.EhUtils -import com.hippo.ehviewer.client.data.BaseGalleryInfo import com.hippo.ehviewer.client.exception.FatalException import com.hippo.ehviewer.client.exception.InsufficientGpException import com.hippo.ehviewer.client.exception.IpBannedException import com.hippo.ehviewer.client.exception.QuotaExceededException -import com.hippo.ehviewer.dao.DownloadInfo import com.hippo.ehviewer.ui.MainActivity import com.hippo.ehviewer.util.FileUtils import com.hippo.ehviewer.util.ReadableTime diff --git a/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadsFilterMode.kt b/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadsFilterMode.kt index ac085a834..63122880f 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadsFilterMode.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadsFilterMode.kt @@ -1,7 +1,7 @@ package com.hippo.ehviewer.download -import com.hippo.ehviewer.dao.DownloadInfo -import com.hippo.ehviewer.dao.artists +import com.ehviewer.core.database.model.DownloadInfo +import com.ehviewer.core.database.model.artists enum class DownloadsFilterMode( val flag: Int, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/download/SortMode.kt b/app/src/main/kotlin/com/hippo/ehviewer/download/SortMode.kt index e0021c072..ffce3a409 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/download/SortMode.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/download/SortMode.kt @@ -1,7 +1,7 @@ package com.hippo.ehviewer.download +import com.ehviewer.core.database.model.DownloadInfo import com.hippo.ehviewer.client.EhUtils -import com.hippo.ehviewer.dao.DownloadInfo data class SortMode(val field: Field, val order: Order, val groupByDownloadLabel: Boolean = false) { val flag diff --git a/app/src/main/kotlin/com/hippo/ehviewer/gallery/EhPageLoader.kt b/app/src/main/kotlin/com/hippo/ehviewer/gallery/EhPageLoader.kt index cb6bda59e..f1b971841 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/gallery/EhPageLoader.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/gallery/EhPageLoader.kt @@ -1,8 +1,8 @@ package com.hippo.ehviewer.gallery import arrow.autoCloseScope +import com.ehviewer.core.model.GalleryInfo import com.hippo.ehviewer.client.EhUtils -import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.spider.SpiderQueen import com.hippo.ehviewer.spider.SpiderQueen.Companion.obtainSpiderQueen import com.hippo.ehviewer.spider.SpiderQueen.Companion.releaseSpiderQueen diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ktbuilder/Coil.kt b/app/src/main/kotlin/com/hippo/ehviewer/ktbuilder/Coil.kt index b96a02148..bd87503de 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ktbuilder/Coil.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ktbuilder/Coil.kt @@ -5,8 +5,8 @@ import coil3.ImageLoader import coil3.disk.DiskCache import coil3.imageLoader import coil3.request.ImageRequest -import com.hippo.ehviewer.client.data.GalleryInfo -import com.hippo.ehviewer.client.data.GalleryPreview +import com.ehviewer.core.model.GalleryInfo +import com.ehviewer.core.model.GalleryPreview import com.hippo.ehviewer.coil.ehPreview import com.hippo.ehviewer.coil.ehUrl import kotlinx.coroutines.CoroutineScope diff --git a/app/src/main/kotlin/com/hippo/ehviewer/spider/ComicInfo.kt b/app/src/main/kotlin/com/hippo/ehviewer/spider/ComicInfo.kt index b336a5e59..c21d6bff5 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/spider/ComicInfo.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/spider/ComicInfo.kt @@ -1,24 +1,24 @@ package com.hippo.ehviewer.spider +import com.ehviewer.core.database.util.SimpleTagsConverter import com.ehviewer.core.files.read import com.ehviewer.core.files.write +import com.ehviewer.core.model.GalleryDetail +import com.ehviewer.core.model.GalleryInfo +import com.ehviewer.core.model.GalleryTag +import com.ehviewer.core.model.PowerStatus +import com.ehviewer.core.model.TagNamespace +import com.ehviewer.core.model.TagNamespace.Artist +import com.ehviewer.core.model.TagNamespace.Character +import com.ehviewer.core.model.TagNamespace.Cosplayer +import com.ehviewer.core.model.TagNamespace.Female +import com.ehviewer.core.model.TagNamespace.Group +import com.ehviewer.core.model.TagNamespace.Location +import com.ehviewer.core.model.TagNamespace.Male +import com.ehviewer.core.model.TagNamespace.Mixed +import com.ehviewer.core.model.TagNamespace.Other +import com.ehviewer.core.model.TagNamespace.Parody import com.hippo.ehviewer.client.EhUrl -import com.hippo.ehviewer.client.data.GalleryDetail -import com.hippo.ehviewer.client.data.GalleryInfo -import com.hippo.ehviewer.client.data.GalleryTag -import com.hippo.ehviewer.client.data.PowerStatus -import com.hippo.ehviewer.client.data.SimpleTagsConverter -import com.hippo.ehviewer.client.data.TagNamespace -import com.hippo.ehviewer.client.data.TagNamespace.Artist -import com.hippo.ehviewer.client.data.TagNamespace.Character -import com.hippo.ehviewer.client.data.TagNamespace.Cosplayer -import com.hippo.ehviewer.client.data.TagNamespace.Female -import com.hippo.ehviewer.client.data.TagNamespace.Group -import com.hippo.ehviewer.client.data.TagNamespace.Location -import com.hippo.ehviewer.client.data.TagNamespace.Male -import com.hippo.ehviewer.client.data.TagNamespace.Mixed -import com.hippo.ehviewer.client.data.TagNamespace.Other -import com.hippo.ehviewer.client.data.TagNamespace.Parody import kotlinx.serialization.KSerializer import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/app/src/main/kotlin/com/hippo/ehviewer/spider/SpiderDen.kt b/app/src/main/kotlin/com/hippo/ehviewer/spider/SpiderDen.kt index ad52aa43b..8db52e996 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/spider/SpiderDen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/spider/SpiderDen.kt @@ -20,6 +20,7 @@ import arrow.fx.coroutines.autoCloseable import arrow.fx.coroutines.closeable import arrow.fx.coroutines.parMap import arrow.fx.coroutines.resourceScope +import com.ehviewer.core.database.model.DownloadArtist import com.ehviewer.core.files.delete import com.ehviewer.core.files.exists import com.ehviewer.core.files.find @@ -29,19 +30,18 @@ import com.ehviewer.core.files.mkdirs import com.ehviewer.core.files.moveTo import com.ehviewer.core.files.openFileDescriptor import com.ehviewer.core.files.sendTo +import com.ehviewer.core.model.GalleryDetail +import com.ehviewer.core.model.GalleryInfo import com.ehviewer.core.util.logcat import com.hippo.ehviewer.EhApplication.Companion.imageCache as sCache import com.hippo.ehviewer.EhDB import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhEngine import com.hippo.ehviewer.client.EhUtils.getSuitableTitle -import com.hippo.ehviewer.client.data.GalleryDetail -import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.client.ehRequest import com.hippo.ehviewer.client.getImageKey import com.hippo.ehviewer.coil.read import com.hippo.ehviewer.coil.suspendEdit -import com.hippo.ehviewer.dao.DownloadArtist import com.hippo.ehviewer.download.DownloadManager import com.hippo.ehviewer.download.downloadLocation import com.hippo.ehviewer.download.tempDownloadDir diff --git a/app/src/main/kotlin/com/hippo/ehviewer/spider/SpiderQueen.kt b/app/src/main/kotlin/com/hippo/ehviewer/spider/SpiderQueen.kt index 292d28c6c..7f2fa2728 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/spider/SpiderQueen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/spider/SpiderQueen.kt @@ -22,6 +22,8 @@ import arrow.core.getOrElse import arrow.core.partially1 import com.ehviewer.core.files.find import com.ehviewer.core.i18n.R +import com.ehviewer.core.model.GalleryInfo +import com.ehviewer.core.model.GalleryPreview import com.ehviewer.core.util.logcat import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhEngine @@ -29,8 +31,6 @@ import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.EhUrl.getGalleryDetailUrl import com.hippo.ehviewer.client.EhUrl.referer import com.hippo.ehviewer.client.EhUtils -import com.hippo.ehviewer.client.data.GalleryInfo -import com.hippo.ehviewer.client.data.GalleryPreview import com.hippo.ehviewer.client.exception.FatalException import com.hippo.ehviewer.client.exception.QuotaExceededException import com.hippo.ehviewer.util.displayString diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/CommonOperations.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/CommonOperations.kt index afb890ca3..d6d507a64 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/CommonOperations.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/CommonOperations.kt @@ -35,11 +35,16 @@ import androidx.compose.material3.Text import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import com.ehviewer.core.database.model.DownloadInfo import com.ehviewer.core.files.delete import com.ehviewer.core.files.exists import com.ehviewer.core.files.isDirectory import com.ehviewer.core.files.write import com.ehviewer.core.i18n.R +import com.ehviewer.core.model.BaseGalleryInfo +import com.ehviewer.core.model.GalleryInfo +import com.ehviewer.core.model.GalleryInfo.Companion.LOCAL_FAVORITED +import com.ehviewer.core.model.GalleryInfo.Companion.NOT_FAVORITED import com.ehviewer.core.ui.component.LabeledCheckbox import com.ehviewer.core.util.isAtLeastT import com.ehviewer.core.util.mapToLongArray @@ -50,12 +55,7 @@ import com.hippo.ehviewer.EhDB import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhEngine import com.hippo.ehviewer.client.EhUtils -import com.hippo.ehviewer.client.data.BaseGalleryInfo -import com.hippo.ehviewer.client.data.GalleryInfo -import com.hippo.ehviewer.client.data.GalleryInfo.Companion.LOCAL_FAVORITED -import com.hippo.ehviewer.client.data.GalleryInfo.Companion.NOT_FAVORITED import com.hippo.ehviewer.client.exception.EhException -import com.hippo.ehviewer.dao.DownloadInfo import com.hippo.ehviewer.download.DownloadManager import com.hippo.ehviewer.download.DownloadService import com.hippo.ehviewer.download.downloadDir @@ -177,7 +177,7 @@ suspend fun startDownload(forceDefault: Boolean, vararg galleryInfos: BaseGaller } context(_: DialogState) -suspend fun modifyFavorites(galleryInfo: BaseGalleryInfo): Boolean { +suspend fun modifyFavorites(galleryInfo: GalleryInfo): Boolean { val localFavorited = EhDB.containLocalFavorites(galleryInfo.gid) if (Settings.hasSignedIn.value) { val isFavorited = galleryInfo.favoriteSlot != NOT_FAVORITED @@ -215,7 +215,7 @@ suspend fun modifyFavorites(galleryInfo: BaseGalleryInfo): Boolean { } private suspend fun doModifyFavorites( - galleryInfo: BaseGalleryInfo, + galleryInfo: GalleryInfo, slot: Int = NOT_FAVORITED, localFavorited: Boolean = true, note: String = "", @@ -263,7 +263,7 @@ private suspend fun doModifyFavorites( add } -suspend fun removeFromFavorites(galleryInfo: BaseGalleryInfo) = doModifyFavorites( +suspend fun removeFromFavorites(galleryInfo: GalleryInfo) = doModifyFavorites( galleryInfo = galleryInfo, localFavorited = EhDB.containLocalFavorites(galleryInfo.gid), ) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt index 168449b4e..1ec3e1f65 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt @@ -25,11 +25,11 @@ import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.ehviewer.core.i18n.R +import com.ehviewer.core.model.GalleryDetail +import com.ehviewer.core.model.GalleryInfo.Companion.LOCAL_FAVORITED import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.EhUtils -import com.hippo.ehviewer.client.data.GalleryDetail -import com.hippo.ehviewer.client.data.GalleryInfo.Companion.LOCAL_FAVORITED import com.hippo.ehviewer.client.thumbUrl import com.hippo.ehviewer.ui.screen.navWithUrl import com.hippo.ehviewer.util.addTextToClipboard diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/UrlOpener.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/UrlOpener.kt index 4b2f4cc7a..e531c97ed 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/UrlOpener.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/UrlOpener.kt @@ -21,7 +21,7 @@ import android.widget.Toast import androidx.browser.customtabs.CustomTabsIntent import androidx.core.net.toUri import com.ehviewer.core.i18n.R -import com.hippo.ehviewer.client.data.GalleryDetail +import com.ehviewer.core.model.GalleryDetail import com.hippo.ehviewer.client.parser.GalleryPageUrlParser import com.ramcosta.composedestinations.navigation.DestinationsNavigator diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/DownloadCard.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/DownloadCard.kt index b14c766fb..038a99068 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/DownloadCard.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/DownloadCard.kt @@ -39,6 +39,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp +import com.ehviewer.core.database.model.DownloadInfo import com.ehviewer.core.i18n.R import com.ehviewer.core.ui.component.CrystalCard import com.ehviewer.core.ui.component.GalleryListCardRating @@ -46,7 +47,6 @@ import com.ehviewer.core.ui.util.TransitionsVisibilityScope import com.ehviewer.core.ui.util.listThumbGenerator import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhUtils -import com.hippo.ehviewer.dao.DownloadInfo import com.hippo.ehviewer.download.DownloadManager import com.hippo.ehviewer.util.FileUtils diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/EhAsyncThumb.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/EhAsyncThumb.kt index 5e8c7e189..2a403c6a5 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/EhAsyncThumb.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/EhAsyncThumb.kt @@ -18,11 +18,11 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import coil3.compose.AsyncImagePainter import coil3.compose.rememberAsyncImagePainter +import com.ehviewer.core.model.GalleryInfo import com.ehviewer.core.ui.util.SETNodeGenerator import com.ehviewer.core.ui.util.SharedElementBox import com.ehviewer.core.ui.util.TransitionsVisibilityScope import com.ehviewer.core.ui.util.thenIf -import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.ktbuilder.imageRequest import com.hippo.ehviewer.ui.tools.shouldCrop diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryComment.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryComment.kt index fd99cc0ac..1aa24aeab 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryComment.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryComment.kt @@ -24,7 +24,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import androidx.core.text.parseAsHtml import com.ehviewer.core.i18n.R -import com.hippo.ehviewer.client.data.GalleryComment +import com.ehviewer.core.model.GalleryComment import com.hippo.ehviewer.ui.legacy.CoilImageGetter import com.hippo.ehviewer.ui.legacy.LinkifyTextView import com.hippo.ehviewer.util.ReadableTime diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryDetail.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryDetail.kt index d349300fb..d7800a33a 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryDetail.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryDetail.kt @@ -33,13 +33,13 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.ehviewer.core.i18n.R +import com.ehviewer.core.model.GalleryDetail +import com.ehviewer.core.model.GalleryInfo import com.ehviewer.core.ui.icons.EhIcons import com.ehviewer.core.ui.icons.big.SadAndroid import com.ehviewer.core.ui.util.TransitionsVisibilityScope import com.ehviewer.core.ui.util.detailThumbGenerator import com.hippo.ehviewer.client.EhUtils -import com.hippo.ehviewer.client.data.GalleryDetail -import com.hippo.ehviewer.client.data.GalleryInfo @Composable fun GalleryDetailHeaderInfoCard( diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryInfo.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryInfo.kt index daa7d00ae..ee9db035e 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryInfo.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryInfo.kt @@ -38,6 +38,8 @@ import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import coil3.compose.AsyncImage +import com.ehviewer.core.model.GalleryInfo +import com.ehviewer.core.model.GalleryInfo.Companion.NOT_FAVORITED import com.ehviewer.core.ui.component.CrystalCard import com.ehviewer.core.ui.component.ElevatedCard import com.ehviewer.core.ui.component.GalleryListCardRating @@ -46,8 +48,6 @@ import com.ehviewer.core.ui.util.TransitionsVisibilityScope import com.ehviewer.core.ui.util.listThumbGenerator import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhUtils -import com.hippo.ehviewer.client.data.GalleryInfo -import com.hippo.ehviewer.client.data.GalleryInfo.Companion.NOT_FAVORITED import com.hippo.ehviewer.download.DownloadManager import com.hippo.ehviewer.util.FavouriteStatusRouter diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryList.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryList.kt index b3f140c76..40186400e 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryList.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryList.kt @@ -52,13 +52,13 @@ import androidx.paging.compose.LazyPagingItems import androidx.paging.compose.itemContentType import androidx.paging.compose.itemKey import com.ehviewer.core.i18n.R +import com.ehviewer.core.model.BaseGalleryInfo import com.ehviewer.core.ui.component.FastScrollLazyVerticalGrid import com.ehviewer.core.ui.component.FastScrollLazyVerticalStaggeredGrid import com.ehviewer.core.ui.icons.EhIcons import com.ehviewer.core.ui.icons.big.SadAndroid import com.ehviewer.core.util.launch import com.hippo.ehviewer.Settings -import com.hippo.ehviewer.client.data.BaseGalleryInfo import com.hippo.ehviewer.client.exception.NoHitsFoundException import com.hippo.ehviewer.coil.PrefetchAround import com.hippo.ehviewer.collectAsState diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryPreview.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryPreview.kt index 1c24a50ae..21297f37a 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryPreview.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryPreview.kt @@ -23,9 +23,9 @@ import androidx.compose.ui.unit.IntSize import coil3.BitmapImage import coil3.compose.AsyncImagePainter.State import coil3.compose.rememberAsyncImagePainter +import com.ehviewer.core.model.GalleryPreview +import com.ehviewer.core.model.V2GalleryPreview import com.ehviewer.core.ui.component.CrystalCard -import com.hippo.ehviewer.client.data.GalleryPreview -import com.hippo.ehviewer.client.data.V2GalleryPreview import com.hippo.ehviewer.ktbuilder.imageRequest import com.hippo.ehviewer.ui.tools.shouldCrop diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryTag.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryTag.kt index 5f4bb5295..15ce7f7b6 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryTag.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryTag.kt @@ -22,12 +22,12 @@ import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import com.ehviewer.core.model.GalleryTagGroup +import com.ehviewer.core.model.PowerStatus +import com.ehviewer.core.model.TagNamespace +import com.ehviewer.core.model.VoteStatus import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhTagDatabase -import com.hippo.ehviewer.client.data.GalleryTagGroup -import com.hippo.ehviewer.client.data.PowerStatus -import com.hippo.ehviewer.client.data.TagNamespace -import com.hippo.ehviewer.client.data.VoteStatus import com.hippo.ehviewer.collectAsState import com.hippo.ehviewer.ui.tools.includeFontPadding diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/SearchFilter.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/SearchFilter.kt index da52633e8..85450a9d1 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/SearchFilter.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/SearchFilter.kt @@ -34,6 +34,7 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import arrow.core.raise.ensure import com.ehviewer.core.i18n.R +import com.ehviewer.core.model.GalleryInfo.Companion.S_LANG_TAGS import com.ehviewer.core.ui.component.DropdownFilterChip import com.ehviewer.core.ui.util.thenIf import com.ehviewer.core.util.launch @@ -41,7 +42,6 @@ import com.ehviewer.core.util.toIntOrDefault import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhTagDatabase import com.hippo.ehviewer.client.EhUtils -import com.hippo.ehviewer.client.data.GalleryInfo.Companion.S_LANG_TAGS import com.hippo.ehviewer.collectAsState import com.hippo.ehviewer.ui.tools.DialogState import com.hippo.ehviewer.ui.tools.awaitResult diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/PageActions.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/PageActions.kt index 91a5cddfb..5e36e37ab 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/PageActions.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/PageActions.kt @@ -15,12 +15,12 @@ import androidx.compose.material3.SnackbarHostState import androidx.core.content.FileProvider import com.ehviewer.core.files.toOkioPath import com.ehviewer.core.i18n.R +import com.ehviewer.core.model.GalleryInfo import com.ehviewer.core.util.isAtLeastQ import com.ehviewer.core.util.isAtLeastT import com.ehviewer.core.util.logcat import com.hippo.ehviewer.BuildConfig.APPLICATION_ID import com.hippo.ehviewer.client.EhUrl -import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.gallery.Page import com.hippo.ehviewer.gallery.PageLoader import com.hippo.ehviewer.util.AppConfig diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt index 87a092d60..6e5322c1b 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt @@ -59,6 +59,7 @@ import arrow.core.Either.Companion.catch import arrow.core.raise.ensure import arrow.core.right import com.ehviewer.core.i18n.R +import com.ehviewer.core.model.BaseGalleryInfo import com.ehviewer.core.ui.util.Await import com.ehviewer.core.ui.util.asyncInVM import com.ehviewer.core.ui.util.rememberSystemUiController @@ -68,7 +69,6 @@ import com.ehviewer.core.util.launchIO import com.ehviewer.core.util.unreachable import com.hippo.ehviewer.EhDB import com.hippo.ehviewer.Settings -import com.hippo.ehviewer.client.data.BaseGalleryInfo import com.hippo.ehviewer.collectAsState import com.hippo.ehviewer.download.DownloadManager import com.hippo.ehviewer.download.archiveFile diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/DownloadsFilterState.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/DownloadsFilterState.kt index 46fc138ac..5aa94c2c8 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/DownloadsFilterState.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/DownloadsFilterState.kt @@ -1,7 +1,7 @@ package com.hippo.ehviewer.ui.screen +import com.ehviewer.core.database.model.DownloadInfo import com.ehviewer.core.util.containsIgnoreCase -import com.hippo.ehviewer.dao.DownloadInfo import com.hippo.ehviewer.download.DownloadsFilterMode import kotlinx.serialization.Serializable diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/DownloadsScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/DownloadsScreen.kt index aaca6af3e..dca3b86d5 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/DownloadsScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/DownloadsScreen.kt @@ -82,7 +82,9 @@ import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import arrow.core.partially1 +import com.ehviewer.core.database.model.DownloadInfo import com.ehviewer.core.i18n.R +import com.ehviewer.core.model.TagNamespace import com.ehviewer.core.ui.component.FAB_ANIMATE_TIME import com.ehviewer.core.ui.component.FabLayout import com.ehviewer.core.ui.component.FastScrollLazyColumn @@ -109,9 +111,7 @@ import com.hippo.ehviewer.EhDB import com.hippo.ehviewer.Settings import com.hippo.ehviewer.asMutableState import com.hippo.ehviewer.client.EhTagDatabase -import com.hippo.ehviewer.client.data.TagNamespace import com.hippo.ehviewer.collectAsState -import com.hippo.ehviewer.dao.DownloadInfo import com.hippo.ehviewer.download.DownloadManager import com.hippo.ehviewer.download.DownloadManager.downloadInfoList import com.hippo.ehviewer.download.DownloadService @@ -562,7 +562,7 @@ fun AnimatedVisibilityScope.DownloadsScreen(navigator: DestinationsNavigator) = } fun onItemClick(info: DownloadInfo) { - launchIO { EhDB.putHistoryInfo(info.galleryInfo) } + launchIO { EhDB.putHistoryInfo(info) } navToReader(info.galleryInfo) } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt index 3ebc8ab31..ba781996d 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt @@ -54,6 +54,7 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.paging.compose.collectAsLazyPagingItems import com.ehviewer.core.i18n.R +import com.ehviewer.core.model.BaseGalleryInfo import com.ehviewer.core.ui.component.FAB_ANIMATE_TIME import com.ehviewer.core.ui.component.FabLayout import com.ehviewer.core.ui.component.LocalSideSheetState @@ -70,7 +71,6 @@ import com.ehviewer.core.util.withUIContext import com.hippo.ehviewer.EhDB import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhEngine -import com.hippo.ehviewer.client.data.BaseGalleryInfo import com.hippo.ehviewer.client.data.FavListUrlBuilder import com.hippo.ehviewer.collectAsState import com.hippo.ehviewer.ui.DrawerHandle diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesViewModel.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesViewModel.kt index 55e5a5d0e..62e8787aa 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesViewModel.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesViewModel.kt @@ -13,12 +13,13 @@ import androidx.paging.PagingSource import androidx.paging.PagingState import androidx.paging.cachedIn import androidx.paging.filter +import androidx.paging.map import androidx.savedstate.compose.serialization.serializers.MutableStateSerializer +import com.ehviewer.core.model.BaseGalleryInfo import com.ehviewer.core.util.withIOContext import com.hippo.ehviewer.EhDB import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhEngine -import com.hippo.ehviewer.client.data.BaseGalleryInfo import com.hippo.ehviewer.client.data.FavListUrlBuilder import com.hippo.ehviewer.ui.tools.foldToLoadResult import kotlinx.coroutines.flow.flatMapLatest @@ -45,7 +46,7 @@ class FavoritesViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { } else { EhDB.searchLocalFav(keywordNow) } - } + }.flow.map { data -> data.map<_, BaseGalleryInfo> { it } } } else { Pager(PagingConfig(DEFAULT_PAGE_SIZE, prefetchDistance = 20)) { object : PagingSource() { @@ -71,12 +72,12 @@ class FavoritesViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { } } } + }.flow.map { data -> + // https://github.com/FooIbar/EhViewer/issues/1190 + // Workaround for duplicate items when sorting by favorited time + val gidSet = MutableLongSet(DEFAULT_PAGE_SIZE) + data.filter { gidSet.add(it.gid) } } - }.flow.map { pagingData -> - // https://github.com/FooIbar/EhViewer/issues/1190 - // Workaround for duplicate items when sorting by favorited time - val gidSet = MutableLongSet(DEFAULT_PAGE_SIZE) - pagingData.filter { gidSet.add(it.gid) } } }.cachedIn(viewModelScope) } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt index 0525e053e..977a1191a 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt @@ -82,7 +82,10 @@ import androidx.core.text.buildSpannedString import androidx.core.text.getSpans import androidx.core.text.inSpans import androidx.core.text.parseAsHtml +import com.ehviewer.core.database.model.Filter +import com.ehviewer.core.database.model.FilterMode import com.ehviewer.core.i18n.R +import com.ehviewer.core.model.GalleryComment import com.ehviewer.core.ui.util.animateFloatMergePredictiveBackAsState import com.ehviewer.core.ui.util.snackBarPadding import com.ehviewer.core.ui.util.thenIf @@ -94,11 +97,8 @@ import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhEngine import com.hippo.ehviewer.client.EhFilter.remember import com.hippo.ehviewer.client.EhUrl -import com.hippo.ehviewer.client.data.GalleryComment import com.hippo.ehviewer.client.data.ListUrlBuilder import com.hippo.ehviewer.collectAsState -import com.hippo.ehviewer.dao.Filter -import com.hippo.ehviewer.dao.FilterMode import com.hippo.ehviewer.ui.Screen import com.hippo.ehviewer.ui.jumpToReaderByPage import com.hippo.ehviewer.ui.main.GalleryCommentCard @@ -394,7 +394,7 @@ fun AnimatedVisibilityScope.GalleryCommentsScreen(gid: Long, navigator: Destinat } if (!comment.voteState.isNullOrEmpty()) { onSelect(checkVoteStatus) { - showCommentVoteStatus(comment.voteState) + showCommentVoteStatus(comment.voteState!!) } } }() diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailContent.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailContent.kt index 342b414e4..c6e46689c 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailContent.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailContent.kt @@ -68,7 +68,21 @@ import androidx.paging.compose.itemKey import arrow.core.partially1 import arrow.fx.coroutines.parMap import arrow.fx.coroutines.parZip +import com.ehviewer.core.data.model.asGalleryDetail +import com.ehviewer.core.data.model.findBaseInfo +import com.ehviewer.core.database.model.DownloadInfo +import com.ehviewer.core.database.model.Filter +import com.ehviewer.core.database.model.FilterMode import com.ehviewer.core.i18n.R +import com.ehviewer.core.model.GalleryComment +import com.ehviewer.core.model.GalleryDetail +import com.ehviewer.core.model.GalleryInfo +import com.ehviewer.core.model.GalleryInfo.Companion.NOT_FAVORITED +import com.ehviewer.core.model.GalleryPreview +import com.ehviewer.core.model.GalleryTagGroup +import com.ehviewer.core.model.TagNamespace +import com.ehviewer.core.model.V2GalleryPreview +import com.ehviewer.core.model.VoteStatus import com.ehviewer.core.ui.component.CrystalCard import com.ehviewer.core.ui.component.FastScrollLazyVerticalGrid import com.ehviewer.core.ui.component.FilledTertiaryIconButton @@ -95,26 +109,12 @@ import com.hippo.ehviewer.client.EhEngine import com.hippo.ehviewer.client.EhFilter.remember import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.EhUtils -import com.hippo.ehviewer.client.data.GalleryComment -import com.hippo.ehviewer.client.data.GalleryDetail -import com.hippo.ehviewer.client.data.GalleryInfo -import com.hippo.ehviewer.client.data.GalleryInfo.Companion.NOT_FAVORITED -import com.hippo.ehviewer.client.data.GalleryPreview -import com.hippo.ehviewer.client.data.GalleryTagGroup import com.hippo.ehviewer.client.data.ListUrlBuilder -import com.hippo.ehviewer.client.data.TagNamespace -import com.hippo.ehviewer.client.data.V2GalleryPreview -import com.hippo.ehviewer.client.data.VoteStatus -import com.hippo.ehviewer.client.data.asGalleryDetail -import com.hippo.ehviewer.client.data.findBaseInfo import com.hippo.ehviewer.client.exception.EhException import com.hippo.ehviewer.client.exception.NoHathClientException import com.hippo.ehviewer.coil.PrefetchAround import com.hippo.ehviewer.coil.justDownload import com.hippo.ehviewer.collectAsState -import com.hippo.ehviewer.dao.DownloadInfo -import com.hippo.ehviewer.dao.Filter -import com.hippo.ehviewer.dao.FilterMode import com.hippo.ehviewer.download.DownloadManager import com.hippo.ehviewer.ktbuilder.executeIn import com.hippo.ehviewer.ktbuilder.imageRequest @@ -498,7 +498,7 @@ fun BelowHeader(galleryDetail: GalleryDetail, voteTag: VoteTag) { launchIO { favoritesLock.mutate { runSuspendCatching { - modifyFavorites(galleryDetail.galleryInfo) + modifyFavorites(galleryDetail) }.onSuccess { add -> if (add) { snackbar(addSucceed) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt index 95b0de115..0fca82341 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt @@ -34,9 +34,14 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.util.fastJoinToString import androidx.lifecycle.viewModelScope +import com.ehviewer.core.data.model.findBaseInfo +import com.ehviewer.core.database.model.DownloadInfo import com.ehviewer.core.files.delete import com.ehviewer.core.files.toOkioPath import com.ehviewer.core.i18n.R +import com.ehviewer.core.model.BaseGalleryInfo +import com.ehviewer.core.model.GalleryDetail +import com.ehviewer.core.model.GalleryInfo import com.ehviewer.core.ui.util.LocalWindowSizeClass import com.ehviewer.core.ui.util.isExpanded import com.ehviewer.core.ui.util.launchInVM @@ -50,13 +55,9 @@ import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhEngine import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.EhUtils -import com.hippo.ehviewer.client.data.BaseGalleryInfo -import com.hippo.ehviewer.client.data.GalleryDetail -import com.hippo.ehviewer.client.data.GalleryInfo -import com.hippo.ehviewer.client.data.findBaseInfo +import com.hippo.ehviewer.client.data.fillInfo import com.hippo.ehviewer.client.getImageKey import com.hippo.ehviewer.coil.justDownload -import com.hippo.ehviewer.dao.DownloadInfo import com.hippo.ehviewer.download.DownloadManager import com.hippo.ehviewer.ktbuilder.executeIn import com.hippo.ehviewer.ktbuilder.imageRequest @@ -137,12 +138,12 @@ fun AnimatedVisibilityScope.GalleryDetailScreen(args: GalleryDetailScreenArgs, n withIOContext { EhEngine.getGalleryDetail(galleryDetailUrl) } }.onSuccess { galleryDetail -> detailCache[galleryDetail.gid] = galleryDetail - }.onFailure { - galleryInfo?.let { info -> EhDB.putHistoryInfo(info.findBaseInfo()) } - getDetailError = it.displayString() + }.onFailure { e -> + galleryInfo?.let { EhDB.putHistoryInfo(it) } + getDetailError = e.displayString() }.getOrNull() galleryDetail?.let { - EhDB.putHistoryInfo(it.galleryInfo) + EhDB.putHistoryInfo(it) galleryInfo = it } } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListScreen.kt index 7255a59c6..14ce29351 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListScreen.kt @@ -69,6 +69,7 @@ import androidx.paging.LoadState import androidx.paging.compose.collectAsLazyPagingItems import arrow.core.raise.ensure import arrow.core.raise.ensureNotNull +import com.ehviewer.core.database.model.QuickSearch import com.ehviewer.core.i18n.R import com.ehviewer.core.ui.component.FAB_ANIMATE_TIME import com.ehviewer.core.ui.component.FabLayout @@ -102,7 +103,6 @@ import com.hippo.ehviewer.client.data.ListUrlBuilder.Companion.MODE_WHATS_HOT import com.hippo.ehviewer.client.parser.GalleryDetailUrlParser import com.hippo.ehviewer.client.parser.GalleryPageUrlParser import com.hippo.ehviewer.collectAsState -import com.hippo.ehviewer.dao.QuickSearch import com.hippo.ehviewer.ui.DrawerHandle import com.hippo.ehviewer.ui.Screen import com.hippo.ehviewer.ui.awaitSelectDate diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListViewModel.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListViewModel.kt index e24573244..8eed8fb3c 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListViewModel.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListViewModel.kt @@ -11,9 +11,9 @@ import androidx.paging.PagingSource import androidx.paging.PagingState import androidx.paging.cachedIn import androidx.savedstate.compose.serialization.serializers.MutableStateSerializer +import com.ehviewer.core.model.BaseGalleryInfo import com.ehviewer.core.util.withIOContext import com.hippo.ehviewer.client.EhEngine -import com.hippo.ehviewer.client.data.BaseGalleryInfo import com.hippo.ehviewer.client.data.ListUrlBuilder import com.hippo.ehviewer.client.data.ListUrlBuilder.Companion.MODE_TOPLIST import com.hippo.ehviewer.ui.tools.foldToLoadResult diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/MainNav.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/MainNav.kt index eadce3a79..afbede1e3 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/MainNav.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/MainNav.kt @@ -1,7 +1,7 @@ package com.hippo.ehviewer.ui.screen import androidx.annotation.MainThread -import com.hippo.ehviewer.client.data.BaseGalleryInfo +import com.ehviewer.core.model.BaseGalleryInfo import com.hippo.ehviewer.client.data.ListUrlBuilder import com.hippo.ehviewer.client.parser.GalleryDetailUrlParser import com.hippo.ehviewer.client.parser.GalleryListUrlParser diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/SearchBarScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/SearchBarScreen.kt index 39da2db87..523c9913e 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/SearchBarScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/SearchBarScreen.kt @@ -65,17 +65,17 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.coerceAtMost import androidx.compose.ui.unit.dp +import com.ehviewer.core.database.dao.SearchDao +import com.ehviewer.core.database.model.Search import com.ehviewer.core.i18n.R +import com.ehviewer.core.model.TagNamespace import com.ehviewer.core.ui.util.ifNotNullThen import com.ehviewer.core.ui.util.ifTrueThen import com.ehviewer.core.ui.util.thenIf import com.hippo.ehviewer.EhApplication.Companion.searchDatabase import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhTagDatabase -import com.hippo.ehviewer.client.data.TagNamespace import com.hippo.ehviewer.collectAsState -import com.hippo.ehviewer.dao.Search -import com.hippo.ehviewer.dao.SearchDao import com.hippo.ehviewer.ui.LocalNavDrawerState import com.hippo.ehviewer.ui.destinations.ImageSearchScreenDestination import com.hippo.ehviewer.ui.theme.scrim diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/DownloadScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/DownloadScreen.kt index 52289c657..41436f274 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/DownloadScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/DownloadScreen.kt @@ -29,6 +29,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import arrow.fx.coroutines.parMap import arrow.fx.coroutines.parMapNotNull +import com.ehviewer.core.database.model.DownloadInfo import com.ehviewer.core.files.delete import com.ehviewer.core.files.find import com.ehviewer.core.files.isDirectory @@ -38,6 +39,8 @@ import com.ehviewer.core.files.mkdirs import com.ehviewer.core.files.toOkioPath import com.ehviewer.core.files.toUri import com.ehviewer.core.i18n.R +import com.ehviewer.core.model.BaseGalleryInfo +import com.ehviewer.core.model.GalleryInfo import com.ehviewer.core.util.isAtLeastQ import com.ehviewer.core.util.launch import com.ehviewer.core.util.launchIO @@ -47,11 +50,8 @@ import com.hippo.ehviewer.Settings import com.hippo.ehviewer.asMutableState import com.hippo.ehviewer.client.EhEngine.fillGalleryListByApi import com.hippo.ehviewer.client.EhUrl -import com.hippo.ehviewer.client.data.BaseGalleryInfo -import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.client.parser.GalleryDetailUrlParser import com.hippo.ehviewer.client.parser.ParserUtils -import com.hippo.ehviewer.dao.DownloadInfo import com.hippo.ehviewer.download.DownloadManager import com.hippo.ehviewer.download.downloadDir import com.hippo.ehviewer.download.downloadLocation diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/FilterScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/FilterScreen.kt index cf9d9a1c2..6aa1fac60 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/FilterScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/FilterScreen.kt @@ -53,6 +53,8 @@ import androidx.compose.ui.res.stringArrayResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.unit.dp +import com.ehviewer.core.database.model.Filter +import com.ehviewer.core.database.model.FilterMode import com.ehviewer.core.i18n.R import com.ehviewer.core.ui.util.Await import com.ehviewer.core.ui.util.thenIf @@ -64,8 +66,6 @@ import com.hippo.ehviewer.client.EhFilter.forget import com.hippo.ehviewer.client.EhFilter.remember import com.hippo.ehviewer.client.EhFilter.trigger import com.hippo.ehviewer.collectAsState -import com.hippo.ehviewer.dao.Filter -import com.hippo.ehviewer.dao.FilterMode import com.hippo.ehviewer.ui.Screen import com.hippo.ehviewer.ui.main.NavigationIcon import com.hippo.ehviewer.ui.tools.awaitConfirmationOrCancel diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/CropDefaults.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/CropDefaults.kt index 4007d4fcc..3177fd7f9 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/CropDefaults.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/CropDefaults.kt @@ -1,7 +1,7 @@ package com.hippo.ehviewer.ui.tools import coil3.Image -import com.hippo.ehviewer.client.data.V2GalleryPreview +import com.ehviewer.core.model.V2GalleryPreview private const val CROP_MIN_ASPECT = 0.5F private const val CROP_MAX_ASPECT = 0.8f diff --git a/app/src/main/kotlin/com/hippo/ehviewer/util/FavouriteStatusRouter.kt b/app/src/main/kotlin/com/hippo/ehviewer/util/FavouriteStatusRouter.kt index 4c37cb0e8..c35bf5e18 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/util/FavouriteStatusRouter.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/util/FavouriteStatusRouter.kt @@ -22,10 +22,10 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.paging.compose.LazyPagingItems +import com.ehviewer.core.model.GalleryInfo import com.ehviewer.core.ui.util.launchInVM import com.ehviewer.core.ui.util.rememberUpdatedStateInVM import com.hippo.ehviewer.EhDB -import com.hippo.ehviewer.client.data.GalleryInfo import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.FlowCollector diff --git a/app/src/main/kotlin/com/hippo/ehviewer/util/GalleryAdsUtils.kt b/app/src/main/kotlin/com/hippo/ehviewer/util/GalleryAdsUtils.kt index b46a3fc73..0e01db68f 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/util/GalleryAdsUtils.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/util/GalleryAdsUtils.kt @@ -1,7 +1,7 @@ package com.hippo.ehviewer.util +import com.ehviewer.core.model.GalleryInfo import com.hippo.ehviewer.Settings -import com.hippo.ehviewer.client.data.GalleryInfo import okio.Path.Companion.toOkioPath import splitties.init.appCtx diff --git a/build-logic/convention/src/main/kotlin/com/ehviewer/Kotlin.kt b/build-logic/convention/src/main/kotlin/com/ehviewer/Kotlin.kt index 307eab499..80f745e91 100644 --- a/build-logic/convention/src/main/kotlin/com/ehviewer/Kotlin.kt +++ b/build-logic/convention/src/main/kotlin/com/ehviewer/Kotlin.kt @@ -14,6 +14,7 @@ internal fun KotlinCommonCompilerOptions.configureKotlin() { "kotlin.time.ExperimentalTime", "kotlinx.coroutines.ExperimentalCoroutinesApi", "kotlinx.coroutines.FlowPreview", + "kotlinx.serialization.ExperimentalSerializationApi", ) freeCompilerArgs.addAll( "-Xcontext-parameters", diff --git a/build.gradle.kts b/build.gradle.kts index 60ebb4d72..56cfb82de 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,6 +10,7 @@ plugins { alias(libs.plugins.kotlin.serialization) apply false alias(libs.plugins.ksp) apply false alias(libs.plugins.moko.resources) apply false + alias(libs.plugins.room) apply false alias(libs.plugins.spotless) apply false alias(libs.plugins.aboutlibrariesPlugin) apply false alias(libs.plugins.composeCompilerReportGenerator) apply false diff --git a/core/common/build.gradle.kts b/core/common/build.gradle.kts index 66123e15f..efc49d993 100644 --- a/core/common/build.gradle.kts +++ b/core/common/build.gradle.kts @@ -1,5 +1,6 @@ plugins { alias(libs.plugins.ehviewer.multiplatform.library) + alias(libs.plugins.kotlin.serialization) } kotlin { @@ -10,6 +11,7 @@ kotlin { api(libs.kotlinx.datetime) api(libs.kotlinx.io) api(libs.okio) + api(libs.serialization.cbor) api(libs.logcat) api(project.dependencies.platform(libs.arrow.stack)) api(libs.bundles.arrow) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/data/BaseGalleryInfo.kt b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/BaseGalleryInfo.kt similarity index 55% rename from app/src/main/kotlin/com/hippo/ehviewer/client/data/BaseGalleryInfo.kt rename to core/common/src/commonMain/kotlin/com/ehviewer/core/model/BaseGalleryInfo.kt index 99b954fec..c256e9549 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/data/BaseGalleryInfo.kt +++ b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/BaseGalleryInfo.kt @@ -13,84 +13,30 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.hippo.ehviewer.client.data +package com.ehviewer.core.model -import androidx.room.ColumnInfo -import androidx.room.Entity -import androidx.room.Ignore -import androidx.room.PrimaryKey -import androidx.room.TypeConverter -import androidx.room.TypeConverters -import com.hippo.ehviewer.client.data.GalleryInfo.Companion.NOT_FAVORITED +import com.ehviewer.core.model.GalleryInfo.Companion.NOT_FAVORITED import kotlinx.serialization.Serializable @Serializable -@Entity(tableName = "GALLERIES") -@TypeConverters(SimpleTagsConverter::class) -data class BaseGalleryInfo( - @PrimaryKey - @ColumnInfo(name = "GID") +open class BaseGalleryInfo( override var gid: Long = 0, - - @ColumnInfo(name = "TOKEN") override var token: String = "", - - @ColumnInfo(name = "TITLE") override var title: String? = null, - - @ColumnInfo(name = "TITLE_JPN") override var titleJpn: String? = null, - - @ColumnInfo(name = "THUMB") override var thumbKey: String? = null, - - @ColumnInfo(name = "CATEGORY") override var category: Int = 0, - - @ColumnInfo(name = "POSTED") override var posted: String? = null, - - @ColumnInfo(name = "UPLOADER") override var uploader: String? = null, - - @Ignore override var disowned: Boolean = false, - - @ColumnInfo(name = "RATING") override var rating: Float = 0f, - - @Ignore override var rated: Boolean = false, - - @ColumnInfo(name = "SIMPLE_TAGS") override var simpleTags: List? = null, - - @ColumnInfo(name = "PAGES", defaultValue = "0") override var pages: Int = 0, - - @Ignore override var thumbWidth: Int = 0, - - @Ignore override var thumbHeight: Int = 0, - - @ColumnInfo(name = "SIMPLE_LANGUAGE") override var simpleLanguage: String? = null, - - @ColumnInfo(name = "FAVORITE_SLOT") override var favoriteSlot: Int = NOT_FAVORITED, - - @Ignore override var favoriteName: String? = null, - - @Ignore override var favoriteNote: String? = null, ) : GalleryInfo - -class SimpleTagsConverter { - @TypeConverter - fun fromString(value: String) = value.split(", ") - - @TypeConverter - fun toString(value: List) = value.joinToString() -} diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryComment.kt b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryComment.kt similarity index 96% rename from app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryComment.kt rename to core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryComment.kt index 8d818ec62..a423e6cb9 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryComment.kt +++ b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryComment.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.hippo.ehviewer.client.data +package com.ehviewer.core.model import kotlinx.serialization.Serializable diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryCommentList.kt b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryCommentList.kt similarity index 95% rename from app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryCommentList.kt rename to core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryCommentList.kt index 32ba7d830..e3f69a3cb 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryCommentList.kt +++ b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryCommentList.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.hippo.ehviewer.client.data +package com.ehviewer.core.model import kotlinx.serialization.Serializable diff --git a/core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryDetail.kt b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryDetail.kt new file mode 100644 index 000000000..e6a804bf8 --- /dev/null +++ b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryDetail.kt @@ -0,0 +1,36 @@ +/* + * Copyright 2016 Hippo Seven + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.ehviewer.core.model + +import kotlinx.serialization.Serializable + +@Serializable +data class GalleryDetail( + val galleryInfo: BaseGalleryInfo = BaseGalleryInfo(), + var apiUid: Long = -1L, + var apiKey: String? = null, + var torrentCount: Int = 0, + var parent: String? = null, + var newerVersions: List = emptyList(), + var visible: String? = null, + var language: String? = null, + var size: String? = null, + var favoriteCount: Int = 0, + var ratingCount: Int = 0, + val tagGroups: List, + var comments: GalleryCommentList, + val previewList: List, +) : GalleryInfo by galleryInfo diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryInfo.kt b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryInfo.kt similarity index 93% rename from app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryInfo.kt rename to core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryInfo.kt index 024268aca..85ffda26d 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryInfo.kt +++ b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryInfo.kt @@ -13,9 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.hippo.ehviewer.client.data - -import com.ehviewer.core.util.unreachable +package com.ehviewer.core.model interface GalleryInfo { var gid: Long @@ -133,11 +131,3 @@ interface GalleryInfo { const val LOCAL_FAVORITED = -1 } } - -fun GalleryInfo.findBaseInfo(): BaseGalleryInfo = when (this) { - is BaseGalleryInfo -> this - is GalleryDetail -> galleryInfo - else -> unreachable() -} - -fun GalleryInfo.asGalleryDetail(): GalleryDetail? = this as? GalleryDetail diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryPreview.kt b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryPreview.kt similarity index 81% rename from app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryPreview.kt rename to core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryPreview.kt index df79126c1..4dd109041 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryPreview.kt +++ b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryPreview.kt @@ -13,10 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.hippo.ehviewer.client.data +package com.ehviewer.core.model -import com.hippo.ehviewer.client.getThumbKey -import com.hippo.ehviewer.client.getV2PreviewKey import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.cbor.CborArray @@ -24,7 +22,6 @@ import kotlinx.serialization.cbor.CborArray @Serializable sealed interface GalleryPreview { val url: String - val imageKey: String val position: Int val pToken: String } @@ -35,9 +32,7 @@ data class V1GalleryPreview( override val url: String, override val position: Int, override val pToken: String, -) : GalleryPreview { - override val imageKey get() = getThumbKey(url) -} +) : GalleryPreview @Serializable @SerialName("V2") @@ -48,9 +43,7 @@ data class V2GalleryPreview( val offsetX: Int, val clipWidth: Int, val clipHeight: Int, -) : GalleryPreview { - override val imageKey get() = getV2PreviewKey(url) -} +) : GalleryPreview @Serializable @CborArray diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryTag.kt b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryTag.kt similarity index 88% rename from app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryTag.kt rename to core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryTag.kt index 7e2fc59eb..4c4c5a54f 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryTag.kt +++ b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryTag.kt @@ -1,4 +1,4 @@ -package com.hippo.ehviewer.client.data +package com.ehviewer.core.model import kotlinx.serialization.Serializable diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryTagGroup.kt b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryTagGroup.kt similarity index 95% rename from app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryTagGroup.kt rename to core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryTagGroup.kt index 4762fa883..875f49976 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryTagGroup.kt +++ b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/GalleryTagGroup.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.hippo.ehviewer.client.data +package com.ehviewer.core.model import kotlinx.serialization.Serializable diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/data/TagNamespace.kt b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/TagNamespace.kt similarity index 98% rename from app/src/main/kotlin/com/hippo/ehviewer/client/data/TagNamespace.kt rename to core/common/src/commonMain/kotlin/com/ehviewer/core/model/TagNamespace.kt index 8fdf9b850..7e96259e6 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/data/TagNamespace.kt +++ b/core/common/src/commonMain/kotlin/com/ehviewer/core/model/TagNamespace.kt @@ -1,4 +1,4 @@ -package com.hippo.ehviewer.client.data +package com.ehviewer.core.model import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializable diff --git a/core/data/build.gradle.kts b/core/data/build.gradle.kts index 71b0f4bcb..3269876ad 100644 --- a/core/data/build.gradle.kts +++ b/core/data/build.gradle.kts @@ -1,5 +1,7 @@ plugins { alias(libs.plugins.ehviewer.multiplatform.library) + alias(libs.plugins.ksp) + alias(libs.plugins.room) } kotlin { @@ -8,6 +10,7 @@ kotlin { dependencies { api(projects.core.common) api(libs.androidx.datastore) + api(libs.androidx.room.paging) } } androidMain { @@ -16,3 +19,11 @@ kotlin { } } } + +dependencies { + add("kspAndroid", libs.androidx.room.compiler) +} + +room { + schemaDirectory("$projectDir/schemas") +} diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/10.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/10.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/10.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/10.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/11.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/11.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/11.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/11.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/12.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/12.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/12.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/12.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/13.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/13.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/13.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/13.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/14.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/14.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/14.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/14.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/15.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/15.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/15.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/15.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/16.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/16.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/16.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/16.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/17.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/17.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/17.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/17.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/18.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/18.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/18.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/18.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/19.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/19.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/19.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/19.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/20.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/20.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/20.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/20.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/21.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/21.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/21.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/21.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/22.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/22.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/22.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/22.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/23.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/23.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/23.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/23.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/4.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/4.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/4.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/4.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/5.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/5.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/5.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/5.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/6.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/6.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/6.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/6.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/7.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/7.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/7.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/7.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/8.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/8.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/8.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/8.json diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/9.json b/core/data/schemas/com.ehviewer.core.database.EhDatabase/9.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.EhDatabase/9.json rename to core/data/schemas/com.ehviewer.core.database.EhDatabase/9.json diff --git a/app/schemas/com.hippo.ehviewer.dao.SearchDatabase/1.json b/core/data/schemas/com.ehviewer.core.database.SearchDatabase/1.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.SearchDatabase/1.json rename to core/data/schemas/com.ehviewer.core.database.SearchDatabase/1.json diff --git a/app/schemas/com.hippo.ehviewer.dao.SearchDatabase/2.json b/core/data/schemas/com.ehviewer.core.database.SearchDatabase/2.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.dao.SearchDatabase/2.json rename to core/data/schemas/com.ehviewer.core.database.SearchDatabase/2.json diff --git a/core/data/src/commonMain/kotlin/com/ehviewer/core/data/model/GalleryInfo.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/data/model/GalleryInfo.kt new file mode 100644 index 000000000..2f53d5ec5 --- /dev/null +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/data/model/GalleryInfo.kt @@ -0,0 +1,31 @@ +package com.ehviewer.core.data.model + +import com.ehviewer.core.database.model.GalleryEntity +import com.ehviewer.core.model.BaseGalleryInfo +import com.ehviewer.core.model.GalleryDetail +import com.ehviewer.core.model.GalleryInfo +import com.ehviewer.core.util.unreachable + +fun GalleryInfo.findBaseInfo(): BaseGalleryInfo = when (this) { + is BaseGalleryInfo -> this + is GalleryDetail -> galleryInfo + else -> unreachable() +} + +fun GalleryInfo.asGalleryDetail(): GalleryDetail? = this as? GalleryDetail + +fun GalleryInfo.asEntity() = this as? GalleryEntity ?: GalleryEntity( + gid = gid, + token = token, + title = title, + titleJpn = titleJpn, + thumbKey = thumbKey, + category = category, + posted = posted, + uploader = uploader, + rating = rating, + simpleTags = simpleTags, + pages = pages, + simpleLanguage = simpleLanguage, + favoriteSlot = favoriteSlot, +) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/Database.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/Database.kt similarity index 60% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/Database.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/Database.kt index ccea2d510..3783f34d0 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/Database.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/Database.kt @@ -1,16 +1,39 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database import androidx.room.AutoMigration import androidx.room.Database import androidx.room.RoomDatabase import androidx.room.TypeConverters -import com.hippo.ehviewer.client.data.BaseGalleryInfo +import com.ehviewer.core.database.dao.DownloadArtistDao +import com.ehviewer.core.database.dao.DownloadDirnameDao +import com.ehviewer.core.database.dao.DownloadLabelDao +import com.ehviewer.core.database.dao.DownloadsDao +import com.ehviewer.core.database.dao.FilterDao +import com.ehviewer.core.database.dao.GalleryDao +import com.ehviewer.core.database.dao.HistoryDao +import com.ehviewer.core.database.dao.LocalFavoritesDao +import com.ehviewer.core.database.dao.ProgressDao +import com.ehviewer.core.database.dao.QuickSearchDao +import com.ehviewer.core.database.dao.SearchDao +import com.ehviewer.core.database.model.DownloadArtist +import com.ehviewer.core.database.model.DownloadDirname +import com.ehviewer.core.database.model.DownloadEntity +import com.ehviewer.core.database.model.DownloadLabel +import com.ehviewer.core.database.model.Filter +import com.ehviewer.core.database.model.FilterModeConverter +import com.ehviewer.core.database.model.GalleryEntity +import com.ehviewer.core.database.model.GalleryFtsEntity +import com.ehviewer.core.database.model.HistoryInfo +import com.ehviewer.core.database.model.LocalFavoriteInfo +import com.ehviewer.core.database.model.ProgressInfo +import com.ehviewer.core.database.model.QuickSearch +import com.ehviewer.core.database.model.Search @Database( entities = [ - BaseGalleryInfo::class, DownloadLabel::class, DownloadEntity::class, DownloadDirname::class, DownloadArtist::class, + GalleryEntity::class, DownloadLabel::class, DownloadEntity::class, DownloadDirname::class, DownloadArtist::class, Filter::class, HistoryInfo::class, LocalFavoriteInfo::class, ProgressInfo::class, QuickSearch::class, - GalleryEntityFts::class, + GalleryFtsEntity::class, ], version = 23, exportSchema = true, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/DatabaseMigrations.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/DatabaseMigrations.kt similarity index 69% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/DatabaseMigrations.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/DatabaseMigrations.kt index 5acda1998..d4cbf74c5 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/DatabaseMigrations.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/DatabaseMigrations.kt @@ -1,4 +1,4 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database import androidx.room.DeleteColumn import androidx.room.DeleteTable @@ -6,11 +6,12 @@ import androidx.room.RenameColumn import androidx.room.RenameTable import androidx.room.migration.AutoMigrationSpec import androidx.room.migration.Migration -import androidx.sqlite.db.SupportSQLiteDatabase -import com.hippo.ehviewer.client.data.GalleryInfo.Companion.NOT_FAVORITED +import androidx.sqlite.SQLiteConnection +import androidx.sqlite.execSQL +import com.ehviewer.core.model.GalleryInfo.Companion.NOT_FAVORITED class Schema4to5 : AutoMigrationSpec { - override fun onPostMigrate(db: SupportSQLiteDatabase) { + override fun onPostMigrate(connection: SQLiteConnection) { val needMigrationTables = arrayOf( "DOWNLOADS", "HISTORY", @@ -23,7 +24,7 @@ class Schema4to5 : AutoMigrationSpec { ) needMigrationTables.forEach { table -> prefixToRemove.forEach { prefix -> - db.execSQL("UPDATE $table SET thumb = SUBSTR(thumb ,LENGTH('$prefix') + 1) WHERE thumb LIKE '$prefix%'") + connection.execSQL("UPDATE $table SET thumb = SUBSTR(thumb ,LENGTH('$prefix') + 1) WHERE thumb LIKE '$prefix%'") } } } @@ -34,13 +35,13 @@ class Schema6to7 : AutoMigrationSpec @RenameColumn(tableName = "HISTORY", fromColumnName = "MODE", toColumnName = "FAVORITE_SLOT") class Schema9to10 : AutoMigrationSpec { - override fun onPostMigrate(db: SupportSQLiteDatabase) { - db.execSQL("UPDATE HISTORY SET FAVORITE_SLOT = FAVORITE_SLOT - 2") + override fun onPostMigrate(connection: SQLiteConnection) { + connection.execSQL("UPDATE HISTORY SET FAVORITE_SLOT = FAVORITE_SLOT - 2") } } class Schema10to11 : AutoMigrationSpec { - override fun onPostMigrate(db: SupportSQLiteDatabase) { + override fun onPostMigrate(connection: SQLiteConnection) { val needMigrationTables = arrayOf( "QUICK_SEARCH", "DOWNLOAD_LABELS", @@ -48,7 +49,7 @@ class Schema10to11 : AutoMigrationSpec { ) needMigrationTables.forEach { table -> // TODO: Rewrite this with row_number() when min sdk is 30 (SQLite 3.28.0) - db.execSQL("UPDATE $table SET POSITION = (SELECT COUNT(*) FROM $table T WHERE T.TIME < $table.TIME)") + connection.execSQL("UPDATE $table SET POSITION = (SELECT COUNT(*) FROM $table T WHERE T.TIME < $table.TIME)") } } } @@ -58,14 +59,14 @@ class Schema10to11 : AutoMigrationSpec { class Schema11to12 : AutoMigrationSpec class Schema12to13 : AutoMigrationSpec { - override fun onPostMigrate(db: SupportSQLiteDatabase) { + override fun onPostMigrate(connection: SQLiteConnection) { val needMigrationTables = arrayOf( "HISTORY", "DOWNLOADS", "LOCAL_FAVORITES", ) needMigrationTables.forEachIndexed { index, table -> - db.execSQL( + connection.execSQL( "INSERT OR IGNORE INTO GALLERIES " + "SELECT GID, TOKEN, TITLE, TITLE_JPN, THUMB, CATEGORY, POSTED, UPLOADER, RATING, SIMPLE_LANGUAGE, " + "${if (index == 0) "FAVORITE_SLOT" else NOT_FAVORITED} FROM $table", @@ -105,11 +106,11 @@ class Schema12to13 : AutoMigrationSpec { class Schema13to14 : AutoMigrationSpec class Schema17to18 : Migration(17, 18) { - override fun migrate(db: SupportSQLiteDatabase) { - db.execSQL("CREATE TABLE IF NOT EXISTS `_new_GALLERIES` (`GID` INTEGER NOT NULL, `TOKEN` TEXT NOT NULL, `TITLE` TEXT, `TITLE_JPN` TEXT, `THUMB` TEXT, `CATEGORY` INTEGER NOT NULL, `POSTED` TEXT, `UPLOADER` TEXT, `RATING` REAL NOT NULL, `SIMPLE_LANGUAGE` TEXT, `FAVORITE_SLOT` INTEGER NOT NULL, PRIMARY KEY(`GID`))") - db.execSQL("INSERT INTO `_new_GALLERIES` (`GID`,`TOKEN`,`TITLE`,`TITLE_JPN`,`THUMB`,`CATEGORY`,`POSTED`,`UPLOADER`,`RATING`,`SIMPLE_LANGUAGE`,`FAVORITE_SLOT`) SELECT `GID`,`TOKEN`,`TITLE`,`TITLE_JPN`,`THUMB`,`CATEGORY`,`POSTED`,`UPLOADER`,`RATING`,`SIMPLE_LANGUAGE`,`FAVORITE_SLOT` FROM `GALLERIES` WHERE `TOKEN` IS NOT NULL") - db.execSQL("DROP TABLE `GALLERIES`") - db.execSQL("ALTER TABLE `_new_GALLERIES` RENAME TO `GALLERIES`") + override fun migrate(connection: SQLiteConnection) { + connection.execSQL("CREATE TABLE IF NOT EXISTS `_new_GALLERIES` (`GID` INTEGER NOT NULL, `TOKEN` TEXT NOT NULL, `TITLE` TEXT, `TITLE_JPN` TEXT, `THUMB` TEXT, `CATEGORY` INTEGER NOT NULL, `POSTED` TEXT, `UPLOADER` TEXT, `RATING` REAL NOT NULL, `SIMPLE_LANGUAGE` TEXT, `FAVORITE_SLOT` INTEGER NOT NULL, PRIMARY KEY(`GID`))") + connection.execSQL("INSERT INTO `_new_GALLERIES` (`GID`,`TOKEN`,`TITLE`,`TITLE_JPN`,`THUMB`,`CATEGORY`,`POSTED`,`UPLOADER`,`RATING`,`SIMPLE_LANGUAGE`,`FAVORITE_SLOT`) SELECT `GID`,`TOKEN`,`TITLE`,`TITLE_JPN`,`THUMB`,`CATEGORY`,`POSTED`,`UPLOADER`,`RATING`,`SIMPLE_LANGUAGE`,`FAVORITE_SLOT` FROM `GALLERIES` WHERE `TOKEN` IS NOT NULL") + connection.execSQL("DROP TABLE `GALLERIES`") + connection.execSQL("ALTER TABLE `_new_GALLERIES` RENAME TO `GALLERIES`") } } @@ -117,8 +118,8 @@ class Schema17to18 : Migration(17, 18) { class Schema18to19 : AutoMigrationSpec class Schema20to21 : AutoMigrationSpec { - override fun onPostMigrate(db: SupportSQLiteDatabase) { - db.execSQL("INSERT INTO GalleryFts(GalleryFts) VALUES('rebuild')") + override fun onPostMigrate(connection: SQLiteConnection) { + connection.execSQL("INSERT INTO GalleryFts(GalleryFts) VALUES('rebuild')") } } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadArtistDao.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/DownloadArtistDao.kt similarity index 80% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadArtistDao.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/DownloadArtistDao.kt index 3995d9527..7bded2a58 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadArtistDao.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/DownloadArtistDao.kt @@ -1,9 +1,10 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query +import com.ehviewer.core.database.model.DownloadArtist @Dao interface DownloadArtistDao { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadDirnameDao.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/DownloadDirnameDao.kt similarity index 87% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadDirnameDao.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/DownloadDirnameDao.kt index 358a27529..b1f2906a8 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadDirnameDao.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/DownloadDirnameDao.kt @@ -1,10 +1,11 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Upsert +import com.ehviewer.core.database.model.DownloadDirname @Dao interface DownloadDirnameDao { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadLabelDao.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/DownloadLabelDao.kt similarity index 92% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadLabelDao.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/DownloadLabelDao.kt index a75a0df12..97763eb34 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadLabelDao.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/DownloadLabelDao.kt @@ -1,10 +1,11 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.dao import androidx.room.Dao import androidx.room.Delete import androidx.room.Insert import androidx.room.Query import androidx.room.Update +import com.ehviewer.core.database.model.DownloadLabel @Dao interface DownloadLabelDao { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadsDao.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/DownloadsDao.kt similarity index 91% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadsDao.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/DownloadsDao.kt index d388b5f79..3a830df40 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadsDao.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/DownloadsDao.kt @@ -1,4 +1,4 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.dao import androidx.room.Dao import androidx.room.Delete @@ -9,6 +9,8 @@ import androidx.room.RoomWarnings import androidx.room.Transaction import androidx.room.Update import androidx.room.Upsert +import com.ehviewer.core.database.model.DownloadEntity +import com.ehviewer.core.database.model.DownloadInfo import kotlinx.coroutines.flow.Flow @Dao diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/FilterDao.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/FilterDao.kt similarity index 87% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/FilterDao.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/FilterDao.kt index 8f1e0a4a0..3bf9b0fcf 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/FilterDao.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/FilterDao.kt @@ -1,10 +1,11 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.dao import androidx.room.Dao import androidx.room.Delete import androidx.room.Insert import androidx.room.Query import androidx.room.Update +import com.ehviewer.core.database.model.Filter @Dao interface FilterDao { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/GalleryDao.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/GalleryDao.kt similarity index 52% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/GalleryDao.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/GalleryDao.kt index 7ea16eaf0..0b783396c 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/GalleryDao.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/GalleryDao.kt @@ -1,4 +1,4 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.dao import androidx.room.Dao import androidx.room.Delete @@ -7,30 +7,30 @@ import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Update import androidx.room.Upsert -import com.hippo.ehviewer.client.data.BaseGalleryInfo +import com.ehviewer.core.database.model.GalleryEntity @Dao interface GalleryDao { @Query("SELECT * FROM GALLERIES WHERE GID = :gid") - suspend fun load(gid: Long): BaseGalleryInfo? + suspend fun load(gid: Long): GalleryEntity? @Query("SELECT * FROM GALLERIES") - suspend fun list(): List + suspend fun list(): List @Insert(onConflict = OnConflictStrategy.IGNORE) - suspend fun insertOrIgnore(galleryInfoList: List) + suspend fun insertOrIgnore(galleryInfoList: List) @Update - suspend fun update(galleryInfo: BaseGalleryInfo) + suspend fun update(galleryInfo: GalleryEntity) @Update - suspend fun update(galleryInfoList: List) + suspend fun update(galleryInfoList: List) @Upsert - suspend fun upsert(galleryInfo: BaseGalleryInfo) + suspend fun upsert(galleryInfo: GalleryEntity) @Delete - suspend fun delete(galleryInfo: BaseGalleryInfo) + suspend fun delete(galleryInfo: GalleryEntity) @Query("DELETE FROM GALLERIES WHERE GID = :gid") suspend fun deleteByKey(gid: Long) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/HistoryDao.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/HistoryDao.kt similarity index 78% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/HistoryDao.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/HistoryDao.kt index b1b679331..8940f6eec 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/HistoryDao.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/HistoryDao.kt @@ -1,4 +1,4 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.dao import androidx.paging.PagingSource import androidx.room.Dao @@ -6,7 +6,8 @@ import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Upsert -import com.hippo.ehviewer.client.data.BaseGalleryInfo +import com.ehviewer.core.database.model.GalleryEntity +import com.ehviewer.core.database.model.HistoryInfo @Dao interface HistoryDao { @@ -14,13 +15,13 @@ interface HistoryDao { suspend fun list(): List @Query("SELECT GALLERIES.* FROM HISTORY JOIN GALLERIES USING(GID) ORDER BY TIME DESC") - fun joinListLazy(): PagingSource + fun joinListLazy(): PagingSource @Query( """SELECT GALLERIES.* FROM HISTORY JOIN GALLERIES USING(GID) JOIN GALLERIES_FTS ON GALLERIES.rowid = docid WHERE GALLERIES_FTS MATCH :title ORDER BY TIME DESC""", ) - fun joinListLazy(title: String): PagingSource + fun joinListLazy(title: String): PagingSource @Insert(onConflict = OnConflictStrategy.IGNORE) suspend fun insertOrIgnore(historyInfoList: List) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/LocalFavoritesDao.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/LocalFavoritesDao.kt similarity index 80% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/LocalFavoritesDao.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/LocalFavoritesDao.kt index 777d18c9d..fd97034a1 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/LocalFavoritesDao.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/LocalFavoritesDao.kt @@ -1,4 +1,4 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.dao import androidx.paging.PagingSource import androidx.room.Dao @@ -6,7 +6,8 @@ import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Upsert -import com.hippo.ehviewer.client.data.BaseGalleryInfo +import com.ehviewer.core.database.model.GalleryEntity +import com.ehviewer.core.database.model.LocalFavoriteInfo import kotlinx.coroutines.flow.Flow @Dao @@ -18,16 +19,16 @@ interface LocalFavoritesDao { suspend fun list(): List @Query("SELECT GALLERIES.* FROM LOCAL_FAVORITES JOIN GALLERIES USING(GID) ORDER BY TIME DESC") - fun joinListLazy(): PagingSource + fun joinListLazy(): PagingSource @Query( """SELECT GALLERIES.* FROM LOCAL_FAVORITES JOIN GALLERIES USING(GID) JOIN GALLERIES_FTS ON GALLERIES.rowid = docid WHERE GALLERIES_FTS MATCH :title ORDER BY TIME DESC""", ) - fun joinListLazy(title: String): PagingSource + fun joinListLazy(title: String): PagingSource @Query("SELECT GALLERIES.* FROM LOCAL_FAVORITES JOIN GALLERIES USING(GID) ORDER BY RANDOM() LIMIT 1") - suspend fun random(): BaseGalleryInfo? + suspend fun random(): GalleryEntity? @Query("SELECT EXISTS(SELECT * FROM LOCAL_FAVORITES WHERE GID = :gid)") suspend fun contains(gid: Long): Boolean diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/ProgressDao.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/ProgressDao.kt similarity index 89% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/ProgressDao.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/ProgressDao.kt index 01ee85fd4..28dea8681 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/ProgressDao.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/ProgressDao.kt @@ -1,10 +1,11 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Upsert +import com.ehviewer.core.database.model.ProgressInfo import kotlinx.coroutines.flow.Flow @Dao diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/QuickSearchDao.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/QuickSearchDao.kt similarity index 90% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/QuickSearchDao.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/QuickSearchDao.kt index 4ecb4ba0a..704147542 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/QuickSearchDao.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/QuickSearchDao.kt @@ -1,10 +1,11 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.dao import androidx.room.Dao import androidx.room.Delete import androidx.room.Insert import androidx.room.Query import androidx.room.Update +import com.ehviewer.core.database.model.QuickSearch @Dao interface QuickSearchDao { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/SearchDao.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/SearchDao.kt similarity index 88% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/SearchDao.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/SearchDao.kt index 149b339b9..52bf37b65 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/SearchDao.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/dao/SearchDao.kt @@ -1,8 +1,9 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.Query +import com.ehviewer.core.database.model.Search @Dao interface SearchDao { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadArtist.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/DownloadArtist.kt similarity index 93% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadArtist.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/DownloadArtist.kt index 6e296be49..6fd14a103 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadArtist.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/DownloadArtist.kt @@ -1,4 +1,4 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.model import androidx.room.ColumnInfo import androidx.room.Entity diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadDirname.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/DownloadDirname.kt similarity index 87% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadDirname.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/DownloadDirname.kt index 4e2f8a789..a1b9532f0 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadDirname.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/DownloadDirname.kt @@ -1,4 +1,4 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.model import androidx.room.ColumnInfo import androidx.room.Entity diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadInfo.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/DownloadInfo.kt similarity index 77% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadInfo.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/DownloadInfo.kt index b9af6fa53..faf5005e1 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadInfo.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/DownloadInfo.kt @@ -1,4 +1,4 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.model import androidx.room.ColumnInfo import androidx.room.Embedded @@ -7,15 +7,25 @@ import androidx.room.ForeignKey import androidx.room.Ignore import androidx.room.PrimaryKey import androidx.room.Relation -import com.hippo.ehviewer.client.data.AbstractDownloadInfo -import com.hippo.ehviewer.client.data.BaseGalleryInfo -import com.hippo.ehviewer.client.data.GalleryInfo +import com.ehviewer.core.model.GalleryInfo import kotlin.time.Clock +interface AbstractDownloadInfo { + var state: Int + var legacy: Int + var time: Long + var label: String? + var speed: Long + var remaining: Long + var finished: Int + var downloaded: Int + var total: Int +} + @Entity( tableName = "DOWNLOADS", foreignKeys = [ - ForeignKey(BaseGalleryInfo::class, ["GID"], ["GID"]), + ForeignKey(GalleryEntity::class, ["GID"], ["GID"]), ForeignKey( DownloadLabel::class, ["LABEL"], @@ -28,7 +38,7 @@ import kotlin.time.Clock data class DownloadEntity( @PrimaryKey @ColumnInfo(name = "GID") - var gid: Long, + var gid: Long = 0, @ColumnInfo(name = "STATE") override var state: Int = 0, @@ -56,13 +66,11 @@ data class DownloadEntity( @Ignore override var total: Int = 0, -) : AbstractDownloadInfo { - constructor() : this(0) -} +) : AbstractDownloadInfo data class DownloadInfo( @Relation(parentColumn = "GID", entityColumn = "GID") - val galleryInfo: BaseGalleryInfo, + val galleryInfo: GalleryEntity, @ColumnInfo(name = "DIRNAME") val dirname: String?, @@ -72,8 +80,7 @@ data class DownloadInfo( @Embedded val downloadInfo: DownloadEntity = DownloadEntity(galleryInfo.gid), -) : GalleryInfo by galleryInfo, - AbstractDownloadInfo by downloadInfo { +) : GalleryInfo by galleryInfo, AbstractDownloadInfo by downloadInfo { companion object { const val STATE_INVALID = -1 diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadLabel.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/DownloadLabel.kt similarity index 91% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadLabel.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/DownloadLabel.kt index 6f29be115..13014ce4d 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/DownloadLabel.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/DownloadLabel.kt @@ -1,4 +1,4 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.model import androidx.room.ColumnInfo import androidx.room.Entity diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/Filter.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/Filter.kt similarity index 94% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/Filter.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/Filter.kt index e21421ea8..24870cb88 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/Filter.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/Filter.kt @@ -1,4 +1,4 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.model import androidx.room.ColumnInfo import androidx.room.Entity diff --git a/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/GalleryEntity.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/GalleryEntity.kt new file mode 100644 index 000000000..1cd01c8b9 --- /dev/null +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/GalleryEntity.kt @@ -0,0 +1,72 @@ +package com.ehviewer.core.database.model + +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.Ignore +import androidx.room.PrimaryKey +import androidx.room.TypeConverters +import com.ehviewer.core.database.util.SimpleTagsConverter +import com.ehviewer.core.model.BaseGalleryInfo + +@Entity(tableName = "GALLERIES") +@TypeConverters(SimpleTagsConverter::class) +class GalleryEntity( + @PrimaryKey + @ColumnInfo(name = "GID") + override var gid: Long, + + @ColumnInfo(name = "TOKEN") + override var token: String, + + @ColumnInfo(name = "TITLE") + override var title: String?, + + @ColumnInfo(name = "TITLE_JPN") + override var titleJpn: String?, + + @ColumnInfo(name = "THUMB") + override var thumbKey: String?, + + @ColumnInfo(name = "CATEGORY") + override var category: Int, + + @ColumnInfo(name = "POSTED") + override var posted: String?, + + @ColumnInfo(name = "UPLOADER") + override var uploader: String?, + + @ColumnInfo(name = "RATING") + override var rating: Float, + + @ColumnInfo(name = "SIMPLE_TAGS") + override var simpleTags: List?, + + @ColumnInfo(name = "PAGES", defaultValue = "0") + override var pages: Int, + + @ColumnInfo(name = "SIMPLE_LANGUAGE") + override var simpleLanguage: String?, + + @ColumnInfo(name = "FAVORITE_SLOT") + override var favoriteSlot: Int, +) : BaseGalleryInfo() { + + @Ignore + override var disowned: Boolean = false + + @Ignore + override var rated: Boolean = false + + @Ignore + override var thumbWidth: Int = 0 + + @Ignore + override var thumbHeight: Int = 0 + + @Ignore + override var favoriteName: String? = null + + @Ignore + override var favoriteNote: String? = null +} diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/GalleryEntityFts.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/GalleryFtsEntity.kt similarity index 66% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/GalleryEntityFts.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/GalleryFtsEntity.kt index 8fb3cffcb..e1984d52a 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/GalleryEntityFts.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/GalleryFtsEntity.kt @@ -1,13 +1,12 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.model import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.Fts4 -import com.hippo.ehviewer.client.data.BaseGalleryInfo -@Fts4(contentEntity = BaseGalleryInfo::class) +@Fts4(contentEntity = GalleryEntity::class) @Entity(tableName = "GALLERIES_FTS") -class GalleryEntityFts( +class GalleryFtsEntity( @ColumnInfo(name = "TITLE") val title: String, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/HistoryInfo.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/HistoryInfo.kt similarity index 50% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/HistoryInfo.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/HistoryInfo.kt index 3fb203bdf..ac210e48d 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/HistoryInfo.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/HistoryInfo.kt @@ -1,9 +1,8 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.model import androidx.room.Entity import androidx.room.ForeignKey -import com.hippo.ehviewer.client.data.BaseGalleryInfo import kotlin.time.Clock -@Entity(tableName = "HISTORY", foreignKeys = [ForeignKey(BaseGalleryInfo::class, ["GID"], ["GID"])]) +@Entity(tableName = "HISTORY", foreignKeys = [ForeignKey(GalleryEntity::class, ["GID"], ["GID"])]) class HistoryInfo(gid: Long, time: Long = Clock.System.now().toEpochMilliseconds()) : TimeInfo(gid, time) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/LocalFavoriteInfo.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/LocalFavoriteInfo.kt similarity index 67% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/LocalFavoriteInfo.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/LocalFavoriteInfo.kt index 94c72459b..fb73d26e8 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/LocalFavoriteInfo.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/LocalFavoriteInfo.kt @@ -1,9 +1,8 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.model import androidx.room.Entity import androidx.room.ForeignKey -import com.hippo.ehviewer.client.data.BaseGalleryInfo import kotlin.time.Clock -@Entity(tableName = "LOCAL_FAVORITES", foreignKeys = [ForeignKey(BaseGalleryInfo::class, ["GID"], ["GID"])]) +@Entity(tableName = "LOCAL_FAVORITES", foreignKeys = [ForeignKey(GalleryEntity::class, ["GID"], ["GID"])]) class LocalFavoriteInfo(gid: Long = 0, time: Long = Clock.System.now().toEpochMilliseconds()) : TimeInfo(gid, time) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/ProgressInfo.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/ProgressInfo.kt similarity index 64% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/ProgressInfo.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/ProgressInfo.kt index 12f3711c2..a92d25595 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/ProgressInfo.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/ProgressInfo.kt @@ -1,15 +1,14 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.model import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.ForeignKey import androidx.room.PrimaryKey -import com.hippo.ehviewer.client.data.BaseGalleryInfo @Entity( tableName = "PROGRESS", foreignKeys = [ - ForeignKey(BaseGalleryInfo::class, ["GID"], ["GID"], onDelete = ForeignKey.CASCADE), + ForeignKey(GalleryEntity::class, ["GID"], ["GID"], onDelete = ForeignKey.CASCADE), ], ) class ProgressInfo( diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/QuickSearch.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/QuickSearch.kt similarity index 95% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/QuickSearch.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/QuickSearch.kt index 83e8ce4db..f60377686 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/QuickSearch.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/QuickSearch.kt @@ -1,4 +1,4 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.model import androidx.room.ColumnInfo import androidx.room.Entity diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/Search.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/Search.kt similarity index 88% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/Search.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/Search.kt index 2f9ea4deb..9edb9a22b 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/Search.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/Search.kt @@ -1,4 +1,4 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.model import androidx.room.ColumnInfo import androidx.room.Entity diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/TimeInfo.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/TimeInfo.kt similarity index 83% rename from app/src/main/kotlin/com/hippo/ehviewer/dao/TimeInfo.kt rename to core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/TimeInfo.kt index 665165adf..4c2bd1c0e 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/TimeInfo.kt +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/model/TimeInfo.kt @@ -1,4 +1,4 @@ -package com.hippo.ehviewer.dao +package com.ehviewer.core.database.model import androidx.room.ColumnInfo import androidx.room.PrimaryKey diff --git a/core/data/src/commonMain/kotlin/com/ehviewer/core/database/util/SimpleTagsConverter.kt b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/util/SimpleTagsConverter.kt new file mode 100644 index 000000000..f4fcdd840 --- /dev/null +++ b/core/data/src/commonMain/kotlin/com/ehviewer/core/database/util/SimpleTagsConverter.kt @@ -0,0 +1,11 @@ +package com.ehviewer.core.database.util + +import androidx.room.TypeConverter + +class SimpleTagsConverter { + @TypeConverter + fun fromString(value: String) = value.split(", ") + + @TypeConverter + fun toString(value: List) = value.joinToString() +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 11ab929f9..ee8c20c26 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -153,6 +153,7 @@ kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } moko-resources = { id = "dev.icerock.mobile.multiplatform-resources", version.ref = "moko-resources" } +room = { id = "androidx.room", version.ref = "androidx-room" } spotless = { id = "com.diffplug.spotless", version.ref = "spotless" } android-test = { id = "com.android.test", version.ref = "agp" } baselineprofile = { id = "androidx.baselineprofile", version.ref = "benchmark" }