瀏覽代碼

Rename downloaded chapters (#3216)

Chris Allan 4 年之前
父節點
當前提交
0fccbbc0ca

+ 23 - 0
app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt

@@ -11,6 +11,7 @@ import eu.kanade.tachiyomi.source.Source
 import eu.kanade.tachiyomi.source.SourceManager
 import eu.kanade.tachiyomi.source.model.Page
 import rx.Observable
+import timber.log.Timber
 import uy.kohesive.injekt.injectLazy
 
 /**
@@ -239,4 +240,26 @@ class DownloadManager(private val context: Context) {
             deleteChapters(chapters, manga, source)
         }
     }
+
+    /**
+     * Renames an already downloaded chapter
+     *
+     * @param source the source of the manga.
+     * @param manga the manga of the chapter.
+     * @param oldChapter the existing chapter with the old name.
+     * @param newChapter the target chapter with the new name.
+     */
+    fun renameChapter(source: Source, manga: Manga, oldChapter: Chapter, newChapter: Chapter) {
+        val oldName = provider.getChapterDirName(oldChapter)
+        val newName = provider.getChapterDirName(newChapter)
+        val mangaDir = provider.getMangaDir(manga, source)
+
+        val oldFolder = mangaDir.findFile(oldName)
+        if (oldFolder?.renameTo(newName) == true) {
+            cache.removeChapter(oldChapter, manga)
+            cache.addChapter(newName, mangaDir, manga)
+        } else {
+            Timber.e("Could not rename downloaded chapter: %s.", oldName)
+        }
+    }
 }

+ 8 - 0
app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterSourceSync.kt

@@ -3,11 +3,14 @@ package eu.kanade.tachiyomi.util.chapter
 import eu.kanade.tachiyomi.data.database.DatabaseHelper
 import eu.kanade.tachiyomi.data.database.models.Chapter
 import eu.kanade.tachiyomi.data.database.models.Manga
+import eu.kanade.tachiyomi.data.download.DownloadManager
 import eu.kanade.tachiyomi.source.Source
 import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.online.HttpSource
 import java.util.Date
 import java.util.TreeSet
+import uy.kohesive.injekt.Injekt
+import uy.kohesive.injekt.api.get
 
 /**
  * Helper method for syncing the list of chapters from the source with the ones from the database.
@@ -28,6 +31,8 @@ fun syncChaptersWithSource(
         throw Exception("No chapters found")
     }
 
+    val downloadManager: DownloadManager = Injekt.get()
+
     // Chapters from db.
     val dbChapters = db.getChapters(manga).executeAsBlocking()
 
@@ -60,6 +65,9 @@ fun syncChaptersWithSource(
             ChapterRecognition.parseChapterNumber(sourceChapter, manga)
 
             if (shouldUpdateDbChapter(dbChapter, sourceChapter)) {
+                if (dbChapter.name != sourceChapter.name && downloadManager.isChapterDownloaded(dbChapter, manga)) {
+                    downloadManager.renameChapter(source, manga, dbChapter, sourceChapter)
+                }
                 dbChapter.scanlator = sourceChapter.scanlator
                 dbChapter.name = sourceChapter.name
                 dbChapter.date_upload = sourceChapter.date_upload