Reader cache + retry improvements
This commit is contained in:
parent
1fd105ac56
commit
2fd4204db8
@ -6,12 +6,16 @@ import com.github.salomonbrys.kotson.fromJson
|
|||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.jakewharton.disklrucache.DiskLruCache
|
import com.jakewharton.disklrucache.DiskLruCache
|
||||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||||
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
|
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
||||||
import eu.kanade.tachiyomi.source.model.Page
|
import eu.kanade.tachiyomi.source.model.Page
|
||||||
import eu.kanade.tachiyomi.util.DiskUtil
|
import eu.kanade.tachiyomi.util.DiskUtil
|
||||||
import eu.kanade.tachiyomi.util.saveTo
|
import eu.kanade.tachiyomi.util.saveTo
|
||||||
import okhttp3.Response
|
import okhttp3.Response
|
||||||
import okio.Okio
|
import okio.Okio
|
||||||
import rx.Observable
|
import rx.Observable
|
||||||
|
import uy.kohesive.injekt.Injekt
|
||||||
|
import uy.kohesive.injekt.api.get
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
@ -26,7 +30,6 @@ import java.io.IOException
|
|||||||
* @constructor creates an instance of the chapter cache.
|
* @constructor creates an instance of the chapter cache.
|
||||||
*/
|
*/
|
||||||
class ChapterCache(private val context: Context) {
|
class ChapterCache(private val context: Context) {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
/** Name of cache directory. */
|
/** Name of cache directory. */
|
||||||
const val PARAMETER_CACHE_DIRECTORY = "chapter_disk_cache"
|
const val PARAMETER_CACHE_DIRECTORY = "chapter_disk_cache"
|
||||||
@ -36,19 +39,27 @@ class ChapterCache(private val context: Context) {
|
|||||||
|
|
||||||
/** The number of values per cache entry. Must be positive. */
|
/** The number of values per cache entry. Must be positive. */
|
||||||
const val PARAMETER_VALUE_COUNT = 1
|
const val PARAMETER_VALUE_COUNT = 1
|
||||||
|
|
||||||
/** The maximum number of bytes this cache should use to store. */
|
|
||||||
const val PARAMETER_CACHE_SIZE = 75L * 1024 * 1024
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Google Json class used for parsing JSON files. */
|
/** Google Json class used for parsing JSON files. */
|
||||||
private val gson: Gson by injectLazy()
|
private val gson: Gson by injectLazy()
|
||||||
|
|
||||||
|
// --> EH
|
||||||
|
private val prefs: PreferencesHelper by injectLazy()
|
||||||
|
// <-- EH
|
||||||
|
|
||||||
/** Cache class used for cache management. */
|
/** Cache class used for cache management. */
|
||||||
private val diskCache = DiskLruCache.open(File(context.cacheDir, PARAMETER_CACHE_DIRECTORY),
|
// --> EH
|
||||||
PARAMETER_APP_VERSION,
|
private var diskCache = setupDiskCache(prefs.eh_cacheSize().getOrDefault().toLong())
|
||||||
PARAMETER_VALUE_COUNT,
|
init {
|
||||||
PARAMETER_CACHE_SIZE)
|
prefs.eh_cacheSize().asObservable().subscribe {
|
||||||
|
// Save old cache for destruction later
|
||||||
|
val oldCache = diskCache
|
||||||
|
diskCache = setupDiskCache(it.toLong())
|
||||||
|
oldCache.close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// <-- EH
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns directory of cache.
|
* Returns directory of cache.
|
||||||
@ -68,6 +79,16 @@ class ChapterCache(private val context: Context) {
|
|||||||
val readableSize: String
|
val readableSize: String
|
||||||
get() = Formatter.formatFileSize(context, realSize)
|
get() = Formatter.formatFileSize(context, realSize)
|
||||||
|
|
||||||
|
// --> EH
|
||||||
|
// Cache size is in MB
|
||||||
|
private fun setupDiskCache(cacheSize: Long): DiskLruCache {
|
||||||
|
return DiskLruCache.open(File(context.cacheDir, PARAMETER_CACHE_DIRECTORY),
|
||||||
|
PARAMETER_APP_VERSION,
|
||||||
|
PARAMETER_VALUE_COUNT,
|
||||||
|
cacheSize * 1024 * 1024)
|
||||||
|
}
|
||||||
|
// <-- EH
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove file from cache.
|
* Remove file from cache.
|
||||||
*
|
*
|
||||||
|
@ -174,4 +174,6 @@ object PreferenceKeys {
|
|||||||
const val eh_readerInstantRetry = "eh_reader_instant_retry"
|
const val eh_readerInstantRetry = "eh_reader_instant_retry"
|
||||||
|
|
||||||
const val eh_utilAutoscrollInterval = "eh_util_autoscroll_interval"
|
const val eh_utilAutoscrollInterval = "eh_util_autoscroll_interval"
|
||||||
|
|
||||||
|
const val eh_cacheSize = "eh_cache_size"
|
||||||
}
|
}
|
||||||
|
@ -245,4 +245,6 @@ class PreferencesHelper(val context: Context) {
|
|||||||
fun eh_readerInstantRetry() = rxPrefs.getBoolean(Keys.eh_readerInstantRetry, true)
|
fun eh_readerInstantRetry() = rxPrefs.getBoolean(Keys.eh_readerInstantRetry, true)
|
||||||
|
|
||||||
fun eh_utilAutoscrollInterval() = rxPrefs.getFloat(Keys.eh_utilAutoscrollInterval, 3f)
|
fun eh_utilAutoscrollInterval() = rxPrefs.getFloat(Keys.eh_utilAutoscrollInterval, 3f)
|
||||||
|
|
||||||
|
fun eh_cacheSize() = rxPrefs.getString(Keys.eh_utilAutoscrollInterval, "75")
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,7 @@ import android.view.animation.Animation
|
|||||||
import android.view.animation.AnimationUtils
|
import android.view.animation.AnimationUtils
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import com.afollestad.materialdialogs.MaterialDialog
|
import com.afollestad.materialdialogs.MaterialDialog
|
||||||
|
import com.hippo.unifile.UniFile
|
||||||
import com.jakewharton.rxbinding.view.clicks
|
import com.jakewharton.rxbinding.view.clicks
|
||||||
import com.jakewharton.rxbinding.widget.checkedChanges
|
import com.jakewharton.rxbinding.widget.checkedChanges
|
||||||
import com.jakewharton.rxbinding.widget.textChanges
|
import com.jakewharton.rxbinding.widget.textChanges
|
||||||
@ -206,11 +207,23 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>() {
|
|||||||
subscriptions += eh_retry_all.clicks().subscribe {
|
subscriptions += eh_retry_all.clicks().subscribe {
|
||||||
var retried = 0
|
var retried = 0
|
||||||
|
|
||||||
viewer?.pages?.forEachIndexed { index, page ->
|
viewer?.chapters
|
||||||
if(page.status == Page.ERROR)
|
?.flatMap { it.pages ?: emptyList() }
|
||||||
|
?.forEachIndexed { index, page ->
|
||||||
|
var shouldQueuePage = false
|
||||||
|
if(page.status == Page.ERROR) {
|
||||||
|
shouldQueuePage = true
|
||||||
|
} else if (page.uri == null) {
|
||||||
|
shouldQueuePage = true
|
||||||
|
} else if (!UniFile.fromUri(this, page.uri).exists()) {
|
||||||
|
shouldQueuePage = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if(shouldQueuePage) {
|
||||||
page.status = Page.QUEUE
|
page.status = Page.QUEUE
|
||||||
else
|
} else {
|
||||||
return@forEachIndexed
|
return@forEachIndexed
|
||||||
|
}
|
||||||
|
|
||||||
//If we are using EHentai/ExHentai, get a new image URL
|
//If we are using EHentai/ExHentai, get a new image URL
|
||||||
if(presenter.source is EHentai)
|
if(presenter.source is EHentai)
|
||||||
|
@ -34,7 +34,7 @@ abstract class BaseReader : Fragment() {
|
|||||||
/**
|
/**
|
||||||
* List of chapters added in the reader.
|
* List of chapters added in the reader.
|
||||||
*/
|
*/
|
||||||
private val chapters = ArrayList<ReaderChapter>()
|
val chapters = ArrayList<ReaderChapter>()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List of pages added in the reader. It can contain pages from more than one chapter.
|
* List of pages added in the reader. It can contain pages from more than one chapter.
|
||||||
|
@ -99,6 +99,48 @@ class SettingsReaderController : SettingsController() {
|
|||||||
summary = "Normally, pressing the retry button on a failed download will wait until the downloader has finished downloading the last page before beginning to re-download the failed page. Enabling this will force the downloader to begin re-downloading the failed page as soon as you press the retry button."
|
summary = "Normally, pressing the retry button on a failed download will wait until the downloader has finished downloading the last page before beginning to re-download the failed page. Enabling this will force the downloader to begin re-downloading the failed page as soon as you press the retry button."
|
||||||
defaultValue = true
|
defaultValue = true
|
||||||
}
|
}
|
||||||
|
listPreference {
|
||||||
|
key = Keys.eh_cacheSize
|
||||||
|
title = "Reader cache size"
|
||||||
|
entryValues = arrayOf(
|
||||||
|
"50",
|
||||||
|
"75",
|
||||||
|
"100",
|
||||||
|
"150",
|
||||||
|
"250",
|
||||||
|
"500",
|
||||||
|
"750",
|
||||||
|
"1000",
|
||||||
|
"1500",
|
||||||
|
"2000",
|
||||||
|
"2500",
|
||||||
|
"3000",
|
||||||
|
"3500",
|
||||||
|
"4000",
|
||||||
|
"4500",
|
||||||
|
"5000"
|
||||||
|
)
|
||||||
|
entries = arrayOf(
|
||||||
|
"50 MB",
|
||||||
|
"75 MB",
|
||||||
|
"100 MB",
|
||||||
|
"150 MB",
|
||||||
|
"250 MB",
|
||||||
|
"500 MB",
|
||||||
|
"750 MB",
|
||||||
|
"1 GB",
|
||||||
|
"1.5 GB",
|
||||||
|
"2 GB",
|
||||||
|
"2.5 GB",
|
||||||
|
"3 GB",
|
||||||
|
"3.5 GB",
|
||||||
|
"4 GB",
|
||||||
|
"4.5 GB",
|
||||||
|
"5 GB"
|
||||||
|
)
|
||||||
|
defaultValue = "75"
|
||||||
|
summary = "The amount of images to save on device while reading. Higher values will result in a smoother reading experience, at the cost of higher disk space usage"
|
||||||
|
}
|
||||||
preferenceCategory {
|
preferenceCategory {
|
||||||
titleRes = R.string.pager_viewer
|
titleRes = R.string.pager_viewer
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user