mirror of
https://github.com/mihonapp/mihon.git
synced 2025-11-02 07:08:55 +01:00
Add advanced option to always update manga title from source (#1182)
Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com>
This commit is contained in:
@@ -282,6 +282,41 @@ class DownloadCache(
|
||||
notifyChanges()
|
||||
}
|
||||
|
||||
/**
|
||||
* Renames a manga in this cache.
|
||||
*
|
||||
* @param manga the manga being renamed.
|
||||
* @param mangaUniFile the manga's new directory.
|
||||
* @param newTitle the manga's new title.
|
||||
*/
|
||||
suspend fun renameManga(manga: Manga, mangaUniFile: UniFile, newTitle: String) {
|
||||
rootDownloadsDirMutex.withLock {
|
||||
val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return
|
||||
val oldMangaDirName = provider.getMangaDirName(manga.title)
|
||||
var oldChapterDirs: MutableSet<String>? = null
|
||||
// Save the old name's cached chapter dirs
|
||||
if (sourceDir.mangaDirs.containsKey(oldMangaDirName)) {
|
||||
oldChapterDirs = sourceDir.mangaDirs[oldMangaDirName]?.chapterDirs
|
||||
sourceDir.mangaDirs -= oldMangaDirName
|
||||
}
|
||||
|
||||
// Retrieve/create the cached manga directory for new name
|
||||
val newMangaDirName = provider.getMangaDirName(newTitle)
|
||||
var mangaDir = sourceDir.mangaDirs[newMangaDirName]
|
||||
if (mangaDir == null) {
|
||||
mangaDir = MangaDirectory(mangaUniFile)
|
||||
sourceDir.mangaDirs += newMangaDirName to mangaDir
|
||||
}
|
||||
|
||||
// Add the old chapters to new name's cache
|
||||
if (!oldChapterDirs.isNullOrEmpty()) {
|
||||
mangaDir.chapterDirs += oldChapterDirs
|
||||
}
|
||||
}
|
||||
|
||||
notifyChanges()
|
||||
}
|
||||
|
||||
suspend fun removeSource(source: Source) {
|
||||
rootDownloadsDirMutex.withLock {
|
||||
rootDownloadsDir.sourceDirs -= source.id
|
||||
|
||||
@@ -327,6 +327,38 @@ class DownloadManager(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Renames manga download folder
|
||||
*
|
||||
* @param manga the manga
|
||||
* @param newTitle the new manga title.
|
||||
*/
|
||||
suspend fun renameManga(manga: Manga, newTitle: String) {
|
||||
val source = sourceManager.getOrStub(manga.source)
|
||||
val oldFolder = provider.findMangaDir(manga.title, source) ?: return
|
||||
val newName = provider.getMangaDirName(newTitle)
|
||||
|
||||
if (oldFolder.name == newName) return
|
||||
|
||||
// just to be safe, don't allow downloads for this manga while renaming it
|
||||
downloader.removeFromQueue(manga)
|
||||
|
||||
val capitalizationChanged = oldFolder.name.equals(newName, ignoreCase = true)
|
||||
if (capitalizationChanged) {
|
||||
val tempName = newName + Downloader.TMP_DIR_SUFFIX
|
||||
if (!oldFolder.renameTo(tempName)) {
|
||||
logcat(LogPriority.ERROR) { "Failed to rename manga download folder: ${oldFolder.name}" }
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if (oldFolder.renameTo(newName)) {
|
||||
cache.renameManga(manga, oldFolder, newTitle)
|
||||
} else {
|
||||
logcat(LogPriority.ERROR) { "Failed to rename manga download folder: ${oldFolder.name}" }
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Renames an already downloaded chapter
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user