funkwhale-app-android/app/src/main/java/audio/funkwhale/ffa/utils/Util.kt

93 lines
2.4 KiB
Kotlin

package audio.funkwhale.ffa.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",
"audio.funkwhale.ffa.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"
}
enum class LogLevel {
INFO,
DEBUG,
ERROR
}
fun Any?.logError(prefix: String? = null) = this.log(prefix, LogLevel.ERROR)
fun Any?.logInfo(prefix: String? = null) = this.log(prefix, LogLevel.INFO)
fun Any?.log(prefix: String? = null, logLevel: LogLevel = LogLevel.DEBUG) {
val tag = "FFA"
val message = "${logClassName()} - ${prefix?.let { "$it: " }}$this"
when (logLevel) {
LogLevel.DEBUG -> Log.d(tag, message)
LogLevel.INFO -> Log.i(tag, message)
LogLevel.ERROR -> Log.e(tag, message)
}
}
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 isAnonymous() =
PowerPreference.getFileByName(AppContext.PREFS_CREDENTIALS).getBoolean("anonymous", false)
fun getScopes() = PowerPreference.getDefaultFile().getString("scope", "all").split(",")
}