Removing Globalscope usage in CoverCache

This commit is contained in:
Jays2Kings 2021-09-18 12:58:30 -04:00
parent 7f0b58156d
commit bf746dd7fb
2 changed files with 39 additions and 34 deletions

View file

@ -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<DatabaseHelper>()
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<DatabaseHelper>()
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()
}
}

View file

@ -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 {