Resolve proper chapter URL for ComicInfo "Web" field

Requires extensions to be updated to lib 1.4 to have proper URLs for some of them, which will
happen soon in the future.
This commit is contained in:
arkon 2022-11-12 09:54:24 -05:00
parent bdf035d60a
commit 262f8449b4
2 changed files with 15 additions and 6 deletions

View file

@ -12,11 +12,11 @@ const val COMIC_INFO_FILE = "ComicInfo.xml"
/**
* Creates a ComicInfo instance based on the manga and chapter metadata.
*/
fun getComicInfo(manga: Manga, chapter: Chapter): ComicInfo {
fun getComicInfo(manga: Manga, chapter: Chapter, chapterUrl: String): ComicInfo {
return ComicInfo(
title = ComicInfo.Title(chapter.name),
series = ComicInfo.Series(manga.title),
web = ComicInfo.Web(manga.url),
web = ComicInfo.Web(chapterUrl),
summary = manga.description?.let { ComicInfo.Summary(it) },
writer = manga.author?.let { ComicInfo.Writer(it) },
penciller = manga.artist?.let { ComicInfo.Penciller(it) },

View file

@ -537,7 +537,14 @@ class Downloader(
cache.addChapter(dirname, mangaDir, download.manga)
DiskUtil.createNoMediaFile(tmpDir, context)
createComicInfoFile(mangaDir, download.manga, download.chapter.toDomainChapter()!!)
val chapterUrl = download.source.getChapterUrl(download.chapter)
createComicInfoFile(
mangaDir,
download.manga,
download.chapter.toDomainChapter()!!,
chapterUrl,
)
Download.State.DOWNLOADED
} else {
@ -583,19 +590,21 @@ class Downloader(
* Creates a ComicInfo.xml file inside the given directory.
*
* @param dir the directory in which the ComicInfo file will be generated.
* @param manga the manga of the chapter to download.
* @param chapter the chapter to download
* @param manga the manga.
* @param chapter the chapter.
* @param chapterUrl the resolved URL for the chapter.
*/
private fun createComicInfoFile(
dir: UniFile,
manga: Manga,
chapter: Chapter,
chapterUrl: String,
) {
File("${dir.filePath}/$COMIC_INFO_FILE").outputStream().also {
// Force overwrite old file
(it as? FileOutputStream)?.channel?.truncate(0)
}.use {
val comicInfo = getComicInfo(manga, chapter)
val comicInfo = getComicInfo(manga, chapter, chapterUrl)
it.write(xml.encodeToString(ComicInfo.serializer(), comicInfo).toByteArray())
}
}