diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/download/ui/worker/DownloadWorker.kt b/app/src/main/kotlin/org/koitharu/kotatsu/download/ui/worker/DownloadWorker.kt index 72825f174..64b5ef7de 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/download/ui/worker/DownloadWorker.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/download/ui/worker/DownloadWorker.kt @@ -66,6 +66,7 @@ import org.koitharu.kotatsu.download.domain.DownloadState import org.koitharu.kotatsu.local.data.LocalMangaRepository import org.koitharu.kotatsu.local.data.LocalStorageChanges import org.koitharu.kotatsu.local.data.PagesCache +import org.koitharu.kotatsu.local.data.TempFileFilter import org.koitharu.kotatsu.local.data.input.LocalMangaInput import org.koitharu.kotatsu.local.data.output.LocalMangaOutput import org.koitharu.kotatsu.local.domain.model.LocalManga @@ -173,7 +174,6 @@ class DownloadWorker @AssistedInject constructor( ) val destination = localMangaRepository.getOutputDir(manga) checkNotNull(destination) { applicationContext.getString(R.string.cannot_find_available_storage) } - val tempFileName = "${manga.id}_$id.tmp" var output: LocalMangaOutput? = null try { if (manga.source == MangaSource.LOCAL) { @@ -185,8 +185,9 @@ class DownloadWorker @AssistedInject constructor( output = LocalMangaOutput.getOrCreate(destination, mangaDetails) val coverUrl = mangaDetails.largeCoverUrl.ifNullOrEmpty { mangaDetails.coverUrl } if (coverUrl.isNotEmpty()) { - downloadFile(coverUrl, destination, tempFileName, repo.source).let { file -> + downloadFile(coverUrl, destination, repo.source).let { file -> output.addCover(file, MimeTypeMap.getFileExtensionFromUrl(coverUrl)) + file.deleteAwait() } } val chapters = getChapters(mangaDetails, includedIds) @@ -209,13 +210,16 @@ class DownloadWorker @AssistedInject constructor( runFailsafe { val url = repo.getPageUrl(page) val file = cache.get(url) - ?: downloadFile(url, destination, tempFileName, repo.source) + ?: downloadFile(url, destination, repo.source) output.addPage( chapter = chapter, file = file, pageNumber = pageIndex, ext = MimeTypeMap.getFileExtensionFromUrl(url), ) + if (file.extension == "tmp") { + file.deleteAwait() + } } send(pageIndex) } @@ -256,7 +260,9 @@ class DownloadWorker @AssistedInject constructor( applicationContext.unregisterReceiver(pausingReceiver) output?.closeQuietly() output?.cleanup() - File(destination, tempFileName).deleteAwait() + destination.listFiles(TempFileFilter())?.forEach { + it.deleteAwait() + } } } } @@ -318,7 +324,6 @@ class DownloadWorker @AssistedInject constructor( private suspend fun downloadFile( url: String, destination: File, - tempFileName: String, source: MangaSource, ): File { val request = Request.Builder() @@ -330,7 +335,7 @@ class DownloadWorker @AssistedInject constructor( .build() slowdownDispatcher.delay(source) val call = okHttp.newCall(request) - val file = File(destination, tempFileName) + val file = File(destination, UUID.randomUUID().toString() + ".tmp") try { val response = call.clone().await() checkNotNull(response.body).use { body -> diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/local/data/TempFileFilter.kt b/app/src/main/kotlin/org/koitharu/kotatsu/local/data/TempFileFilter.kt index abd269f15..1df7760aa 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/local/data/TempFileFilter.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/local/data/TempFileFilter.kt @@ -2,13 +2,8 @@ package org.koitharu.kotatsu.local.data import java.io.File import java.io.FileFilter -import java.io.FilenameFilter -class TempFileFilter : FilenameFilter, FileFilter { - - override fun accept(dir: File, name: String): Boolean { - return name.endsWith(".tmp", ignoreCase = true) - } +class TempFileFilter : FileFilter { override fun accept(file: File): Boolean { return file.name.endsWith(".tmp", ignoreCase = true)