Upgrade logging, now maps timber to XLog, new logging functions

This commit is contained in:
Jobobby04
2021-03-07 00:23:23 -05:00
parent 9457b832fc
commit 7e91ae02f1
31 changed files with 226 additions and 112 deletions
+5 -6
View File
@@ -1,7 +1,6 @@
package exh
import android.content.Context
import com.elvishew.xlog.XLog
import com.pushtorefresh.storio.sqlite.queries.Query
import com.pushtorefresh.storio.sqlite.queries.RawQuery
import eu.kanade.tachiyomi.BuildConfig
@@ -24,6 +23,8 @@ import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.all.Hitomi
import eu.kanade.tachiyomi.source.online.all.NHentai
import exh.log.xLogE
import exh.log.xLogW
import exh.merged.sql.models.MergedMangaReference
import exh.source.BlacklistedSources
import exh.source.EH_SOURCE_ID
@@ -48,8 +49,6 @@ object EXHMigrations {
private val db: DatabaseHelper by injectLazy()
private val sourceManager: SourceManager by injectLazy()
private val logger by lazy { XLog.tag("EXHMigrations") }
/**
* Performs a migration when the application is updated.
*
@@ -272,14 +271,14 @@ object EXHMigrations {
// if (oldVersion < 1) { } (1 is current release version)
// do stuff here when releasing changed crap
// TODO BE CAREFUL TO NOT FUCK UP MergedSources IF CHANGING URLs
// TODO BE CAREFUL TO NOT FUCK UP MergedSources IF CHANGING URLsxdcsv
preferences.ehLastVersionCode().set(BuildConfig.VERSION_CODE)
return true
}
} catch (e: Exception) {
logger.e("Failed to migrate app from $oldVersion -> ${BuildConfig.VERSION_CODE}!", e)
xLogE("Failed to migrate app from $oldVersion -> ${BuildConfig.VERSION_CODE}!", e)
}
return false
}
@@ -334,7 +333,7 @@ object EXHMigrations {
try {
dbLocation.copyTo(backupLocation, overwrite = true)
} catch (t: Throwable) {
logger.enableStackTrace(2).w("Failed to backup database!")
xLogW("Failed to backup database!")
}
}
+2 -2
View File
@@ -2,7 +2,6 @@ package exh
import android.content.Context
import androidx.core.net.toUri
import com.elvishew.xlog.XLog
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Chapter
@@ -15,6 +14,7 @@ import eu.kanade.tachiyomi.source.model.toSManga
import eu.kanade.tachiyomi.source.online.UrlImportableSource
import eu.kanade.tachiyomi.source.online.all.EHentai
import eu.kanade.tachiyomi.util.chapter.syncChaptersWithSource
import exh.log.xLogStack
import exh.source.getMainSource
import exh.util.executeOnIO
import uy.kohesive.injekt.Injekt
@@ -32,7 +32,7 @@ class GalleryAdder {
preferences.enabledLanguages().get() to preferences.disabledSources().get().map { it.toLong() }.toSet()
}
private val logger = XLog.tag("GalleryAdder").enableStackTrace(2).build()
private val logger = xLogStack()
fun pickSource(url: String): List<UrlImportableSource> {
val uri = url.toUri()
+10 -10
View File
@@ -1,7 +1,6 @@
package exh.debug
import android.app.Application
import com.elvishew.xlog.XLog
import com.pushtorefresh.storio.sqlite.queries.RawQuery
import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.toMangaInfo
@@ -13,6 +12,7 @@ import eu.kanade.tachiyomi.source.model.toSManga
import exh.EXHMigrations
import exh.eh.EHentaiThrottleManager
import exh.eh.EHentaiUpdateWorker
import exh.log.xLogE
import exh.metadata.metadata.EHentaiSearchMetadata
import exh.metadata.metadata.base.getFlatMetadataForManga
import exh.metadata.metadata.base.insertFlatMetadataAsync
@@ -60,7 +60,7 @@ object DebugFunctions {
}.toList()
allManga.forEach { manga ->
val meta = db.getFlatMetadataForManga(manga.id!!).executeAsBlocking()?.raise<EHentaiSearchMetadata>() ?: return@forEach
val meta = db.getFlatMetadataForManga(manga.id!!).executeOnIO()?.raise<EHentaiSearchMetadata>() ?: return@forEach
// remove age flag
meta.aged = false
db.insertFlatMetadataAsync(meta.flatten()).await()
@@ -94,7 +94,7 @@ object DebugFunctions {
)?.getMangaDetails(manga.toMangaInfo())?.let { networkManga ->
manga.copyFrom(networkManga.toSManga())
manga.initialized = true
db.insertManga(manga).executeAsBlocking()
db.insertManga(manga).executeOnIO()
}
}
}
@@ -111,7 +111,7 @@ object DebugFunctions {
}.toList()
allManga.forEach { manga ->
val meta = db.getFlatMetadataForManga(manga.id!!).executeAsBlocking()?.raise<EHentaiSearchMetadata>() ?: return@forEach
val meta = db.getFlatMetadataForManga(manga.id!!).executeOnIO()?.raise<EHentaiSearchMetadata>() ?: return@forEach
galleries += "Aged: ${meta.aged}\t Title: ${manga.title}"
}
}
@@ -121,7 +121,7 @@ object DebugFunctions {
fun countAgedFlagInEXHManga(): Int {
var agedAmount = 0
runBlocking {
val metadataManga = db.getFavoriteMangaWithMetadata().executeAsBlocking()
val metadataManga = db.getFavoriteMangaWithMetadata().executeOnIO()
val allManga = metadataManga.asFlow().cancellable().mapNotNull { manga ->
if (manga.isEhBasedManga()) manga
@@ -129,7 +129,7 @@ object DebugFunctions {
}.toList()
allManga.forEach { manga ->
val meta = db.getFlatMetadataForManga(manga.id!!).executeAsBlocking()?.raise<EHentaiSearchMetadata>() ?: return@forEach
val meta = db.getFlatMetadataForManga(manga.id!!).executeOnIO()?.raise<EHentaiSearchMetadata>() ?: return@forEach
if (meta.aged) {
// remove age flag
agedAmount++
@@ -239,7 +239,7 @@ object DebugFunctions {
Json.decodeFromString<JsonSavedSearch>(it.substringAfter(':'))
} catch (t: RuntimeException) {
// Load failed
XLog.tag("DebugFunctions").e("Failed to load saved search!", t)
xLogE("Failed to load saved search!", t)
t.printStackTrace()
null
}
@@ -251,7 +251,7 @@ object DebugFunctions {
Json.decodeFromString<JsonSavedSearch>(it.substringAfter(':'))
} catch (t: RuntimeException) {
// Load failed
XLog.tag("DebugFunctions").e("Failed to load saved search!", t)
xLogE("Failed to load saved search!", t)
t.printStackTrace()
null
}
@@ -278,7 +278,7 @@ object DebugFunctions {
Json.decodeFromString<JsonSavedSearch>(it.substringAfter(':'))
} catch (t: RuntimeException) {
// Load failed
XLog.tag("DebugFunctions").e("Failed to load saved search!", t)
xLogE("Failed to load saved search!", t)
t.printStackTrace()
null
}
@@ -290,7 +290,7 @@ object DebugFunctions {
Json.decodeFromString<JsonSavedSearch>(it.substringAfter(':'))
} catch (t: RuntimeException) {
// Load failed
XLog.tag("DebugFunctions").e("Failed to load saved search!", t)
xLogE("Failed to load saved search!", t)
t.printStackTrace()
null
}
@@ -3,7 +3,7 @@ package exh.eh
import android.util.SparseArray
import androidx.core.util.AtomicFile
import androidx.core.util.forEach
import com.elvishew.xlog.XLog
import exh.log.xLogD
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@@ -95,7 +95,7 @@ class MemAutoFlushingLookupTable<T>(
}
}
} catch (e: FileNotFoundException) {
XLog.tag("MemAutoFlushingLookupTable").enableStackTrace(2).d("Lookup table not found!", e)
xLogD("Lookup table not found!", e)
// Ignored
}
@@ -3,7 +3,6 @@ package exh.favorites
import android.content.Context
import android.net.wifi.WifiManager
import android.os.PowerManager
import com.elvishew.xlog.XLog
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Category
@@ -21,6 +20,7 @@ import exh.GalleryAddEvent
import exh.GalleryAdder
import exh.eh.EHentaiThrottleManager
import exh.eh.EHentaiUpdateWorker
import exh.log.xLog
import exh.source.EH_SOURCE_ID
import exh.source.EXH_SOURCE_ID
import exh.source.isEhBasedManga
@@ -61,7 +61,7 @@ class FavoritesSyncHelper(val context: Context) {
private var wifiLock: WifiManager.WifiLock? = null
private var wakeLock: PowerManager.WakeLock? = null
private val logger = XLog.tag("EHFavSync").build()
private val logger = xLog()
val status: MutableStateFlow<FavoritesSyncStatus> = MutableStateFlow(FavoritesSyncStatus.Idle(context))
@@ -381,7 +381,7 @@ class FavoritesSyncHelper(val context: Context) {
if (result is GalleryAddEvent.Fail) {
if (result is GalleryAddEvent.Fail.NotFound) {
XLog.tag("EHFavSync").enableStackTrace(2).e(context.getString(R.string.favorites_sync_remote_not_exist, it.getUrl()))
logger.e(context.getString(R.string.favorites_sync_remote_not_exist, it.getUrl()))
// Skip this gallery, it no longer exists
return@forEachIndexed
}
@@ -119,22 +119,22 @@ class EnhancedFilePrinter internal constructor(
/**
* The file name generator for log file.
*/
private var fileNameGenerator: FileNameGenerator? = null
var fileNameGenerator: FileNameGenerator? = null
/**
* The backup strategy for log file.
*/
private var backupStrategy: BackupStrategy? = null
var backupStrategy: BackupStrategy? = null
/**
* The clean strategy for log file.
*/
private var cleanStrategy: CleanStrategy? = null
var cleanStrategy: CleanStrategy? = null
/**
* The flattener when print a log.
*/
private var flattener: Flattener? = null
var flattener: Flattener? = null
/**
* Set the file name generator for log file.
@@ -194,6 +194,12 @@ class EnhancedFilePrinter internal constructor(
flattener ?: DefaultsFactory.createFlattener2()
)
}
companion object {
operator fun invoke(folderPath: String, block: Builder.() -> Unit): EnhancedFilePrinter {
return Builder(folderPath).apply(block).build()
}
}
}
private data class LogItem(
+76
View File
@@ -0,0 +1,76 @@
package exh.log
import android.util.Log
import com.elvishew.xlog.Logger
import com.elvishew.xlog.XLog
import com.elvishew.xlog.LogLevel as XLogLevel
fun Any.xLog(): Logger = XLog.tag(this::class.java.simpleName).build()
fun Any.xLogStack(): Logger = XLog.tag(this::class.java.simpleName).enableStackTrace(0).build()
fun Any.xLogE(log: String) = xLog().e(log)
fun Any.xLogW(log: String) = xLog().w(log)
fun Any.xLogD(log: String) = xLog().d(log)
fun Any.xLogI(log: String) = xLog().i(log)
fun Any.xLog(logLevel: LogLevel, log: String) = xLog().log(logLevel.int, log)
fun Any.xLogJson(log: String) = xLog().json(log)
fun Any.xLogXML(log: String) = xLog().xml(log)
fun Any.xLogE(log: Throwable) = xLogStack().e(log)
fun Any.xLogW(log: Throwable) = xLogStack().w(log)
fun Any.xLogD(log: Throwable) = xLogStack().d(log)
fun Any.xLogI(log: Throwable) = xLogStack().i(log)
fun Any.xLog(logLevel: LogLevel, log: Throwable) = xLogStack().log(logLevel.int, log)
fun Any.xLogE(log: String, e: Throwable) = xLogStack().e(log, e)
fun Any.xLogW(log: String, e: Throwable) = xLogStack().w(log, e)
fun Any.xLogD(log: String, e: Throwable) = xLogStack().d(log, e)
fun Any.xLogI(log: String, e: Throwable) = xLogStack().i(log, e)
fun Any.xLog(logLevel: LogLevel, log: String, e: Throwable) = xLogStack().log(logLevel.int, log, e)
fun Any.xLogE(log: Any?) = xLog().let { if (log == null) it.e("null") else it.e(log) }
fun Any.xLogW(log: Any?) = xLog().let { if (log == null) it.w("null") else it.w(log) }
fun Any.xLogD(log: Any?) = xLog().let { if (log == null) it.d("null") else it.d(log) }
fun Any.xLogI(log: Any?) = xLog().let { if (log == null) it.i("null") else it.i(log) }
fun Any.xLog(logLevel: LogLevel, log: Any?) = xLog().let { if (log == null) it.log(logLevel.int, "null") else it.log(logLevel.int, log) }
/*fun Any.xLogE(vararg logs: Any) = xLog().e(logs)
fun Any.xLogW(vararg logs: Any) = xLog().w(logs)
fun Any.xLogD(vararg logs: Any) = xLog().d(logs)
fun Any.xLogI(vararg logs: Any) = xLog().i(logs)
fun Any.xLog(logLevel: LogLevel, vararg logs: Any) = xLog().log(logLevel.int, logs)*/
fun Any.xLogE(format: String, vararg args: Any?) = xLog().e(format, *args)
fun Any.xLogW(format: String, vararg args: Any?) = xLog().w(format, *args)
fun Any.xLogD(format: String, vararg args: Any?) = xLog().d(format, *args)
fun Any.xLogI(format: String, vararg args: Any?) = xLog().i(format, *args)
fun Any.xLog(logLevel: LogLevel, format: String, vararg args: Any) = xLog().log(logLevel.int, format, *args)
sealed class LogLevel(val int: Int, val androidLevel: Int) {
object None : LogLevel(XLogLevel.NONE, Log.ASSERT)
object Error : LogLevel(XLogLevel.ERROR, Log.ERROR)
object Warn : LogLevel(XLogLevel.WARN, Log.WARN)
object Info : LogLevel(XLogLevel.INFO, Log.INFO)
object Debug : LogLevel(XLogLevel.DEBUG, Log.DEBUG)
object Verbose : LogLevel(XLogLevel.VERBOSE, Log.VERBOSE)
object All : LogLevel(XLogLevel.ALL, Log.VERBOSE)
val name get() = getLevelName(this)
val shortName get() = getLevelShortName(this)
companion object {
fun getLevelName(logLevel: LogLevel): String = XLogLevel.getLevelName(logLevel.int)
fun getLevelShortName(logLevel: LogLevel): String = XLogLevel.getShortLevelName(logLevel.int)
fun values() = listOf(
None,
Error,
Warn,
Info,
Debug,
Verbose,
All
)
}
}
+35
View File
@@ -0,0 +1,35 @@
package exh.log
import android.util.Log
import com.elvishew.xlog.XLog
import timber.log.Timber
class XLogTree : Timber.DebugTree() {
override fun log(priority: Int, tag: String?, message: String, throwable: Throwable?) {
if (tag != null) {
if (throwable != null) {
XLog.tag(tag).log(priority.toXLogLevel(), message, throwable)
} else {
XLog.tag(tag).log(priority.toXLogLevel(), message)
}
} else {
if (throwable != null) {
XLog.log(priority.toXLogLevel(), message, throwable)
} else {
XLog.log(priority.toXLogLevel(), message)
}
}
}
private fun Int.toXLogLevel(): Int {
return when (this) {
Log.ASSERT -> LogLevel.None.int
Log.ERROR -> LogLevel.Error.int
Log.WARN -> LogLevel.Warn.int
Log.INFO -> LogLevel.Info.int
Log.DEBUG -> LogLevel.Debug.int
Log.VERBOSE -> LogLevel.Verbose.int
else -> LogLevel.All.int
}
}
}
@@ -1,11 +1,11 @@
package exh.md.handlers
import com.elvishew.xlog.XLog
import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.network.parseAs
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.util.asJsoup
import exh.log.xLogE
import exh.md.handlers.serializers.ApiChapterSerializer
import exh.md.handlers.serializers.ApiMangaSerializer
import exh.md.handlers.serializers.ChapterSerializer
@@ -150,7 +150,7 @@ class ApiMangaParser(private val lang: String) {
if (tags.isNotEmpty()) tags.clear()
tags += genres.map { RaisedTag(null, it, MangaDexSearchMetadata.TAG_TYPE_DEFAULT) }
} catch (e: Exception) {
XLog.tag("ApiMangaParser").enableStackTrace(2).e(e)
xLogE(e)
throw e
}
}
@@ -256,7 +256,7 @@ class ApiMangaParser(private val lang: String) {
}
return response.parseAs<ApiChapterSerializer>().data.mangaId
} catch (e: Exception) {
XLog.tag("ApiMangaParser").enableStackTrace(2).e(e)
xLogE(e)
throw e
}
}
@@ -1,6 +1,5 @@
package exh.md.handlers
import com.elvishew.xlog.XLog
import eu.kanade.tachiyomi.data.database.models.Track
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.track.TrackManager
@@ -12,6 +11,8 @@ import eu.kanade.tachiyomi.source.model.MangasPage
import eu.kanade.tachiyomi.source.model.MetadataMangasPage
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.util.lang.withIOContext
import exh.log.xLogD
import exh.log.xLogE
import exh.md.handlers.serializers.FollowPage
import exh.md.handlers.serializers.FollowsIndividualSerializer
import exh.md.handlers.serializers.FollowsPageSerializer
@@ -50,7 +51,7 @@ class FollowsHandler(val client: OkHttpClient, val headers: Headers, val prefere
response.body?.string().orEmpty()
)
} catch (e: Exception) {
XLog.tag("FollowsHandler").enableStackTrace(2).e("error parsing follows", e)
xLogE("error parsing follows", e)
FollowsPageSerializer(404, emptyList())
}
@@ -78,7 +79,7 @@ class FollowsHandler(val client: OkHttpClient, val headers: Headers, val prefere
val followsPageResult = try {
response.parseAs<FollowsIndividualSerializer>(MdUtil.jsonParser)
} catch (e: Exception) {
XLog.tag("FollowsHandler").enableStackTrace(2).e("error parsing follows", e)
xLogE("error parsing follows", e)
throw e
}
@@ -161,7 +162,7 @@ class FollowsHandler(val client: OkHttpClient, val headers: Headers, val prefere
val formBody = FormBody.Builder()
.add("volume", "0")
.add("chapter", track.last_chapter_read.toString())
XLog.tag("FollowsHandler").d("chapter to update %s", track.last_chapter_read.toString())
xLogD("chapter to update %s", track.last_chapter_read.toString())
val response = client.newCall(
POST(
"${MdUtil.baseUrl}/ajax/actions.ajax.php?function=edit_progress&id=$mangaID",
@@ -172,7 +173,7 @@ class FollowsHandler(val client: OkHttpClient, val headers: Headers, val prefere
withIOContext {
response.body?.string()
.also { XLog.tag("FollowsHandler").d(it) }
.also { xLogD(it) }
.let { it != null && it.isEmpty() }
}
}
@@ -10,7 +10,6 @@ import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import androidx.core.content.ContextCompat
import androidx.core.text.isDigitsOnly
import com.elvishew.xlog.XLog
import com.squareup.moshi.JsonReader
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.DatabaseHelper
@@ -23,6 +22,7 @@ import eu.kanade.tachiyomi.util.lang.withIOContext
import eu.kanade.tachiyomi.util.system.acquireWakeLock
import eu.kanade.tachiyomi.util.system.isServiceRunning
import eu.kanade.tachiyomi.util.system.notificationManager
import exh.log.xLogE
import exh.md.similar.sql.models.MangaSimilarImpl
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.CoroutineScope
@@ -135,7 +135,7 @@ class SimilarUpdateService(
// Unsubscribe from any previous subscription if needed.
job?.cancel()
val handler = CoroutineExceptionHandler { _, exception ->
XLog.tag("SimilarUpdateService").enableStackTrace(2).e(exception)
xLogE(exception)
stopSelf(startId)
showResultNotification(true)
cancelProgressNotification()
@@ -4,12 +4,12 @@ import android.app.Dialog
import android.os.Bundle
import android.view.View
import com.afollestad.materialdialogs.MaterialDialog
import com.elvishew.xlog.XLog
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.base.controller.DialogController
import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.lang.launchUI
import eu.kanade.tachiyomi.util.system.toast
import exh.log.xLogE
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.cancel
@@ -35,7 +35,7 @@ class ConfiguringDialogController : DialogController() {
.show()
}
}
XLog.tag("ConfiguringDialogController").enableStackTrace(2).e("Configuration error!", e)
xLogE("Configuration error!", e)
}
launchUI {
finish()
@@ -1,7 +1,6 @@
package exh.uconfig
import android.content.Context
import com.elvishew.xlog.XLog
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.network.await
@@ -9,6 +8,7 @@ import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.source.online.all.EHentai
import eu.kanade.tachiyomi.util.asJsoup
import exh.log.maybeInjectEHLogger
import exh.log.xLogD
import exh.source.EH_SOURCE_ID
import exh.source.EXH_SOURCE_ID
import okhttp3.FormBody
@@ -81,7 +81,7 @@ class EHConfigurator(val context: Context) {
}
}
XLog.tag("EHConfigurator").d("Hath perks: $hathPerks")
xLogD("Hath perks: %s", hathPerks.toString())
configure(ehSource, hathPerks)
configure(exhSource, hathPerks)
@@ -1,7 +1,6 @@
package exh.ui.batchadd
import android.content.Context
import com.elvishew.xlog.XLog
import com.jakewharton.rxrelay.BehaviorRelay
import com.jakewharton.rxrelay.ReplayRelay
import eu.kanade.tachiyomi.R
@@ -10,6 +9,7 @@ import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
import eu.kanade.tachiyomi.util.lang.withIOContext
import exh.GalleryAddEvent
import exh.GalleryAdder
import exh.log.xLogE
import exh.util.trimOrNull
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.Dispatchers
@@ -56,7 +56,7 @@ class BatchAddPresenter : BasePresenter<BatchAddController>() {
currentlyAddingRelay.call(STATE_INPUT_TO_PROGRESS)
val handler = CoroutineExceptionHandler { _, throwable ->
XLog.tag("BatchAddPresenter").enableStackTrace(2).e(throwable)
xLogE(throwable)
}
presenterScope.launch(Dispatchers.IO + handler) {
@@ -12,7 +12,6 @@ import android.webkit.WebChromeClient
import android.webkit.WebView
import androidx.appcompat.app.AppCompatActivity
import com.afollestad.materialdialogs.MaterialDialog
import com.elvishew.xlog.XLog
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.databinding.EhActivityCaptchaBinding
@@ -23,6 +22,8 @@ import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.source.online.HttpSource
import eu.kanade.tachiyomi.util.lang.withUIContext
import eu.kanade.tachiyomi.util.system.setDefaultSettings
import exh.log.xLogD
import exh.log.xLogE
import exh.source.DelegatedHttpSource
import exh.util.melt
import kotlinx.coroutines.runBlocking
@@ -186,7 +187,7 @@ class BrowserActionActivity : AppCompatActivity() {
suspend fun captchaSolveFail() {
currentLoopId = null
validateCurrentLoopId = null
XLog.tag("BrowserActionActivity").enableStackTrace(2).e(IllegalStateException("Captcha solve failure!"))
xLogE(IllegalStateException("Captcha solve failure!"))
withUIContext {
binding.webview.evaluateJavascript(SOLVE_UI_SCRIPT_HIDE, null)
MaterialDialog(this@BrowserActionActivity)
@@ -230,7 +231,7 @@ class BrowserActionActivity : AppCompatActivity() {
val ih = splitResult[3]
val x = binding.webview.x + origX / iw * binding.webview.width
val y = binding.webview.y + origY / ih * binding.webview.height
XLog.tag("BrowserActionActivity").d("Found audio button coords: %f %f", x, y)
xLogD("Found audio button coords: %f %f", x, y)
simulateClick(x + 50, y + 50)
binding.webview.post {
doStageDownloadAudio(loopId)
@@ -246,12 +247,12 @@ class BrowserActionActivity : AppCompatActivity() {
}
STAGE_DOWNLOAD_AUDIO -> {
if (result != null) {
XLog.tag("BrowserActionActivity").d("Got audio URL: $result")
xLogD("Got audio URL: $result")
performRecognize(result)
.observeOn(Schedulers.io())
.subscribe(
{
XLog.tag("BrowserActionActivity").d("Got audio transcript: $it")
xLogD("Got audio transcript: $it")
binding.webview.post {
typeResult(
loopId,
@@ -464,7 +465,7 @@ class BrowserActionActivity : AppCompatActivity() {
if (loopId != validateCurrentLoopId) return
if (result) {
XLog.tag("BrowserActionActivity").d("Captcha solved!")
xLogD("Captcha solved!")
binding.webview.post {
binding.webview.evaluateJavascript(SOLVE_UI_SCRIPT_HIDE, null)
}
@@ -8,13 +8,13 @@ import android.webkit.CookieManager
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.core.view.isVisible
import com.elvishew.xlog.XLog
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.databinding.EhActivityLoginBinding
import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
import eu.kanade.tachiyomi.util.lang.launchUI
import eu.kanade.tachiyomi.util.system.setDefaultSettings
import exh.log.xLogD
import exh.uconfig.WarnConfigureDialogController
import uy.kohesive.injekt.injectLazy
import java.net.HttpCookie
@@ -91,7 +91,7 @@ class LoginController : NucleusController<EhActivityLoginBinding, LoginPresenter
binding.webview.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView, url: String) {
super.onPageFinished(view, url)
XLog.tag("LoginController").d(url)
xLogD(url)
val parsedUrl = Uri.parse(url)
if (parsedUrl.host.equals("forums.e-hentai.org", ignoreCase = true)) {
// Hide distracting content
+2 -2
View File
@@ -1,7 +1,7 @@
package exh.util
import com.elvishew.xlog.XLog
import eu.kanade.tachiyomi.util.asJsoup
import exh.log.xLogW
import okhttp3.Response
import okhttp3.ResponseBody.Companion.toResponseBody
import org.jsoup.nodes.Document
@@ -21,7 +21,7 @@ fun Response.interceptAsHtml(block: (Document) -> Unit): Response {
block(parsed)
} catch (t: Throwable) {
// Ignore all errors
XLog.tag("Response.interceptAsHtml").enableStackTrace(2).w("Interception error!", t)
xLogW("Interception error!", t)
} finally {
close()
}