From 53f5ea7fe9e0a918a0970c88521ba978c0def012 Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+AntsyLich@users.noreply.github.com> Date: Tue, 30 Aug 2022 23:15:34 +0600 Subject: [PATCH] Rename source download folder on source rename (#7898) * Rename source download folder on source rename * Review Changes * Review Changes 2 --- .../data/download/DownloadManager.kt | 24 +++++++++++++++++++ .../kanade/tachiyomi/source/SourceManager.kt | 8 +++++++ 2 files changed, 32 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 4297a45465..e7ebc6e503 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 @@ -343,6 +343,30 @@ class DownloadManager( } } + /** + * Renames source download folder + * + * @param oldSource the old source. + * @param newSource the new source. + */ + fun renameSource(oldSource: Source, newSource: Source) { + val oldFolder = provider.findSourceDir(oldSource) ?: return + val newName = provider.getSourceDirName(newSource) + + val capitalizationChanged = oldFolder.name.equals(newName, ignoreCase = true) + if (capitalizationChanged) { + val tempName = newName + "_tmp" + if (oldFolder.renameTo(tempName).not()) { + logcat(LogPriority.ERROR) { "Could not rename source download folder: ${oldFolder.name}." } + return + } + } + + if (oldFolder.renameTo(newName).not()) { + logcat(LogPriority.ERROR) { "Could not rename source download folder: ${oldFolder.name}." } + } + } + /** * Renames an already downloaded chapter * diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt b/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt index 4828d9e72e..73f6970fd0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt @@ -4,6 +4,7 @@ import android.content.Context import eu.kanade.domain.source.model.SourceData import eu.kanade.domain.source.repository.SourceDataRepository import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.SChapter @@ -19,12 +20,14 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import rx.Observable +import uy.kohesive.injekt.injectLazy class SourceManager( private val context: Context, private val extensionManager: ExtensionManager, private val sourceRepository: SourceDataRepository, ) { + private val downloadManager: DownloadManager by injectLazy() private val scope = CoroutineScope(Job() + Dispatchers.IO) @@ -89,7 +92,12 @@ class SourceManager( private fun registerStubSource(sourceData: SourceData) { scope.launch { val (id, lang, name) = sourceData + val dbSourceData = sourceRepository.getSourceData(id) + if (dbSourceData == sourceData) return@launch sourceRepository.upsertSourceData(id, lang, name) + if (dbSourceData != null) { + downloadManager.renameSource(StubSource(dbSourceData), StubSource(sourceData)) + } } }