|
|
|
@ -8,7 +8,10 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
|
|
|
import com.google.android.material.snackbar.Snackbar
|
|
|
|
import com.google.android.material.snackbar.Snackbar
|
|
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
|
|
import kotlinx.coroutines.CancellationException
|
|
|
|
import kotlinx.coroutines.CancellationException
|
|
|
|
|
|
|
|
import kotlinx.coroutines.Dispatchers
|
|
|
|
import kotlinx.coroutines.launch
|
|
|
|
import kotlinx.coroutines.launch
|
|
|
|
|
|
|
|
import kotlinx.coroutines.runInterruptible
|
|
|
|
|
|
|
|
import okhttp3.Cache
|
|
|
|
import org.koitharu.kotatsu.R
|
|
|
|
import org.koitharu.kotatsu.R
|
|
|
|
import org.koitharu.kotatsu.core.network.cookies.MutableCookieJar
|
|
|
|
import org.koitharu.kotatsu.core.network.cookies.MutableCookieJar
|
|
|
|
import org.koitharu.kotatsu.core.os.ShortcutsUpdater
|
|
|
|
import org.koitharu.kotatsu.core.os.ShortcutsUpdater
|
|
|
|
@ -39,6 +42,9 @@ class HistorySettingsFragment : BasePreferenceFragment(R.string.history_and_cach
|
|
|
|
@Inject
|
|
|
|
@Inject
|
|
|
|
lateinit var cookieJar: MutableCookieJar
|
|
|
|
lateinit var cookieJar: MutableCookieJar
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Inject
|
|
|
|
|
|
|
|
lateinit var cache: Cache
|
|
|
|
|
|
|
|
|
|
|
|
@Inject
|
|
|
|
@Inject
|
|
|
|
lateinit var shortcutsUpdater: ShortcutsUpdater
|
|
|
|
lateinit var shortcutsUpdater: ShortcutsUpdater
|
|
|
|
|
|
|
|
|
|
|
|
@ -52,6 +58,7 @@ class HistorySettingsFragment : BasePreferenceFragment(R.string.history_and_cach
|
|
|
|
super.onViewCreated(view, savedInstanceState)
|
|
|
|
super.onViewCreated(view, savedInstanceState)
|
|
|
|
findPreference<Preference>(AppSettings.KEY_PAGES_CACHE_CLEAR)?.bindSummaryToCacheSize(CacheDir.PAGES)
|
|
|
|
findPreference<Preference>(AppSettings.KEY_PAGES_CACHE_CLEAR)?.bindSummaryToCacheSize(CacheDir.PAGES)
|
|
|
|
findPreference<Preference>(AppSettings.KEY_THUMBS_CACHE_CLEAR)?.bindSummaryToCacheSize(CacheDir.THUMBS)
|
|
|
|
findPreference<Preference>(AppSettings.KEY_THUMBS_CACHE_CLEAR)?.bindSummaryToCacheSize(CacheDir.THUMBS)
|
|
|
|
|
|
|
|
findPreference<Preference>(AppSettings.KEY_HTTP_CACHE_CLEAR)?.bindSummaryToHttpCacheSize()
|
|
|
|
findPreference<Preference>(AppSettings.KEY_SEARCH_HISTORY_CLEAR)?.let { pref ->
|
|
|
|
findPreference<Preference>(AppSettings.KEY_SEARCH_HISTORY_CLEAR)?.let { pref ->
|
|
|
|
viewLifecycleScope.launch {
|
|
|
|
viewLifecycleScope.launch {
|
|
|
|
lifecycle.awaitStateAtLeast(Lifecycle.State.RESUMED)
|
|
|
|
lifecycle.awaitStateAtLeast(Lifecycle.State.RESUMED)
|
|
|
|
@ -90,6 +97,11 @@ class HistorySettingsFragment : BasePreferenceFragment(R.string.history_and_cach
|
|
|
|
true
|
|
|
|
true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AppSettings.KEY_HTTP_CACHE_CLEAR -> {
|
|
|
|
|
|
|
|
clearHttpCache()
|
|
|
|
|
|
|
|
true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
AppSettings.KEY_UPDATES_FEED_CLEAR -> {
|
|
|
|
AppSettings.KEY_UPDATES_FEED_CLEAR -> {
|
|
|
|
viewLifecycleScope.launch {
|
|
|
|
viewLifecycleScope.launch {
|
|
|
|
trackerRepo.clearLogs()
|
|
|
|
trackerRepo.clearLogs()
|
|
|
|
@ -131,6 +143,32 @@ class HistorySettingsFragment : BasePreferenceFragment(R.string.history_and_cach
|
|
|
|
summary = FileSize.BYTES.format(context, size)
|
|
|
|
summary = FileSize.BYTES.format(context, size)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private fun Preference.bindSummaryToHttpCacheSize() = viewLifecycleScope.launch {
|
|
|
|
|
|
|
|
val size = runInterruptible(Dispatchers.IO) { cache.size() }
|
|
|
|
|
|
|
|
summary = FileSize.BYTES.format(context, size)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private fun clearHttpCache() {
|
|
|
|
|
|
|
|
val preference = findPreference<Preference>(AppSettings.KEY_HTTP_CACHE_CLEAR) ?: return
|
|
|
|
|
|
|
|
val ctx = preference.context.applicationContext
|
|
|
|
|
|
|
|
viewLifecycleScope.launch {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
preference.isEnabled = false
|
|
|
|
|
|
|
|
val size = runInterruptible(Dispatchers.IO) {
|
|
|
|
|
|
|
|
cache.evictAll()
|
|
|
|
|
|
|
|
cache.size()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
preference.summary = FileSize.BYTES.format(ctx, size)
|
|
|
|
|
|
|
|
} catch (e: CancellationException) {
|
|
|
|
|
|
|
|
throw e
|
|
|
|
|
|
|
|
} catch (e: Exception) {
|
|
|
|
|
|
|
|
preference.summary = e.getDisplayMessage(ctx.resources)
|
|
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
|
|
preference.isEnabled = true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private fun clearSearchHistory(preference: Preference) {
|
|
|
|
private fun clearSearchHistory(preference: Preference) {
|
|
|
|
MaterialAlertDialogBuilder(context ?: return)
|
|
|
|
MaterialAlertDialogBuilder(context ?: return)
|
|
|
|
.setTitle(R.string.clear_search_history)
|
|
|
|
.setTitle(R.string.clear_search_history)
|
|
|
|
|