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

100 lines
2.9 KiB
Kotlin

package jp.juggler.subwaytooter.api.entity
import jp.juggler.subwaytooter.api.TootParser
import jp.juggler.util.JsonObject
import jp.juggler.util.LogCategory
class TootNotification(parser : TootParser, src : JsonObject) : TimelineItem() {
companion object {
@Suppress("unused")
private val log = LogCategory("TootNotification")
// 言及と返信
const val TYPE_MENTION = "mention" // Mastodon,Misskey
const val TYPE_REPLY = "reply" // Misskey (メンションとReplyは別の物らしい
// ブーストとリノート
const val TYPE_REBLOG = "reblog" // Mastodon
const val TYPE_RENOTE = "renote" // Misskey
const val TYPE_QUOTE = "quote" // Misskey 引用Renote
// フォロー
const val TYPE_FOLLOW = "follow" // Mastodon,Misskey
const val TYPE_UNFOLLOW = "unfollow" // Mastodon,Misskey
const val TYPE_FAVOURITE = "favourite"
const val TYPE_REACTION = "reaction"
const val TYPE_FOLLOW_REQUEST = "follow_request"
const val TYPE_FOLLOW_REQUEST_MISSKEY = "receiveFollowRequest"
const val TYPE_FOLLOW_REQUEST_ACCEPTED_MISSKEY = "followRequestAccepted"
const val TYPE_POLL_VOTE_MISSKEY = "pollVote"
// 投票
const val TYPE_VOTE = "poll_vote"
// (Mastodon 2.8)投票完了
const val TYPE_POLL = "poll"
const val TYPE_STATUS = "status"
}
val json : JsonObject
val id : EntityId
val type : String // One of: "mention", "reblog", "favourite", "follow"
val accountRef : TootAccountRef? // The Account sending the notification to the user
val status : TootStatus? // The Status associated with the notification, if applicable
var reaction : String? = null
private val created_at : String? // The time the notification was created
val time_created_at : Long
val account : TootAccount?
get() = accountRef?.get()
override fun getOrderId() = id
init {
json = src
if(parser.serviceType == ServiceType.MISSKEY) {
id = EntityId.mayDefault(src.string("id"))
type = src.stringOrThrow("type")
created_at = src.string("createdAt")
time_created_at = TootStatus.parseTime(created_at)
accountRef = TootAccountRef.mayNull(
parser,
parser.account(
src.jsonObject("user")
)
)
status = parser.status(
src.jsonObject("note")
)
reaction = src.string("reaction")
// Misskeyの通知APIはページネーションをIDでしか行えない
// これは改善される予定 https://github.com/syuilo/misskey/issues/2275
} else {
id = EntityId.mayDefault(src.string("id"))
type = src.stringOrThrow("type")
created_at = src.string("created_at")
time_created_at = TootStatus.parseTime(created_at)
accountRef =
TootAccountRef.mayNull(parser, parser.account(src.jsonObject("account")))
status = parser.status(src.jsonObject("status"))
}
}
}