Fix downloading chapters with the same names

pull/355/head
Koitharu 3 years ago
parent 3fd6bec433
commit 78f417ebe1
No known key found for this signature in database
GPG Key ID: 8E861F8CE6E7CE27

@ -84,7 +84,7 @@ class MangaIndex(source: String?) {
fun getCoverEntry(): String? = json.getStringOrNull("cover_entry") fun getCoverEntry(): String? = json.getStringOrNull("cover_entry")
fun addChapter(chapter: MangaChapter) { fun addChapter(chapter: MangaChapter, filename: String?) {
val chapters = json.getJSONObject("chapters") val chapters = json.getJSONObject("chapters")
if (!chapters.has(chapter.id.toString())) { if (!chapters.has(chapter.id.toString())) {
val jo = JSONObject() val jo = JSONObject()
@ -95,6 +95,7 @@ class MangaIndex(source: String?) {
jo.put("scanlator", chapter.scanlator) jo.put("scanlator", chapter.scanlator)
jo.put("branch", chapter.branch) jo.put("branch", chapter.branch)
jo.put("entries", "%08d_%03d\\d{3}".format(chapter.branch.hashCode(), chapter.number)) jo.put("entries", "%08d_%03d\\d{3}".format(chapter.branch.hashCode(), chapter.number))
jo.put("file", filename)
chapters.put(chapter.id.toString(), jo) chapters.put(chapter.id.toString(), jo)
} }
} }
@ -103,6 +104,10 @@ class MangaIndex(source: String?) {
return json.getJSONObject("chapters").remove(id.toString()) != null return json.getJSONObject("chapters").remove(id.toString()) != null
} }
fun getChapterFileName(chapterId: Long): String? {
return json.optJSONObject("chapters")?.optJSONObject(chapterId.toString())?.getStringOrNull("file")
}
fun setCoverEntry(name: String) { fun setCoverEntry(name: String) {
json.put("cover_entry", name) json.put("cover_entry", name)
} }

@ -54,7 +54,7 @@ class LocalMangaDirOutput(
runInterruptible(Dispatchers.IO) { runInterruptible(Dispatchers.IO) {
output.put(name, file) output.put(name, file)
} }
index.addChapter(chapter) index.addChapter(chapter, chapterFileName(chapter))
} }
override suspend fun flushChapter(chapter: MangaChapter): Boolean { override suspend fun flushChapter(chapter: MangaChapter): Boolean {
@ -105,7 +105,18 @@ class LocalMangaDirOutput(
} }
private fun chapterFileName(chapter: MangaChapter): String { private fun chapterFileName(chapter: MangaChapter): String {
return "${chapter.number}_${chapter.name.toFileNameSafe()}".take(18) + ".cbz" index.getChapterFileName(chapter.id)?.let {
return it
}
val baseName = "${chapter.number}_${chapter.name.toFileNameSafe()}".take(18)
var i = 0
while (true) {
val name = (if (i == 0) baseName else baseName + "_$i") + ".cbz"
if (!File(rootFile, name).exists()) {
return name
}
i++
}
} }
private suspend fun flushIndex() = runInterruptible(Dispatchers.IO) { private suspend fun flushIndex() = runInterruptible(Dispatchers.IO) {

@ -57,7 +57,7 @@ class LocalMangaZipOutput(
runInterruptible(Dispatchers.IO) { runInterruptible(Dispatchers.IO) {
output.put(name, file) output.put(name, file)
} }
index.addChapter(chapter) index.addChapter(chapter, null)
} }
override suspend fun flushChapter(chapter: MangaChapter): Boolean = false override suspend fun flushChapter(chapter: MangaChapter): Boolean = false
@ -98,7 +98,7 @@ class LocalMangaZipOutput(
} }
otherIndex?.getMangaInfo()?.chapters?.let { chapters -> otherIndex?.getMangaInfo()?.chapters?.let { chapters ->
for (chapter in chapters) { for (chapter in chapters) {
index.addChapter(chapter) index.addChapter(chapter, null)
} }
} }
} }

Loading…
Cancel
Save