diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/db/entity/EntityMapping.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/db/entity/EntityMapping.kt index a8a56f560..674cf7d3d 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/db/entity/EntityMapping.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/db/entity/EntityMapping.kt @@ -22,7 +22,7 @@ fun Collection.toMangaTags() = mapToSet(TagEntity::toMangaTag) fun Collection.toMangaTagsList() = map(TagEntity::toMangaTag) -fun MangaEntity.toManga(tags: Set, chapters: List?) = Manga( +fun MangaEntity.toManga(tags: Set, chapters: List?) = Manga( // TODO id = this.id, title = this.title, altTitle = this.altTitle, @@ -65,7 +65,7 @@ fun Manga.toEntity() = MangaEntity( publicUrl = publicUrl, source = source.name, largeCoverUrl = largeCoverUrl, - coverUrl = coverUrl, + coverUrl = coverUrl.orEmpty(), altTitle = altTitle, rating = rating, isNsfw = isNsfw, diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/db/entity/MangaEntity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/db/entity/MangaEntity.kt index e2c474399..9156db7b7 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/db/entity/MangaEntity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/db/entity/MangaEntity.kt @@ -14,7 +14,7 @@ data class MangaEntity( @ColumnInfo(name = "url") val url: String, @ColumnInfo(name = "public_url") val publicUrl: String, @ColumnInfo(name = "rating") val rating: Float, // normalized value [0..1] or -1 - @ColumnInfo(name = "nsfw") val isNsfw: Boolean, + @ColumnInfo(name = "nsfw") val isNsfw: Boolean, // TODO change to contentRating @ColumnInfo(name = "cover_url") val coverUrl: String, @ColumnInfo(name = "large_cover_url") val largeCoverUrl: String?, @ColumnInfo(name = "state") val state: String?, diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/parser/external/ExternalPluginContentSource.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/parser/external/ExternalPluginContentSource.kt index a0ca968e2..f59514e90 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/parser/external/ExternalPluginContentSource.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/parser/external/ExternalPluginContentSource.kt @@ -82,7 +82,7 @@ class ExternalPluginContentSource( publicUrl = details.publicUrl.ifEmpty { manga.publicUrl }, rating = maxOf(details.rating, manga.rating), isNsfw = details.isNsfw, - coverUrl = details.coverUrl.ifEmpty { manga.coverUrl }, + coverUrl = details.coverUrl.ifNullOrEmpty { manga.coverUrl }, tags = details.tags + manga.tags, state = details.state ?: manga.state, author = details.author.ifNullOrEmpty { manga.author }, diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/util/ext/String.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/util/ext/String.kt index 3294e66fb..dfc16562e 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/util/ext/String.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/util/ext/String.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.util.ellipsize import org.koitharu.kotatsu.parsers.util.levenshteinDistance import java.util.UUID -inline fun C?.ifNullOrEmpty(defaultValue: () -> C): C { +inline fun C?.ifNullOrEmpty(defaultValue: () -> R): R { return if (this.isNullOrEmpty()) defaultValue() else this } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsActivity.kt index 09cf1fef3..5716d6e30 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsActivity.kt @@ -225,7 +225,7 @@ class DetailsActivity : R.id.imageView_cover -> { val manga = viewModel.manga.value ?: return router.openImage( - url = manga.largeCoverUrl.ifNullOrEmpty { manga.coverUrl }, + url = manga.largeCoverUrl.ifNullOrEmpty { manga.coverUrl } ?: return, source = manga.source, anchor = v, ) diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/download/ui/worker/DownloadWorker.kt b/app/src/main/kotlin/org/koitharu/kotatsu/download/ui/worker/DownloadWorker.kt index c21a07a75..bf6a38955 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/download/ui/worker/DownloadWorker.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/download/ui/worker/DownloadWorker.kt @@ -204,7 +204,7 @@ class DownloadWorker @AssistedInject constructor( format = task.format ?: settings.preferredDownloadFormat, ) val coverUrl = mangaDetails.largeCoverUrl.ifNullOrEmpty { mangaDetails.coverUrl } - if (coverUrl.isNotEmpty()) { + if (!coverUrl.isNullOrEmpty()) { downloadFile(coverUrl, destination, repo.source).let { file -> output.addCover(file, getMediaType(coverUrl, file)) file.deleteAwait() diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/adapter/MangaListItemAD.kt b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/adapter/MangaListItemAD.kt index 8bf9ea8d7..c8ff4a504 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/adapter/MangaListItemAD.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/adapter/MangaListItemAD.kt @@ -5,7 +5,6 @@ import androidx.lifecycle.LifecycleOwner import coil3.ImageLoader import coil3.request.allowRgb565 import coil3.request.transformations -import com.google.android.material.badge.BadgeDrawable import com.hannesdorfmann.adapterdelegates4.dsl.adapterDelegateViewBinding import org.koitharu.kotatsu.core.ui.image.TrimTransformation import org.koitharu.kotatsu.core.ui.list.AdapterDelegateClickListenerAdapter diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/model/MangaCompactListModel.kt b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/model/MangaCompactListModel.kt index fae6ccfb1..d7c122492 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/model/MangaCompactListModel.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/model/MangaCompactListModel.kt @@ -7,7 +7,7 @@ data class MangaCompactListModel( override val id: Long, override val title: String, val subtitle: String, - override val coverUrl: String, + override val coverUrl: String?, override val manga: Manga, override val counter: Int, override val progress: ReadingProgress?, diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/model/MangaDetailedListModel.kt b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/model/MangaDetailedListModel.kt index 8b6633788..ee83aa9b8 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/model/MangaDetailedListModel.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/model/MangaDetailedListModel.kt @@ -8,7 +8,7 @@ data class MangaDetailedListModel( override val id: Long, override val title: String, val subtitle: String?, - override val coverUrl: String, + override val coverUrl: String?, override val manga: Manga, override val counter: Int, override val progress: ReadingProgress?, diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/model/MangaGridModel.kt b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/model/MangaGridModel.kt index 244c3f7b7..52007c3b5 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/model/MangaGridModel.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/model/MangaGridModel.kt @@ -6,7 +6,7 @@ import org.koitharu.kotatsu.parsers.model.Manga data class MangaGridModel( override val id: Long, override val title: String, - override val coverUrl: String, + override val coverUrl: String?, override val manga: Manga, override val counter: Int, override val progress: ReadingProgress?, diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/model/MangaListModel.kt b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/model/MangaListModel.kt index 322bf0b6a..4afb11370 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/model/MangaListModel.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/model/MangaListModel.kt @@ -11,7 +11,7 @@ sealed class MangaListModel : ListModel { abstract val id: Long abstract val manga: Manga abstract val title: String - abstract val coverUrl: String + abstract val coverUrl: String? abstract val counter: Int abstract val isFavorite: Boolean abstract val progress: ReadingProgress? diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/preview/PreviewFragment.kt b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/preview/PreviewFragment.kt index 38aeb9465..5d57eec24 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/preview/PreviewFragment.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/list/ui/preview/PreviewFragment.kt @@ -82,7 +82,7 @@ class PreviewFragment : BaseFragment(), View.OnClickList ) R.id.imageView_cover -> router.openImage( - url = manga.largeCoverUrl.ifNullOrEmpty { manga.coverUrl }, + url = manga.largeCoverUrl.ifNullOrEmpty { manga.coverUrl } ?: return, source = manga.source, anchor = v, ) diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/local/data/input/LocalMangaParser.kt b/app/src/main/kotlin/org/koitharu/kotatsu/local/data/input/LocalMangaParser.kt index e4fd0115a..4030ce38e 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/local/data/input/LocalMangaParser.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/local/data/input/LocalMangaParser.kt @@ -34,7 +34,6 @@ import org.koitharu.kotatsu.local.domain.model.LocalManga import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaPage -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import org.koitharu.kotatsu.parsers.util.toFileNameSafe import java.io.File @@ -61,7 +60,7 @@ class LocalMangaParser(private val uri: Uri) { val mangaInfo = index?.getMangaInfo() if (mangaInfo != null) { val coverEntry: Path? = index.getCoverEntry()?.let { rootPath / it } ?: fileSystem.findFirstImage(rootPath) - mangaInfo.copyInternal( + mangaInfo.copy( source = LocalMangaSource, url = rootFile.toUri().toString(), coverUrl = coverEntry?.let { uri.child(it, resolve = true).toString() }.orEmpty(), @@ -72,7 +71,7 @@ class LocalMangaParser(private val uri: Uri) { if (path != null && !fileSystem.exists(rootPath / path)) { null } else { - c.copyInternal( + c.copy( url = path?.let { uri.child(it, resolve = false).toString() } ?: uri.toString(), @@ -271,44 +270,5 @@ class LocalMangaParser(private val uri: Uri) { private fun String.fileNameToTitle() = substringBeforeLast('.') .replace('_', ' ') .replaceFirstChar { it.uppercase() } - - private fun Manga.copyInternal( - url: String = this.url, - coverUrl: String = this.coverUrl, - largeCoverUrl: String? = this.largeCoverUrl, - chapters: List? = this.chapters, - source: MangaSource = this.source, - ): Manga = Manga( - id = id, - title = title, - altTitle = altTitle, - url = url, - publicUrl = publicUrl, - rating = rating, - isNsfw = isNsfw, - coverUrl = coverUrl, - tags = tags, - state = state, - author = author, - largeCoverUrl = largeCoverUrl, - description = description, - chapters = chapters, - source = source, - ) - - private fun MangaChapter.copyInternal( - url: String = this.url, - source: MangaSource = this.source, - ) = MangaChapter( - id = id, - name = name, - number = number, - volume = volume, - url = url, - scanlator = scanlator, - uploadDate = uploadDate, - branch = branch, - source = source, - ) } } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/ui/feed/model/FeedItem.kt b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/ui/feed/model/FeedItem.kt index bf9510a51..4aac9f87e 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/ui/feed/model/FeedItem.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/ui/feed/model/FeedItem.kt @@ -6,7 +6,7 @@ import org.koitharu.kotatsu.parsers.model.Manga data class FeedItem( val id: Long, - val imageUrl: String, + val imageUrl: String?, val title: String, val manga: Manga, val count: Int, diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 86ad9e5c6..311aa57d9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -31,7 +31,7 @@ material = "1.13.0-alpha09" moshi = "1.15.2" okhttp = "4.12.0" okio = "3.9.1" -parsers = "8ce6694232" +parsers = "6abcdd8d4b" preference = "1.2.1" recyclerview = "1.3.2" room = "2.6.1"