diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt index dc44fd2af..d81a0b9c2 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt @@ -155,6 +155,8 @@ object PreferenceKeys { const val eh_showSettingsUploadWarning = "eh_showSettingsUploadWarning1" + const val eh_hl_earlyRefresh = "eh_lh_early_refresh" + const val eh_hl_refreshFrequency = "eh_lh_refresh_frequency" const val eh_hl_lastRefresh = "eh_lh_last_refresh" diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt index 49a8516aa..c913aaff5 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt @@ -226,6 +226,8 @@ class PreferencesHelper(val context: Context) { fun eh_showSettingsUploadWarning() = rxPrefs.getBoolean(Keys.eh_showSettingsUploadWarning, true) // Default is 24h, refresh daily + fun eh_hl_earlyRefresh() = rxPrefs.getBoolean(Keys.eh_hl_earlyRefresh, false) + fun eh_hl_refreshFrequency() = rxPrefs.getString(Keys.eh_hl_refreshFrequency, "24") fun eh_hl_lastRefresh() = rxPrefs.getLong(Keys.eh_hl_lastRefresh, 0L) diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/Hitomi.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/Hitomi.kt index ebbebeb5b..e272d4129 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/Hitomi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/Hitomi.kt @@ -249,7 +249,7 @@ class Hitomi(private val context: Context) override fun imageUrlParse(response: Response) = throw UnsupportedOperationException("Unused method called!") - override val name = "hitomi.la" + override val name = "hitomi.la (very slow search)" override val baseUrl = BASE_URL @@ -519,7 +519,7 @@ class Hitomi(private val context: Context) .findFirst()?.let { realm.copyFromRealm(it) } } - private fun ensureCacheLoaded(blocking: Boolean = true): Observable { + fun ensureCacheLoaded(blocking: Boolean = true): Observable { return Observable.fromCallable { if(prefs.eh_hl_lastRealmIndex().getOrDefault() >= 0) { return@fromCallable Any() } @@ -651,6 +651,29 @@ class Hitomi(private val context: Context) .deleteRealmIfMigrationNeeded() .build() + fun forceEnsureCacheLoaded(): Boolean { + // Lock all caches + if(!cacheLocks[0].tryLock() || !cacheLocks[1].tryLock()) { + if(cacheLocks[0].isHeldByCurrentThread) + cacheLocks[0].unlock() + if(cacheLocks[1].isHeldByCurrentThread) + cacheLocks[1].unlock() + + return false + } + + try { + prefs.eh_hl_lastRealmIndex().set(-1) + prefs.eh_hl_lastRefresh().set(0) + ensureCacheLoaded(false).subscribeOn(Schedulers.computation()).subscribe() + } finally { + cacheLocks[0].unlock() + cacheLocks[1].unlock() + } + + return true + } + companion object { private val PAGE_SIZE = 25 private val CHAR_MALE = "♂" diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt index 9759ce44f..6ea4e08b3 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt @@ -15,7 +15,6 @@ import android.support.v7.graphics.drawable.DrawerArrowDrawable import android.support.v7.widget.Toolbar import android.view.ViewGroup import com.bluelinelabs.conductor.* -import com.jakewharton.rxbinding.support.v7.widget.navigationClicks import eu.kanade.tachiyomi.Migrations import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.preference.PreferencesHelper @@ -41,11 +40,15 @@ import exh.ui.migration.MetadataFetchDialog import exh.util.defRealm import kotlinx.android.synthetic.main.main_activity.* import uy.kohesive.injekt.injectLazy -import android.view.View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION import android.text.TextUtils import android.view.View -import com.jakewharton.rxbinding.view.longClicks +import eu.kanade.tachiyomi.source.SourceManager +import eu.kanade.tachiyomi.source.online.all.Hitomi import eu.kanade.tachiyomi.util.vibrate +import exh.HITOMI_SOURCE_ID +import rx.schedulers.Schedulers +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get class MainActivity : BaseActivity() { @@ -170,6 +173,14 @@ class MainActivity : BaseActivity() { notifyLockSecurity(this) } } + + // Early hitomi.la refresh + if(preferences.eh_hl_earlyRefresh().getOrDefault()) { + (Injekt.get().get(HITOMI_SOURCE_ID) as Hitomi) + .ensureCacheLoaded(false) + .subscribeOn(Schedulers.computation()) + .subscribe() + } // <-- EH syncActivityViewWithController(router.backstack.lastOrNull()?.controller()) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsHlController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsHlController.kt new file mode 100755 index 000000000..dad6c1d19 --- /dev/null +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsHlController.kt @@ -0,0 +1,58 @@ +package eu.kanade.tachiyomi.ui.setting + +import android.support.v7.preference.PreferenceScreen +import android.widget.Toast +import eu.kanade.tachiyomi.data.preference.PreferenceKeys +import eu.kanade.tachiyomi.source.SourceManager +import eu.kanade.tachiyomi.source.online.all.Hitomi +import eu.kanade.tachiyomi.util.toast +import exh.HITOMI_SOURCE_ID +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get + +/** + * hitomi.la Settings fragment + */ + +class SettingsHlController : SettingsController() { + override fun setupPreferenceScreen(screen: PreferenceScreen) = with(screen) { + title = "hitomi.la" + + editTextPreference { + title = "Search database refresh frequency" + summary = "How often to get new entries for the search database in hours. Setting this frequency too high may cause high CPU usage and network usage." + key = PreferenceKeys.eh_hl_refreshFrequency + defaultValue = "24" + + onChange { + it as String + + if((it.toLongOrNull() ?: -1) <= 0) { + context.toast("Invalid frequency. Frequency must be a positive whole number.") + false + } else true + } + } + + switchPreference { + title = "Begin refreshing search database on app launch" + summary = "Normally the search database gets refreshed (if required) when you open the hitomi.la catalogue. If you enable this option, the database gets refreshed in the background as soon as you open the app. It will result in higher data usage but may increase hitomi.la search speeds." + key = PreferenceKeys.eh_hl_earlyRefresh + defaultValue = false + } + + preference { + title = "Force refresh search database now" + summary = "Delete the local copy of the hitomi.la search database and download the new database now. Hitomi.la searching will not working in the ~10mins that it takes to refresh the search database" + isPersistent = false + + onClick { + context.toast(if((Injekt.get().get(HITOMI_SOURCE_ID) as Hitomi).forceEnsureCacheLoaded()) { + "Refreshing database. You will NOT be notified when it is complete!" + } else { + "Could not begin refresh process as there is already one ongoing!" + }, Toast.LENGTH_LONG) + } + } + } +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsMainController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsMainController.kt index 6993ce001..b3ea86b8d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsMainController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsMainController.kt @@ -53,6 +53,12 @@ class SettingsMainController : SettingsController() { titleRes = R.string.pref_category_nh onClick { navigateTo(SettingsNhController()) } } + preference { + iconRes = R.drawable.eh_ic_hllogo + iconTint = tintColor + titleRes = R.string.pref_category_hl + onClick { navigateTo(SettingsHlController()) } + } preference { iconRes = R.drawable.ic_code_black_24dp iconTint = tintColor diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsNhController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsNhController.kt index 62e184db6..856dfede6 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsNhController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsNhController.kt @@ -4,7 +4,7 @@ import android.support.v7.preference.PreferenceScreen import eu.kanade.tachiyomi.data.preference.PreferenceKeys /** - * EH Settings fragment + * nhentai Settings fragment */ class SettingsNhController : SettingsController() { diff --git a/app/src/main/res/drawable/eh_ic_hllogo.xml b/app/src/main/res/drawable/eh_ic_hllogo.xml new file mode 100644 index 000000000..840be3bc3 --- /dev/null +++ b/app/src/main/res/drawable/eh_ic_hllogo.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b47bf7feb..22865285e 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -500,5 +500,6 @@ Login E-Hentai nhentai + hitomi.la