mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-11-14 04:35:05 +01:00
Option to delete old cached covers
This commit is contained in:
parent
892edd2b92
commit
50405887d2
@ -1,7 +1,18 @@
|
|||||||
package eu.kanade.tachiyomi.data.cache
|
package eu.kanade.tachiyomi.data.cache
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.text.format.Formatter
|
||||||
|
import eu.kanade.tachiyomi.R
|
||||||
|
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||||
import eu.kanade.tachiyomi.util.storage.DiskUtil
|
import eu.kanade.tachiyomi.util.storage.DiskUtil
|
||||||
|
import eu.kanade.tachiyomi.util.system.executeOnIO
|
||||||
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.GlobalScope
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
import uy.kohesive.injekt.Injekt
|
||||||
|
import uy.kohesive.injekt.api.get
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
@ -23,6 +34,34 @@ class CoverCache(private val context: Context) {
|
|||||||
private val cacheDir = context.getExternalFilesDir("covers")
|
private val cacheDir = context.getExternalFilesDir("covers")
|
||||||
?: File(context.filesDir, "covers").also { it.mkdirs() }
|
?: File(context.filesDir, "covers").also { it.mkdirs() }
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
val files = cacheDir.listFiles()?.iterator() ?: return@launch
|
||||||
|
while (files.hasNext()) {
|
||||||
|
val file = files.next()
|
||||||
|
if (file.name !in urls) {
|
||||||
|
deletedSize += file.length()
|
||||||
|
file.delete()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
context.toast(
|
||||||
|
context.getString(
|
||||||
|
R.string.deleted_, Formatter.formatFileSize(context, deletedSize)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the cover from cache.
|
* Returns the cover from cache.
|
||||||
*
|
*
|
||||||
|
@ -14,6 +14,7 @@ import androidx.preference.PreferenceScreen
|
|||||||
import com.afollestad.materialdialogs.MaterialDialog
|
import com.afollestad.materialdialogs.MaterialDialog
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.cache.ChapterCache
|
import eu.kanade.tachiyomi.data.cache.ChapterCache
|
||||||
|
import eu.kanade.tachiyomi.data.cache.CoverCache
|
||||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||||
import eu.kanade.tachiyomi.data.download.DownloadManager
|
import eu.kanade.tachiyomi.data.download.DownloadManager
|
||||||
import eu.kanade.tachiyomi.data.library.LibraryUpdateService
|
import eu.kanade.tachiyomi.data.library.LibraryUpdateService
|
||||||
@ -43,6 +44,8 @@ class SettingsAdvancedController : SettingsController() {
|
|||||||
|
|
||||||
private val db: DatabaseHelper by injectLazy()
|
private val db: DatabaseHelper by injectLazy()
|
||||||
|
|
||||||
|
private val coverCache: CoverCache by injectLazy()
|
||||||
|
|
||||||
@SuppressLint("BatteryLife")
|
@SuppressLint("BatteryLife")
|
||||||
override fun setupPreferenceScreen(screen: PreferenceScreen) = with(screen) {
|
override fun setupPreferenceScreen(screen: PreferenceScreen) = with(screen) {
|
||||||
titleRes = R.string.advanced
|
titleRes = R.string.advanced
|
||||||
@ -97,6 +100,17 @@ class SettingsAdvancedController : SettingsController() {
|
|||||||
|
|
||||||
onClick { cleanupDownloads() }
|
onClick { cleanupDownloads() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
preference {
|
||||||
|
titleRes = R.string.clean_up_cached_covers
|
||||||
|
|
||||||
|
summaryRes = R.string.delete_old_covers_in_library
|
||||||
|
|
||||||
|
onClick {
|
||||||
|
context.toast(R.string.starting_cleanup)
|
||||||
|
coverCache.deleteOldCovers()
|
||||||
|
}
|
||||||
|
}
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
val pm = context.getSystemService(Context.POWER_SERVICE) as? PowerManager?
|
val pm = context.getSystemService(Context.POWER_SERVICE) as? PowerManager?
|
||||||
if (pm != null) preference {
|
if (pm != null) preference {
|
||||||
|
@ -537,6 +537,9 @@
|
|||||||
<item quantity="one">Cleanup done. Removed %d folder</item>
|
<item quantity="one">Cleanup done. Removed %d folder</item>
|
||||||
<item quantity="other">Cleanup done. Removed %d folders</item>
|
<item quantity="other">Cleanup done. Removed %d folders</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
<string name="clean_up_cached_covers">Clean up cached covers</string>
|
||||||
|
<string name="delete_old_covers_in_library">Delete old and unused cached covers of
|
||||||
|
manga in your library that has been updated</string>
|
||||||
|
|
||||||
<!-- About section -->
|
<!-- About section -->
|
||||||
<string name="version">Version</string>
|
<string name="version">Version</string>
|
||||||
@ -653,6 +656,7 @@
|
|||||||
<string name="create">Create</string>
|
<string name="create">Create</string>
|
||||||
<string name="default_value">Default</string>
|
<string name="default_value">Default</string>
|
||||||
<string name="delete">Delete</string>
|
<string name="delete">Delete</string>
|
||||||
|
<string name="deleted_">Deleted: %1$s</string>
|
||||||
<string name="display">Display</string>
|
<string name="display">Display</string>
|
||||||
<string name="drag_handle">Drag handle</string>
|
<string name="drag_handle">Drag handle</string>
|
||||||
<string name="edit">Edit</string>
|
<string name="edit">Edit</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user