瀏覽代碼

Fix download not working on sd card (#8527)

Also create comicinfo file inside chapter folder instead of manga folder since it also contains some chapter specific data
AntsyLich 2 年之前
父節點
當前提交
51c964de3a
共有 1 個文件被更改,包括 14 次插入17 次删除
  1. 14 17
      app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt

+ 14 - 17
app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt

@@ -10,7 +10,6 @@ import eu.kanade.domain.manga.model.COMIC_INFO_FILE
 import eu.kanade.domain.manga.model.ComicInfo
 import eu.kanade.domain.manga.model.Manga
 import eu.kanade.domain.manga.model.getComicInfo
-import eu.kanade.domain.track.interactor.GetTracks
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.data.cache.ChapterCache
 import eu.kanade.tachiyomi.data.database.models.toDomainChapter
@@ -45,7 +44,6 @@ import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.io.BufferedOutputStream
 import java.io.File
-import java.io.FileOutputStream
 import java.util.zip.CRC32
 import java.util.zip.ZipEntry
 import java.util.zip.ZipOutputStream
@@ -71,7 +69,6 @@ class Downloader(
     private val sourceManager: SourceManager = Injekt.get(),
     private val chapterCache: ChapterCache = Injekt.get(),
     private val downloadPreferences: DownloadPreferences = Injekt.get(),
-    private val getTracks: GetTracks = Injekt.get(),
 ) {
 
     /**
@@ -527,6 +524,14 @@ class Downloader(
         // Ensure that the chapter folder has all the images.
         val downloadedImages = tmpDir.listFiles().orEmpty().filterNot { it.name!!.endsWith(".tmp") || (it.name!!.contains("__") && !it.name!!.contains("__001.jpg")) }
 
+        val chapterUrl = download.source.getChapterUrl(download.chapter)
+        createComicInfoFile(
+            tmpDir,
+            download.manga,
+            download.chapter.toDomainChapter()!!,
+            chapterUrl,
+        )
+
         download.status = if (downloadedImages.size == download.pages!!.size) {
             // Only rename the directory if it's downloaded.
             if (downloadPreferences.saveChaptersAsCBZ().get()) {
@@ -538,14 +543,6 @@ class Downloader(
 
             DiskUtil.createNoMediaFile(tmpDir, context)
 
-            val chapterUrl = download.source.getChapterUrl(download.chapter)
-            createComicInfoFile(
-                mangaDir,
-                download.manga,
-                download.chapter.toDomainChapter()!!,
-                chapterUrl,
-            )
-
             Download.State.DOWNLOADED
         } else {
             Download.State.ERROR
@@ -600,12 +597,12 @@ class Downloader(
         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, chapterUrl)
-            it.write(xml.encodeToString(ComicInfo.serializer(), comicInfo).toByteArray())
+        val comicInfo = getComicInfo(manga, chapter, chapterUrl)
+        val comicInfoString = xml.encodeToString(ComicInfo.serializer(), comicInfo)
+        // Remove the old file
+        dir.findFile(COMIC_INFO_FILE)?.delete()
+        dir.createFile(COMIC_INFO_FILE).openOutputStream().use {
+            it.write(comicInfoString.toByteArray())
         }
     }