package com.github.apognu.otter.utils import android.content.Context import android.widget.Toast import com.google.android.exoplayer2.util.Log import com.preference.PowerPreference import java.net.URI fun Context?.toast(message: String, length: Int = Toast.LENGTH_SHORT) { if (this != null) { Toast.makeText(this, message, length).show() } } private fun logClassName(): String { val known = setOf( "dalvik.system.VMStack", "java.lang.Thread", "com.github.apognu.otter.utils.UtilKt" ) Thread.currentThread().stackTrace.forEach { if (!known.contains(it.className)) { val className = it.className.split('.').last() val line = it.lineNumber return "$className:$line" } } return "UNKNOWN" } fun Any?.log(prefix: String? = null) { prefix?.let { Log.d("OTTER", "${logClassName()} - $prefix: $this") } ?: Log.d("OTTER", "${logClassName()} - $this") } fun maybeNormalizeUrl(rawUrl: String?): String? { try { if (rawUrl == null || rawUrl.isEmpty()) return null return mustNormalizeUrl(rawUrl) } catch (e: Exception) { return null } } fun mustNormalizeUrl(rawUrl: String): String { val fallbackHost = PowerPreference.getFileByName(AppContext.PREFS_CREDENTIALS).getString("hostname") val uri = URI(rawUrl).takeIf { it.host != null } ?: URI("$fallbackHost$rawUrl") return uri.toString() } fun toDurationString(duration: Long, showSeconds: Boolean = false): String { val days = (duration / 86400) val hours = (duration % 86400) / 3600 val minutes = (duration % 86400 % 3600) / 60 val seconds = duration % 86400 % 3600 % 60 val ret = StringBuilder() if (days > 0) ret.append("${days}d ") if (hours > 0) ret.append("${hours}h ") if (minutes > 0) ret.append("${minutes}m ") if (showSeconds && seconds > 0) ret.append("${seconds}s") return ret.toString() } object Settings { fun hasAccessToken() = PowerPreference.getFileByName(AppContext.PREFS_CREDENTIALS).contains("access_token") fun getAccessToken(): String = PowerPreference.getFileByName(AppContext.PREFS_CREDENTIALS).getString("access_token", "") fun isAnonymous() = PowerPreference.getFileByName(AppContext.PREFS_CREDENTIALS).getBoolean("anonymous", false) fun areExperimentsEnabled() = PowerPreference.getDefaultFile().getBoolean("experiments", false) fun getScopes() = PowerPreference.getDefaultFile().getString("scope", "all").split(",") }