From 0fccbbc0ca28c8a026a9dbf595cd59110c492ed9 Mon Sep 17 00:00:00 2001 From: Chris Allan Date: Wed, 20 May 2020 19:42:30 -0700 Subject: [PATCH] Rename downloaded chapters (#3216) --- .../data/download/DownloadManager.kt | 23 +++++++++++++++++++ .../util/chapter/ChapterSourceSync.kt | 8 +++++++ 2 files changed, 31 insertions(+) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt index 4593671ef4..e21c8bf9d9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt +++ b/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) + } + } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterSourceSync.kt b/app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterSourceSync.kt index 973398bcca..34aca30de1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterSourceSync.kt +++ b/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