Update parsers and adjust fields nullability

This commit is contained in:
Koitharu
2025-01-13 19:54:10 +02:00
parent cc28293bed
commit 98dbc20cb0
15 changed files with 16 additions and 57 deletions

View File

@@ -22,7 +22,7 @@ fun Collection<TagEntity>.toMangaTags() = mapToSet(TagEntity::toMangaTag)
fun Collection<TagEntity>.toMangaTagsList() = map(TagEntity::toMangaTag)
fun MangaEntity.toManga(tags: Set<MangaTag>, chapters: List<ChapterEntity>?) = Manga(
fun MangaEntity.toManga(tags: Set<MangaTag>, chapters: List<ChapterEntity>?) = 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,

View File

@@ -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?,

View File

@@ -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 },

View File

@@ -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 : CharSequence?> C?.ifNullOrEmpty(defaultValue: () -> C): C {
inline fun <C : R, R : CharSequence?> C?.ifNullOrEmpty(defaultValue: () -> R): R {
return if (this.isNullOrEmpty()) defaultValue() else this
}

View File

@@ -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,
)

View File

@@ -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()

View File

@@ -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

View File

@@ -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?,

View File

@@ -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?,

View File

@@ -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?,

View File

@@ -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?

View File

@@ -82,7 +82,7 @@ class PreviewFragment : BaseFragment<FragmentPreviewBinding>(), 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,
)

View File

@@ -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<MangaChapter>? = 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,
)
}
}

View File

@@ -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,