SubwayTooter-Android-App/app/src/main/java/jp/juggler/subwaytooter/api/entity/MisskeyReaction.kt

98 lines
3.0 KiB
Kotlin

package jp.juggler.subwaytooter.api.entity
import android.text.Spannable
import android.text.SpannableStringBuilder
import jp.juggler.subwaytooter.App1
import jp.juggler.subwaytooter.Pref
import jp.juggler.subwaytooter.span.NetworkEmojiSpan
import jp.juggler.subwaytooter.table.SavedAccount
import jp.juggler.subwaytooter.util.DecodeOptions
import jp.juggler.subwaytooter.util.EmojiDecoder
//private fun findSvgFile(utf16: String) =
// EmojiMap.sUTF16ToEmojiResource[utf16]
//
//fun EmojiMap.EmojiResource.loadToImageView(activity: ActMain, view: ImageView) {
// if (isSvg) {
// Glide.with(activity)
// .`as`(PictureDrawable::class.java)
// .load("file:///android_asset/${assetsName}")
// .into(view)
// } else {
// Glide.with(activity)
// .load(drawableId)
// .into(view)
// }
//}
object MisskeyReaction {
private val oldReactions = mapOf(
"like" to "\ud83d\udc4d",
"love" to "\u2665",
"laugh" to "\ud83d\ude06",
"hmm" to "\ud83e\udd14",
"surprise" to "\ud83d\ude2e",
"congrats" to "\ud83c\udf89",
"angry" to "\ud83d\udca2",
"confused" to "\ud83d\ude25",
"rip" to "\ud83d\ude07",
"pudding" to "\ud83c\udf6e",
"star" to "\u2B50", // リモートからのFavを示す代替リアクション。ピッカーには表示しない
)
private val reCustomEmoji = """\A:([^:]+):\z""".toRegex()
fun toSpannableStringBuilder(
code: String,
options: DecodeOptions,
status:TootStatus?
): SpannableStringBuilder {
// 古い形式の絵文字はUnicode絵文字にする
oldReactions[code]?.let {
return EmojiDecoder.decodeEmoji(options, it)
}
fun CustomEmoji.toSpannableStringBuilder():SpannableStringBuilder?{
return if (Pref.bpDisableEmojiAnimation(App1.pref)) {
static_url
} else {
url
}?.let{
SpannableStringBuilder(code).apply {
setSpan(
NetworkEmojiSpan(it, scale = options.enlargeCustomEmoji),
0,
length,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
}
}
}
// カスタム絵文字
val customCode = reCustomEmoji.find(code)?.groupValues?.elementAtOrNull(1)
if(customCode != null){
var ce = status?.custom_emojis?.get( customCode)
if(ce != null) return ce.toSpannableStringBuilder()?: EmojiDecoder.decodeEmoji(options, code)
val accessInfo = options.linkHelper as? SavedAccount
val cols = customCode.split("@",limit = 2)
val key = cols.elementAtOrNull(0)
val domain = cols.elementAtOrNull(1)
if( domain == null || domain=="" || domain=="." || domain == accessInfo?.apiHost?.ascii ){
if( accessInfo != null){
ce = App1.custom_emoji_lister
.getMap(accessInfo)
?.get(key)
if(ce != null) return ce.toSpannableStringBuilder()?: EmojiDecoder.decodeEmoji(options, code)
}
}
}
// unicode絵文字、もしくは :xxx: などのshortcode表現
return EmojiDecoder.decodeEmoji(options, code)
}
}