package jp.juggler.subwaytooter.api.finder import jp.juggler.subwaytooter.api.TootParser import jp.juggler.subwaytooter.api.entity.* import jp.juggler.subwaytooter.api.entity.TootAccountRef.Companion.tootAccountRefOrNull import jp.juggler.subwaytooter.table.SavedAccount import jp.juggler.util.data.JsonArray import jp.juggler.util.data.JsonObject val nullArrayFinder: (JsonObject) -> JsonArray? = { null } val misskeyArrayFinderUsers = { it: JsonObject -> it.jsonArray("users") } //////////////////////////////////////////////////////////////////////////////// // account list parser val defaultAccountListParser: (parser: TootParser, jsonArray: JsonArray) -> List = { parser, jsonArray -> parser.accountRefList(jsonArray) } private fun misskeyUnwrapRelationAccount(parser: TootParser, srcList: JsonArray, key: String) = srcList.objectList().mapNotNull { when (val relationId = EntityId.mayNull(it.string("id"))) { null -> null else -> tootAccountRefOrNull(parser, parser.account(it.jsonObject(key))) ?.apply { _orderId = relationId } } } val misskey11FollowingParser: (TootParser, JsonArray) -> List = { parser, jsonArray -> misskeyUnwrapRelationAccount(parser, jsonArray, "followee") } val misskey11FollowersParser: (TootParser, JsonArray) -> List = { parser, jsonArray -> misskeyUnwrapRelationAccount(parser, jsonArray, "follower") } val misskeyCustomParserFollowRequest: (TootParser, JsonArray) -> List = { parser, jsonArray -> misskeyUnwrapRelationAccount(parser, jsonArray, "follower") } val misskeyCustomParserMutes: (TootParser, JsonArray) -> List = { parser, jsonArray -> misskeyUnwrapRelationAccount(parser, jsonArray, "mutee") } val misskeyCustomParserBlocks: (TootParser, JsonArray) -> List = { parser, jsonArray -> misskeyUnwrapRelationAccount(parser, jsonArray, "blockee") } //////////////////////////////////////////////////////////////////////////////// // status list parser val defaultStatusListParser: (parser: TootParser, jsonArray: JsonArray) -> List = { parser, jsonArray -> parser.statusList(jsonArray) } val misskeyCustomParserFavorites: (TootParser, JsonArray) -> List = { parser, jsonArray -> jsonArray.objectList().mapNotNull { when (val relationId = EntityId.mayNull(it.string("id"))) { null -> null else -> parser.status(it.jsonObject("note"))?.apply { favourited = true _orderId = relationId } } } } //////////////////////////////////////////////////////////////////////////////// // notification list parser val defaultNotificationListParser: (parser: TootParser, jsonArray: JsonArray) -> List = { parser, jsonArray -> parser.notificationList(jsonArray) } val defaultDomainBlockListParser: (parser: TootParser, jsonArray: JsonArray) -> List = { _, jsonArray -> TootDomainBlock.parseList(jsonArray) } val defaultReportListParser: (parser: TootParser, jsonArray: JsonArray) -> List = { _, jsonArray -> parseList(jsonArray) { TootReport(it) } } val defaultConversationSummaryListParser: (parser: TootParser, jsonArray: JsonArray) -> List = { parser, jsonArray -> parseList(jsonArray) { TootConversationSummary(parser, it) } } /////////////////////////////////////////////////////////////////////// val mastodonFollowSuggestion2ListParser: (parser: TootParser, jsonArray: JsonArray) -> List = { parser, jsonArray -> TootAccountRef.wrapList(parser, jsonArray.objectList().mapNotNull { parser.account(it.jsonObject("account"))?.also { a -> SuggestionSource.set( (parser.linkHelper as? SavedAccount)?.db_id, a.acct, it.string("source") ) } } ) }