Upgrade logging, now maps timber to XLog, new logging functions
This commit is contained in:
@@ -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,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()
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user