Browse Source

Handle archives with nested directories properly

Closes #9389
arkon 1 year ago
parent
commit
20bec66a9d

+ 4 - 2
app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/RarPageLoader.kt

@@ -26,9 +26,11 @@ internal class RarPageLoader(file: File) : PageLoader() {
             rar.fileHeaders.asSequence()
                 .filterNot { it.isDirectory }
                 .forEach { header ->
-                    val pageFile = File(tmpDir, header.fileName).also { it.createNewFile() }
+                    val pageOutputStream = File(tmpDir, header.fileName.substringAfterLast("/"))
+                        .also { it.createNewFile() }
+                        .outputStream()
                     getStream(rar, header).use {
-                        it.copyTo(pageFile.outputStream())
+                        it.copyTo(pageOutputStream)
                     }
                 }
         }

+ 2 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ZipPageLoader.kt

@@ -24,7 +24,8 @@ internal class ZipPageLoader(file: File) : PageLoader() {
             generateSequence { zipInputStream.nextEntry }
                 .filterNot { it.isDirectory }
                 .forEach { entry ->
-                    File(tmpDir, entry.name).also { it.createNewFile() }
+                    File(tmpDir, entry.name.substringAfterLast("/"))
+                        .also { it.createNewFile() }
                         .outputStream().use { pageOutputStream ->
                             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                                 pageOutputStream.write(zipInputStream.readNBytes(entry.size.toInt()))