Fix local source detail JSON files not being read if .noxml was created

Fixes #8549
This commit is contained in:
arkon 2022-12-04 14:00:23 -05:00
parent 4f5270cb7d
commit 4622b18c99

View File

@ -152,18 +152,33 @@ class LocalSource(
// Augment manga details based on metadata files // Augment manga details based on metadata files
try { try {
val mangaDirFiles = getMangaDirsFiles(manga.url, baseDirsFile).toList() val mangaDirFiles = getMangaDirsFiles(manga.url, baseDirsFile).toList()
val comicInfoFile = mangaDirFiles val comicInfoFile = mangaDirFiles
.firstOrNull { it.name == COMIC_INFO_FILE } .firstOrNull { it.name == COMIC_INFO_FILE }
val noXmlFile = mangaDirFiles val noXmlFile = mangaDirFiles
.firstOrNull { it.name == ".noxml" } .firstOrNull { it.name == ".noxml" }
if (comicInfoFile != null && noXmlFile != null) noXmlFile.delete() val legacyJsonDetailsFile = mangaDirFiles
.firstOrNull { it.extension == "json" }
when { when {
// Top level ComicInfo.xml // Top level ComicInfo.xml
comicInfoFile != null -> { comicInfoFile != null -> {
noXmlFile?.delete()
setMangaDetailsFromComicInfoFile(comicInfoFile.inputStream(), manga) setMangaDetailsFromComicInfoFile(comicInfoFile.inputStream(), manga)
} }
// TODO: automatically convert these to ComicInfo.xml
legacyJsonDetailsFile != null -> {
json.decodeFromStream<MangaDetails>(legacyJsonDetailsFile.inputStream()).run {
title?.let { manga.title = it }
author?.let { manga.author = it }
artist?.let { manga.artist = it }
description?.let { manga.description = it }
genre?.let { manga.genre = it.joinToString() }
status?.let { manga.status = it }
}
}
// Copy ComicInfo.xml from chapter archive to top level if found // Copy ComicInfo.xml from chapter archive to top level if found
noXmlFile == null -> { noXmlFile == null -> {
val chapterArchives = mangaDirFiles val chapterArchives = mangaDirFiles
@ -181,22 +196,6 @@ class LocalSource(
File("$folderPath/.noxml").createNewFile() File("$folderPath/.noxml").createNewFile()
} }
} }
// Fall back to legacy JSON details format
else -> {
mangaDirFiles
.firstOrNull { it.extension == "json" }
?.let { file ->
json.decodeFromStream<MangaDetails>(file.inputStream()).run {
title?.let { manga.title = it }
author?.let { manga.author = it }
artist?.let { manga.artist = it }
description?.let { manga.description = it }
genre?.let { manga.genre = it.joinToString() }
status?.let { manga.status = it }
}
}
}
} }
} catch (e: Throwable) { } catch (e: Throwable) {
logcat(LogPriority.ERROR, e) { "Error setting manga details from local metadata for ${manga.title}" } logcat(LogPriority.ERROR, e) { "Error setting manga details from local metadata for ${manga.title}" }