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

61 lines
2.1 KiB
Kotlin
Raw Normal View History

package jp.juggler.subwaytooter.api
import android.content.Context
import jp.juggler.subwaytooter.api.entity.*
import jp.juggler.subwaytooter.table.UserRelation
import org.json.JSONArray
import org.json.JSONObject
2019-02-14 04:05:07 +01:00
import jp.juggler.util.WordTrieTree
import jp.juggler.subwaytooter.util.LinkHelper
2018-12-08 07:26:19 +01:00
import jp.juggler.util.parseString
class TootParser(
val context : Context,
val linkHelper : LinkHelper,
var pinned : Boolean = false, // プロフィールカラムからpinned TL を読んだ時だけ真
var highlightTrie : WordTrieTree? = null,
var serviceType : ServiceType = ServiceType.MASTODON,
var misskeyDecodeProfilePin : Boolean = false
) {
val misskeyUserRelationMap = HashMap<EntityId, UserRelation>()
val misskeyAccountDetailMap = HashMap<EntityId, TootAccount>()
val accessHost : String?
get() = linkHelper.host
init {
if(linkHelper.isMisskey) serviceType = ServiceType.MISSKEY
}
fun getFullAcct(acct : String?) = linkHelper.getFullAcct(acct)
fun account(src : JSONObject?) = parseItem(::TootAccount, this, src)
fun accountList(array : JSONArray?) =
TootAccountRef.wrapList(this, parseList(::TootAccount, this, array))
fun status(src : JSONObject?) = parseItem(::TootStatus, this, src)
fun statusList(array : JSONArray?) = parseList(::TootStatus, this, array)
fun notification(src : JSONObject?) = parseItem(::TootNotification, this, src)
fun notificationList(src : JSONArray?) = parseList(::TootNotification, this, src)
fun tagList(array : JSONArray?) = parseList(::TootTag, array)
fun results(src : JSONObject?) = parseItem(::TootResults, this, src)
fun instance(src : JSONObject?) = parseItem(::TootInstance, this, src)
fun getMisskeyUserRelation(whoId : EntityId) = misskeyUserRelationMap[whoId]
2018-12-08 07:26:19 +01:00
fun parseMisskeyApShow(jsonObject : JSONObject?) : Any? {
2018-12-08 07:26:19 +01:00
// ap/show の戻り値はActivityPubオブジェクトではなく、Misskeyのエンティティです。
return when(jsonObject?.parseString("type")) {
"Note" -> status(jsonObject.optJSONObject("object"))
"User" -> account(jsonObject.optJSONObject("object"))
else -> null
}
}
}