diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/MangaImpl.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/models/MangaImpl.kt index e5a331bfb3..d9a925ff2e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/MangaImpl.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/models/MangaImpl.kt @@ -1,6 +1,9 @@ package eu.kanade.tachiyomi.data.database.models +import eu.kanade.tachiyomi.data.download.DownloadProvider import eu.kanade.tachiyomi.source.model.SManga +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get open class MangaImpl : Manga { @@ -37,13 +40,15 @@ open class MangaImpl : Manga { override var hide_title: Boolean = false override fun copyFrom(other: SManga) { - if (other is MangaImpl && (other as MangaImpl)::title.isInitialized && !other.title - .isBlank()) { + if (other is MangaImpl && (other as MangaImpl)::title.isInitialized && + !other.title.isBlank() && other.title != originalTitle()) { + val oldTitle = originalTitle() title = if (currentTitle() != originalTitle()) { val customTitle = currentTitle() val trueTitle = other.title "${customTitle}${SManga.splitter}${trueTitle}" } else other.title + Injekt.get().renameMangaFolder(oldTitle, title, source) } super.copyFrom(other) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt index c54d8db8f9..38407d1a7e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt @@ -9,6 +9,7 @@ import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.getOrDefault import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceManager +import eu.kanade.tachiyomi.util.DiskUtil import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.util.concurrent.TimeUnit @@ -101,7 +102,9 @@ class DownloadCache( if (sourceDir != null) { val mangaDir = sourceDir.files[provider.getMangaDirName(manga)] if (mangaDir != null) { - return mangaDir.files.size + return mangaDir.files + .filter { !it.endsWith(Downloader.TMP_DIR_SUFFIX) } + .size } } return 0 @@ -227,6 +230,20 @@ class DownloadCache( } } + fun renameFolder(from: String, to: String, source: Long) { + val sourceDir = rootDir.files[source] ?: return + val list = sourceDir.files.toMutableMap() + val mangaFiles = sourceDir.files[DiskUtil.buildValidFilename(from)] ?: return + val newDir = MangaDirectory( + UniFile.fromUri( + context, Uri.parse(sourceDir.dir.filePath + "/" + DiskUtil.buildValidFilename(to)) + ) + ) + newDir.files = mangaFiles.files + list.remove(DiskUtil.buildValidFilename(from)) + list[to] = newDir + } + /** * Removes a manga that has been deleted from this cache. diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt index f62a765952..9163ed2fdc 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt @@ -132,6 +132,16 @@ class DownloadProvider(private val context: Context) { cache.renew() } + fun renameMangaFolder(from: String, to: String, sourceId: Long) { + val sourceManager by injectLazy() + val source = sourceManager.get(sourceId) ?: return + val sourceDir = findSourceDir(source) + val mangaDir = sourceDir?.findFile(DiskUtil.buildValidFilename(from)) + mangaDir?.renameTo(to) + val cache = DownloadCache(context, this, sourceManager) + cache.renameFolder(from, to, sourceId) + } + /** * Returns a list of all files in manga directory * diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt index f5ca6f5ec9..de16ea9e76 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt @@ -493,4 +493,8 @@ class Downloader( return queue.none { it.status <= Download.DOWNLOADING } } + companion object { + const val TMP_DIR_SUFFIX = "_tmp" + } + } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt index ef30e7e637..5cbc29e82e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt @@ -329,13 +329,20 @@ class LibraryUpdateService( .doOnCompleted { if (newUpdates.isNotEmpty()) { showResultNotification(newUpdates) - if (downloadNew && hasDownloads) { - DownloadService.start(this) - } + if (preferences.refreshCoversToo().getOrDefault()) { updateDetails(newUpdates.map { it.first }).observeOn(Schedulers.io()) + .doOnCompleted { + cancelProgressNotification() + if (downloadNew && hasDownloads) { + DownloadService.start(this) + } + } .subscribeOn(Schedulers.io()).subscribe {} } + else if (downloadNew && hasDownloads) { + DownloadService.start(this) + } } if (failedUpdates.isNotEmpty()) { @@ -391,7 +398,6 @@ class LibraryUpdateService( fun updateDetails(mangaToUpdate: List): Observable { // Initialize the variables holding the progress of the updates. val count = AtomicInteger(0) - val coverCache by injectLazy() // Emit each manga and update it sequentially. return Observable.from(mangaToUpdate) @@ -406,7 +412,6 @@ class LibraryUpdateService( .map { networkManga -> manga.copyFrom(networkManga) db.insertManga(manga).executeAsBlocking() - coverCache.deleteFromCache(manga.thumbnail_url) MangaImpl.setLastCoverFetch(manga.id!!, Date().time) manga } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoPresenter.kt index af04e0af73..48205897db 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoPresenter.kt @@ -95,7 +95,6 @@ class MangaInfoPresenter( manga.copyFrom(networkManga) manga.initialized = true db.insertManga(manga).executeAsBlocking() - coverCache.deleteFromCache(manga.thumbnail_url) MangaImpl.setLastCoverFetch(manga.id!!, Date().time) manga }