From bf746dd7fb4b003c99faf5f48dc9a2300da1d580 Mon Sep 17 00:00:00 2001 From: Jays2Kings Date: Sat, 18 Sep 2021 12:58:30 -0400 Subject: [PATCH] Removing Globalscope usage in CoverCache --- .../kanade/tachiyomi/data/cache/CoverCache.kt | 62 +++++++++---------- .../ui/setting/SettingsAdvancedController.kt | 11 +++- 2 files changed, 39 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/cache/CoverCache.kt b/app/src/main/java/eu/kanade/tachiyomi/data/cache/CoverCache.kt index c164394ed0..59abe94f67 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/cache/CoverCache.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/cache/CoverCache.kt @@ -11,6 +11,8 @@ import eu.kanade.tachiyomi.data.database.models.MangaImpl import eu.kanade.tachiyomi.util.storage.DiskUtil import eu.kanade.tachiyomi.util.system.executeOnIO import eu.kanade.tachiyomi.util.system.toast +import eu.kanade.tachiyomi.util.system.withIOContext +import eu.kanade.tachiyomi.util.system.withUIContext import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch @@ -66,42 +68,39 @@ class CoverCache(val context: Context) { return Formatter.formatFileSize(context, DiskUtil.getDirectorySize(onlineCoverDirectory)) } - fun deleteOldCovers() { - GlobalScope.launch(Dispatchers.Default) { - val db = Injekt.get() - var deletedSize = 0L - val urls = db.getLibraryMangas().executeOnIO().mapNotNull { - it.thumbnail_url?.let { url -> return@mapNotNull DiskUtil.hashKeyForDisk(url) } - null + suspend fun deleteOldCovers() { + val db = Injekt.get() + var deletedSize = 0L + val urls = db.getLibraryMangas().executeOnIO().mapNotNull { + it.thumbnail_url?.let { url -> return@mapNotNull DiskUtil.hashKeyForDisk(url) } + null + } + val files = cacheDir.listFiles()?.iterator() ?: return + while (files.hasNext()) { + val file = files.next() + if (file.isFile && file.name !in urls) { + deletedSize += file.length() + file.delete() } - val files = cacheDir.listFiles()?.iterator() ?: return@launch - while (files.hasNext()) { - val file = files.next() - if (file.isFile && file.name !in urls) { - deletedSize += file.length() - file.delete() - } - } - withContext(Dispatchers.Main) { - context.toast( - context.getString( - R.string.deleted_, - Formatter.formatFileSize(context, deletedSize) - ) + } + withUIContext { + context.toast( + context.getString( + R.string.deleted_, + Formatter.formatFileSize(context, deletedSize) ) - } + ) } } /** * Clear out all online covers */ - fun deleteAllCachedCovers() { - GlobalScope.launch(Dispatchers.IO) { + suspend fun deleteAllCachedCovers() { val directory = onlineCoverDirectory var deletedSize = 0L val files = - directory.listFiles()?.sortedBy { it.lastModified() }?.iterator() ?: return@launch + directory.listFiles()?.sortedBy { it.lastModified() }?.iterator() ?: return while (files.hasNext()) { val file = files.next() deletedSize += file.length() @@ -116,7 +115,6 @@ class CoverCache(val context: Context) { ) } context.imageLoader.memoryCache.clear() - } lastClean = System.currentTimeMillis() } @@ -124,18 +122,18 @@ class CoverCache(val context: Context) { /** * Clear out online covers until its under a certain size */ - fun deleteCachedCovers() { - if (lastClean + renewInterval < System.currentTimeMillis()) { - GlobalScope.launch(Dispatchers.IO) { + suspend fun deleteCachedCovers() { + withIOContext { + if (lastClean + renewInterval < System.currentTimeMillis()) { try { val directory = onlineCoverDirectory val size = DiskUtil.getDirectorySize(directory) if (size <= maxOnlineCacheSize) { - return@launch + return@withIOContext } var deletedSize = 0L val files = directory.listFiles()?.sortedBy { it.lastModified() }?.iterator() - ?: return@launch + ?: return@withIOContext while (files.hasNext()) { val file = files.next() deletedSize += file.length() @@ -147,8 +145,8 @@ class CoverCache(val context: Context) { } catch (e: Exception) { Timber.e(e) } + lastClean = System.currentTimeMillis() } - lastClean = System.currentTimeMillis() } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt index f12937065f..67b7129cca 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt @@ -8,7 +8,9 @@ import android.os.Bundle import android.os.PowerManager import android.provider.Settings import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity import androidx.core.net.toUri +import androidx.lifecycle.lifecycleScope import androidx.preference.PreferenceScreen import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.list.listItemsMultiChoice @@ -27,6 +29,7 @@ import eu.kanade.tachiyomi.network.PREF_DOH_GOOGLE import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.util.CrashLogUtil +import eu.kanade.tachiyomi.util.system.launchIO import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.view.openInBrowser @@ -131,7 +134,9 @@ class SettingsAdvancedController : SettingsController() { onClick { context.toast(R.string.starting_cleanup) - coverCache.deleteOldCovers() + (activity as? AppCompatActivity)?.lifecycleScope?.launchIO { + coverCache.deleteOldCovers() + } } } preference { @@ -144,7 +149,9 @@ class SettingsAdvancedController : SettingsController() { onClick { context.toast(R.string.starting_cleanup) - coverCache.deleteAllCachedCovers() + (activity as? AppCompatActivity)?.lifecycleScope?.launchIO { + coverCache.deleteAllCachedCovers() + } } } preference {