package com.casic.smarttube.extensions import android.content.Context import android.graphics.Color import com.casic.smarttube.R import com.casic.smarttube.callback.OnImageCompressListener import com.casic.smarttube.model.ErrorMessageModel import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.extensions.dateToTimestamp import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject import top.zibin.luban.Luban import top.zibin.luban.OnCompressListener import java.io.File import java.text.SimpleDateFormat import java.util.* /** * String扩展方法 */ fun String.separateResponseCode(): Int { if (this.isBlank()) { return 404 } return JSONObject(this).getInt("code") } fun String.toErrorMessage(): String { val errorModel = Gson().fromJson<ErrorMessageModel>( this, object : TypeToken<ErrorMessageModel>() {}.type ) return errorModel.message.toString() } /** * 下载路径为 http://xx.com/static/ 拼接downloadUrl * */ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } //拼接图片地址 fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } //电量转图片 fun String.toBatteryImage(): Int { if (this.isBlank()) { return R.drawable.ic_battery_0 } try { when (this.toInt()) { in 0..10 -> return R.drawable.ic_battery_0 in 11..30 -> return R.drawable.ic_battery_1 in 31..60 -> return R.drawable.ic_battery_2 in 61..90 -> return R.drawable.ic_battery_3 in 91..100 -> return R.drawable.ic_battery_4 } } catch (e: ClassCastException) { e.printStackTrace() } return R.drawable.ic_battery_0 } fun String.toTextColor(context: Context): Int { if (this.isBlank()) { return R.color.redTextColor.convertColor(context) } try { when (this.toInt()) { in 0..10 -> return R.color.redTextColor.convertColor(context) in 11..30 -> return R.color.orangeTextColor.convertColor(context) in 31..60 -> return Color.parseColor("#FFFF00") in 61..90 -> return Color.parseColor("#90B030") in 91..100 -> return Color.parseColor("#33CC33") } } catch (e: ClassCastException) { e.printStackTrace() } return R.color.redTextColor.convertColor(context) } /** * 时间转月日 */ fun String.dateToMonthDay(): String { val timestamp = this.dateToTimestamp() val dateFormat = SimpleDateFormat("MM-dd HH:mm", Locale.CHINA) return dateFormat.format(Date(timestamp)) } fun String.compressImage(context: Context, listener: OnImageCompressListener) { Luban.with(context) .load(this) .ignoreBy(100) .setTargetDir(context.createCompressImageDir().toString()) .filter { !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) } .setCompressListener(object : OnCompressListener { override fun onStart() { } override fun onSuccess(file: File) { listener.onSuccess(file) } override fun onError(e: Throwable) { listener.onError(e) } }).launch() }