Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package snd.komf.mediaserver.komga

import io.github.oshai.kotlinlogging.KotlinLogging
import io.ktor.http.parseUrl
import snd.komf.mediaserver.MediaServerClient
import snd.komf.util.toStingEncoded
import snd.komf.mediaserver.model.MediaServerAlternativeTitle
import snd.komf.mediaserver.model.MediaServerAuthor
import snd.komf.mediaserver.model.MediaServerBook
Expand Down Expand Up @@ -51,6 +53,19 @@ import snd.komga.client.series.KomgaSeriesThumbnail

private val logger = KotlinLogging.logger {}

private fun safeUrlOrNull(raw: String?): String? {
val trimmed = raw?.trim()
if (trimmed.isNullOrEmpty()) return null

return try {
val url = parseUrl(trimmed)
url.toStingEncoded()
} catch (e: Throwable) {
logger.warn("Dropping invalid URL from metadata: {}", trimmed, e)
null
}
}

class KomgaMediaServerClientAdapter(
private val komgaBookClient: KomgaBookClient,
private val komgaSeriesClient: KomgaSeriesClient,
Expand Down Expand Up @@ -398,8 +413,11 @@ class KomgaMediaServerClientAdapter(
language = patchIfNotNull(language),
genres = patchIfNotNull(genres),
tags = patchIfNotNull(tags),
totalBookCount = patchIfNotNull(totalBookCount),
links = patchIfNotNull(links?.map { KomgaWebLink(it.label, it.url) }),
// Komga rejects totalBookCount <= 0, so omit invalid values
totalBookCount = patchIfNotNull(totalBookCount?.takeIf { it > 0 }),
links = patchIfNotNull(links?.mapNotNull { link ->
safeUrlOrNull(link.url)?.let { KomgaWebLink(link.label, it) }
}),

statusLock = patchIfNotNull(statusLock),
titleLock = patchIfNotNull(titleLock),
Expand Down Expand Up @@ -447,7 +465,9 @@ class KomgaMediaServerClientAdapter(
authors = patchIfNotNull(authors?.map { KomgaAuthor(it.name, it.role) }),
tags = patchIfNotNull(tags),
isbn = patchIfNotNull(isbn),
links = patchIfNotNull(links?.map { KomgaWebLink(it.label, it.url) }),
links = patchIfNotNull(links?.mapNotNull { link ->
safeUrlOrNull(link.url)?.let { KomgaWebLink(link.label, it) }
}),

titleLock = patchIfNotNull(titleLock),
summaryLock = patchIfNotNull(summaryLock),
Expand Down