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

67 lines
1.6 KiB
Kotlin

package jp.juggler.subwaytooter.api.entity
import jp.juggler.util.JsonObject
import jp.juggler.util.LogCategory
class MisskeyNoteUpdate(apDomain:Host, src : JsonObject) {
companion object{
private val log = LogCategory("MisskeyNoteUpdate")
}
enum class Type {
REACTION,
UNREACTION,
DELETED,
VOTED
}
val noteId : EntityId
val type : Type
var reaction : String? = null
var userId : EntityId? = null
var deletedAt : Long? = null
var choice : Int? = null
var emoji : CustomEmoji? = null
init {
noteId =
EntityId.mayNull(src.string("id")) ?: error("MisskeyNoteUpdate: missing note id")
// root.body.body
val body2 = src.jsonObject("body") ?: error("MisskeyNoteUpdate: missing body")
when(val strType = src.string("type")) {
"reacted" -> {
type = Type.REACTION
reaction = body2.string("reaction")
userId = EntityId.mayDefault(body2.string("userId"))
emoji = body2.jsonObject("emoji")?.let {
try {
CustomEmoji.decodeMisskey(apDomain,it)
} catch (ex: Throwable) {
log.e("can't parse custom emoji.")
null
}
}
}
"unreacted" -> {
type = Type.UNREACTION
reaction = body2.string("reaction")
userId = EntityId.mayDefault(body2.string("userId"))
}
"deleted" -> {
type = Type.DELETED
deletedAt = TootStatus.parseTime(body2.string("deletedAt"))
}
"pollVoted" -> {
type = Type.VOTED
choice = body2.int("choice")
userId = EntityId.mayDefault(body2.string("userId"))
}
else -> error("MisskeyNoteUpdate: unknown type $strType")
}
}
}