From 52300104f6138c4da2274668f846fdb7efaa6da0 Mon Sep 17 00:00:00 2001 From: usbharu <64310155+usbharu@users.noreply.github.com> Date: Wed, 8 Mar 2023 20:20:29 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20MultiMError=E3=81=AB=E7=B5=B1?= =?UTF-8?q?=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/kotlin/dev/usbharu/multim/MultiM.kt | 7 +-- .../dev/usbharu/multim/api/AccountApi.kt | 20 +++--- .../dev/usbharu/multim/api/NodeinfoApi.kt | 9 ++- .../dev/usbharu/multim/api/StatusApi.kt | 27 ++++---- .../dev/usbharu/multim/api/TimelineApi.kt | 10 +-- .../multim/cache/CacheableAccountApi.kt | 11 ++-- .../multim/cache/CacheableStatusApi.kt | 10 ++- .../multim/cache/CacheableTimelineApi.kt | 5 +- .../dev/usbharu/multim/error/MultiMError.kt | 2 +- .../multim/multi/MultiAccountAccountApi.kt | 45 +++++++------- .../multim/multi/MultiAccountApiBase.kt | 16 +++-- .../multim/multi/MultiAccountEmojiApi.kt | 10 ++- .../usbharu/multim/multi/MultiAccountIApi.kt | 10 ++- .../multim/multi/MultiAccountStatusApi.kt | 62 +++++++++---------- .../multim/multi/MultiAccountTimelineApi.kt | 29 +++++---- .../dev/usbharu/multim/misskey/v12/api/Ap.kt | 3 +- .../usbharu/multim/misskey/v12/api/Drive.kt | 33 +++++----- .../multim/misskey/v12/api/Following.kt | 17 +++-- .../usbharu/multim/misskey/v12/api/Miauth.kt | 7 +-- .../usbharu/multim/misskey/v12/api/Notes.kt | 54 ++++++++-------- .../v12/common/api/MisskeyAccountApi.kt | 20 +++--- .../v12/common/api/MisskeyStatusApi.kt | 31 +++++----- .../v12/common/api/MisskeyStatusApiTest.kt | 1 - 23 files changed, 214 insertions(+), 225 deletions(-) diff --git a/core/src/main/kotlin/dev/usbharu/multim/MultiM.kt b/core/src/main/kotlin/dev/usbharu/multim/MultiM.kt index 2c6dbfb..6d8cf30 100644 --- a/core/src/main/kotlin/dev/usbharu/multim/MultiM.kt +++ b/core/src/main/kotlin/dev/usbharu/multim/MultiM.kt @@ -1,11 +1,10 @@ package dev.usbharu.multim -import com.github.michaelbull.result.Result import com.github.michaelbull.result.map import com.github.michaelbull.result.onFailure import com.github.michaelbull.result.onSuccess import dev.usbharu.multim.api.NodeinfoApi -import dev.usbharu.multim.error.MultiMError +import dev.usbharu.multim.error.MultiMResult import dev.usbharu.multim.factory.MultiMApis import dev.usbharu.multim.factory.PlatformApiFactory import dev.usbharu.multim.model.Auth @@ -36,7 +35,7 @@ object MultiM { token: String, factory: PlatformApiFactory, httpClient: HttpClient = httpClientWithJson - ): Result { + ): MultiMResult { dev.usbharu.multim.Logger.info("Create Client", "START Create client with url:$url.") dev.usbharu.multim.Logger.debug( "Create Client", @@ -63,7 +62,7 @@ object MultiM { auth: Auth, factory: PlatformApiFactory, httpClient: HttpClient = httpClientWithJson - ): Result { + ): MultiMResult { dev.usbharu.multim.Logger.info("Create Client", "START Create cient with url:$url.") dev.usbharu.multim.Logger.debug( "Create Client", diff --git a/core/src/main/kotlin/dev/usbharu/multim/api/AccountApi.kt b/core/src/main/kotlin/dev/usbharu/multim/api/AccountApi.kt index f6b9f1e..5b1c990 100644 --- a/core/src/main/kotlin/dev/usbharu/multim/api/AccountApi.kt +++ b/core/src/main/kotlin/dev/usbharu/multim/api/AccountApi.kt @@ -1,10 +1,10 @@ package dev.usbharu.multim.api import com.github.michaelbull.result.Err -import com.github.michaelbull.result.Result import dev.usbharu.multim.Logger import dev.usbharu.multim.error.ErrorType import dev.usbharu.multim.error.MultiMError +import dev.usbharu.multim.error.MultiMResult import dev.usbharu.multim.model.* //todo 成功したかをboolで返しているが、詳細がわからないのでしっかり返す。 @@ -15,7 +15,7 @@ interface AccountApi { account: Account, since: StatusId? = null, until: StatusId? = null - ): Result, MultiMError> { + ): MultiMResult> { Logger.debug("Account Api", "Not impl account api. userTimeline.") return Err(MultiMError("userTimeline not implements", null, ErrorType.NOT_IMPL)) } @@ -23,7 +23,7 @@ interface AccountApi { val FOLLOW: String get() = "account/follow" - suspend fun follow(account: Account): Result { + suspend fun follow(account: Account): MultiMResult { Logger.debug("Account Api", "Not impl account api. follow.") return Err(MultiMError("follow not implements", null, ErrorType.NOT_IMPL)) } @@ -31,7 +31,7 @@ interface AccountApi { val UNFOLLOW: String get() = "account/unfollow" - suspend fun unfollow(account: Account): Result { + suspend fun unfollow(account: Account): MultiMResult { Logger.debug("Account Api", "Not impl account api. unfollow.") return Err(MultiMError("unfollow not implements", null, ErrorType.NOT_IMPL)) } @@ -39,7 +39,7 @@ interface AccountApi { val PROFILE: String get() = "account/profile" - suspend fun profile(account: Account): Result { + suspend fun profile(account: Account): MultiMResult { Logger.debug("Account Api", "Not impl account api. profile.") return Err(MultiMError("profile not implements", null, ErrorType.NOT_IMPL)) } @@ -52,7 +52,7 @@ interface AccountApi { includeRepost: Boolean = false, since: StatusId? = null, until: StatusId? = null, - ): Result, MultiMError> { + ): MultiMResult> { Logger.debug("Account Api", "Not impl account api. statuses.") return Err(MultiMError("statuses not implements", null, ErrorType.NOT_IMPL)) } @@ -60,7 +60,7 @@ interface AccountApi { val RELATIONSHIPS: String get() = "account/relationships" - suspend fun relationships(myself: Account, other: Account): Result { + suspend fun relationships(myself: Account, other: Account): MultiMResult { Logger.debug("Account Api", "Not impl account api. relationships.") return Err(MultiMError("relationships not implements", null, ErrorType.NOT_IMPL)) } @@ -68,7 +68,7 @@ interface AccountApi { val REQUEST_CANCEL: String get() = "account/requestCancel" - suspend fun requestCancel(account: Account): Result { + suspend fun requestCancel(account: Account): MultiMResult { Logger.debug("Account Api", "Not impl account api. requestCancel.") return Err(MultiMError("requestCancel not implements", null, ErrorType.NOT_IMPL)) } @@ -76,7 +76,7 @@ interface AccountApi { val REQUEST_ACCEPT: String get() = "account/requestAccept" - suspend fun requestAccept(account: Account): Result { + suspend fun requestAccept(account: Account): MultiMResult { Logger.debug("Account Api", "Not impl account api. requestAccept.") return Err(MultiMError("requestAccept not implements", null, ErrorType.NOT_IMPL)) } @@ -84,7 +84,7 @@ interface AccountApi { val REQUEST_REJECT: String get() = "account/requestReject" - suspend fun requestReject(account: Account): Result { + suspend fun requestReject(account: Account): MultiMResult { Logger.debug("Account Api", "Not impl account api. requestReject.") return Err(MultiMError("requestReject not implements", null, ErrorType.NOT_IMPL)) } diff --git a/core/src/main/kotlin/dev/usbharu/multim/api/NodeinfoApi.kt b/core/src/main/kotlin/dev/usbharu/multim/api/NodeinfoApi.kt index d459652..ecc7a9e 100644 --- a/core/src/main/kotlin/dev/usbharu/multim/api/NodeinfoApi.kt +++ b/core/src/main/kotlin/dev/usbharu/multim/api/NodeinfoApi.kt @@ -2,7 +2,6 @@ package dev.usbharu.multim.api import com.github.michaelbull.result.Err import com.github.michaelbull.result.Ok -import com.github.michaelbull.result.Result import com.github.michaelbull.result.flatMap import dev.usbharu.multim.Logger import dev.usbharu.multim.MultiM.json @@ -27,7 +26,7 @@ class NodeinfoApi(private var httpClient: HttpClient) { } } - suspend fun wellKnownNodeinfo(url: String): Result { + suspend fun wellKnownNodeinfo(url: String): MultiMResult { Logger.info("Nodeinfo Api", "START Get $url.well-known/nodeinfo") val get = try { httpClient.get("$url.well-known/nodeinfo") @@ -63,7 +62,7 @@ class NodeinfoApi(private var httpClient: HttpClient) { } } - fun nodeinfoLink(nodeinfoList: NodeinfoList): Result { + fun nodeinfoLink(nodeinfoList: NodeinfoList): MultiMResult { Logger.info("Nodeinfo Api", "START Get nodeinfo link") return runCatching { nodeinfoList.links.minByOrNull { it.rel.substringAfterLast("/", "0").toFloat() }!! @@ -78,7 +77,7 @@ class NodeinfoApi(private var httpClient: HttpClient) { // todo 強制で2.0のが返ってくるのでバージョンを識別する - suspend fun nodeinfo(nodeinfoLink: NodeinfoList.NodeinfoLink): Result { + suspend fun nodeinfo(nodeinfoLink: NodeinfoList.NodeinfoLink): MultiMResult { val get = try { httpClient.get(nodeinfoLink.href) @@ -96,7 +95,7 @@ class NodeinfoApi(private var httpClient: HttpClient) { } } - suspend fun nodeinfo(url: String): Result { + suspend fun nodeinfo(url: String): MultiMResult { return wellKnownNodeinfo(url) .flatMap { nodeinfoLink(it) } .flatMap { nodeinfo(it) } diff --git a/core/src/main/kotlin/dev/usbharu/multim/api/StatusApi.kt b/core/src/main/kotlin/dev/usbharu/multim/api/StatusApi.kt index 0a2025b..cf9af1d 100644 --- a/core/src/main/kotlin/dev/usbharu/multim/api/StatusApi.kt +++ b/core/src/main/kotlin/dev/usbharu/multim/api/StatusApi.kt @@ -1,7 +1,6 @@ package dev.usbharu.multim.api import com.github.michaelbull.result.Err -import com.github.michaelbull.result.Result import dev.usbharu.multim.Logger import dev.usbharu.multim.UniqueId import dev.usbharu.multim.error.ErrorType @@ -15,7 +14,7 @@ interface StatusApi { val POST: String get() = "status/post" - suspend fun post(status: StatusForPost): Result { + suspend fun post(status: StatusForPost): MultiMResult { Logger.debug("Status Api", "Not impl status api post") return Err(MultiMError("post not implements", null, ErrorType.NOT_IMPL)) } @@ -23,7 +22,7 @@ interface StatusApi { val DELETE: String get() = "status/delete" - suspend fun delete(id: StatusId): Result { + suspend fun delete(id: StatusId): MultiMResult { Logger.debug("Status Api", "Not impl status api delete") return Err(MultiMError("delete not implements", null, ErrorType.NOT_IMPL)) } @@ -31,7 +30,7 @@ interface StatusApi { val FIND_BY_ID: String get() = "status/findById" - suspend fun findById(id: StatusId): Result { + suspend fun findById(id: StatusId): MultiMResult { Logger.debug("Status Api", "Not impl status api findById") return Err(MultiMError("findById not implements", null, ErrorType.NOT_IMPL)) } @@ -39,7 +38,7 @@ interface StatusApi { val ADD_REACTION: String get() = "status/addReaction" - suspend fun addReaction(id: StatusId, reaction: Reaction): Result { + suspend fun addReaction(id: StatusId, reaction: Reaction): MultiMResult { Logger.debug("Status Api", "Not impl status api addReaction") return Err(MultiMError("addReaction not implements", null, ErrorType.NOT_IMPL)) } @@ -54,7 +53,7 @@ interface StatusApi { * @param reaction 実装によって挙動が変わります。nullでも * @return */ - suspend fun removeReaction(id: StatusId, reaction: Reaction?): Result { + suspend fun removeReaction(id: StatusId, reaction: Reaction?): MultiMResult { Logger.debug("Status Api", "Not impl status api removeReaction") return Err(MultiMError("removeReaction not implements", null, ErrorType.NOT_IMPL)) } @@ -62,7 +61,7 @@ interface StatusApi { val REACTIONS: String get() = "status/reactions" - suspend fun reactions(id: StatusId): Result, MultiMError> { + suspend fun reactions(id: StatusId): MultiMResult> { Logger.debug("Status Api", "Not impl status api reactions") return Err(MultiMError("reactions not implements", null, ErrorType.NOT_IMPL)) } @@ -70,7 +69,7 @@ interface StatusApi { val REPLIES: String get() = "status/replies" - suspend fun replies(id: StatusId): Result, MultiMError> { + suspend fun replies(id: StatusId): MultiMResult> { Logger.debug("Status Api", "Not impl status api replies") return Err(MultiMError("replies not implements", null, ErrorType.NOT_IMPL)) } @@ -78,7 +77,7 @@ interface StatusApi { val REPOST: String get() = "status/repost" - suspend fun repost(id: StatusId): Result { + suspend fun repost(id: StatusId): MultiMResult { Logger.debug("Status Api", "Not impl status api repost") return Err(MultiMError("repost not implements", null, ErrorType.NOT_IMPL)) } @@ -86,7 +85,7 @@ interface StatusApi { val UN_REPOST: String get() = "status/unRepost" - suspend fun unRepost(id: StatusId): Result { + suspend fun unRepost(id: StatusId): MultiMResult { Logger.debug("Status Api", "Not impl status api unRepost") return Err(MultiMError("unRepost not implements", null, ErrorType.NOT_IMPL)) } @@ -94,7 +93,7 @@ interface StatusApi { val REPLY_TO: String get() = "status/replyTo" - suspend fun replyTo(id: StatusId, status: StatusForPost): Result { + suspend fun replyTo(id: StatusId, status: StatusForPost): MultiMResult { Logger.debug("Status Api", "Not impl status api replyTo") return Err(MultiMError("replyTo not implements", null, ErrorType.NOT_IMPL)) } @@ -102,7 +101,7 @@ interface StatusApi { val ADD_TO_BOOKMARKS: String get() = "status/addBookMarks" - suspend fun addToBookmarks(id: StatusId): Result { + suspend fun addToBookmarks(id: StatusId): MultiMResult { Logger.debug("Status Api", "Not impl status api addToBookmarks") return Err(MultiMError("addToBookmarks not implements", null, ErrorType.NOT_IMPL)) } @@ -110,7 +109,7 @@ interface StatusApi { val REMOVE_FROM_BOOKMARKS: String get() = "status/removeFromBookmarks" - suspend fun removeFromBookmarks(id: StatusId): Result { + suspend fun removeFromBookmarks(id: StatusId): MultiMResult { Logger.debug("Status Api", "Not impl status api removeFromBookmarks") return Err(MultiMError("removeFromBookmarks not implements", null, ErrorType.NOT_IMPL)) } @@ -118,7 +117,7 @@ interface StatusApi { val GET_PREVIOUS_AND_NEXT: String get() = "status/getPreviousAndNext" - suspend fun getPreviousAndNext(id: StatusId): Result { + suspend fun getPreviousAndNext(id: StatusId): MultiMResult { Logger.debug("Status Api", "Not impl status api getPreviousAndNext") return Err(MultiMError("getPreviousAndNext not implements", null, ErrorType.NOT_IMPL)) } diff --git a/core/src/main/kotlin/dev/usbharu/multim/api/TimelineApi.kt b/core/src/main/kotlin/dev/usbharu/multim/api/TimelineApi.kt index 3edef53..84ce947 100644 --- a/core/src/main/kotlin/dev/usbharu/multim/api/TimelineApi.kt +++ b/core/src/main/kotlin/dev/usbharu/multim/api/TimelineApi.kt @@ -1,10 +1,10 @@ package dev.usbharu.multim.api import com.github.michaelbull.result.Err -import com.github.michaelbull.result.Result import dev.usbharu.multim.Logger import dev.usbharu.multim.error.ErrorType import dev.usbharu.multim.error.MultiMError +import dev.usbharu.multim.error.MultiMResult import dev.usbharu.multim.model.Status import dev.usbharu.multim.model.Timeline @@ -12,7 +12,7 @@ interface TimelineApi { val AVAILABLE_TIMELINES: String get() = "timeline/availableTimelines" - suspend fun availableTimelines(): Result, MultiMError> { + suspend fun availableTimelines(): MultiMResult> { Logger.debug("Timeline Api", "Not impl timeline api availableTimelines") return Err(MultiMError("availableTimelines not implements", null, ErrorType.NOT_IMPL)) } @@ -23,7 +23,7 @@ interface TimelineApi { suspend fun listen( timeline: Timeline, callback: (List) -> Unit - ): Result { + ): MultiMResult { Logger.debug("Timeline Api", "Not impl timeline api listen") return Err(MultiMError("timeline listen not implements", null, ErrorType.NOT_IMPL)) } @@ -32,7 +32,7 @@ interface TimelineApi { get() = "timeline/connect" // todo 返り値を詳細にする - suspend fun connect(timeline: Timeline): Result { + suspend fun connect(timeline: Timeline): MultiMResult { Logger.debug("Timeline Api", "Not impl timeline api connect") return Err(MultiMError("timeline connect not implements", null, ErrorType.NOT_IMPL)) } @@ -47,7 +47,7 @@ interface TimelineApi { * @param force 強制的に切断し、もし受信しても無視するように要求する。 * @return */ - suspend fun disconnect(timeline: Timeline, force: Boolean = false): Result { + suspend fun disconnect(timeline: Timeline, force: Boolean = false): MultiMResult { Logger.debug("Timeline Api", "Not impl timeline api disconnect") return Err(MultiMError("timeline disconnect not implements", null, ErrorType.NOT_IMPL)) } diff --git a/core/src/main/kotlin/dev/usbharu/multim/cache/CacheableAccountApi.kt b/core/src/main/kotlin/dev/usbharu/multim/cache/CacheableAccountApi.kt index 0ab2298..d1b3931 100644 --- a/core/src/main/kotlin/dev/usbharu/multim/cache/CacheableAccountApi.kt +++ b/core/src/main/kotlin/dev/usbharu/multim/cache/CacheableAccountApi.kt @@ -1,8 +1,7 @@ package dev.usbharu.multim.cache -import com.github.michaelbull.result.Result import dev.usbharu.multim.api.AccountApi -import dev.usbharu.multim.error.MultiMError +import dev.usbharu.multim.error.MultiMResult import dev.usbharu.multim.model.* class CacheableAccountApi( @@ -15,7 +14,7 @@ class CacheableAccountApi( account: Account, since: StatusId?, until: StatusId? - ): Result, MultiMError> { + ): MultiMResult> { return cacheableApi.cacheOrGet( CacheableApi.generateKey( account, @@ -25,7 +24,7 @@ class CacheableAccountApi( ) { accountApi.userTimeline(account, since, until) } } - override suspend fun profile(account: Account): Result { + override suspend fun profile(account: Account): MultiMResult { return cacheableApi.cacheOrGet(PROFILE, account) { accountApi.profile(account) } } @@ -34,7 +33,7 @@ class CacheableAccountApi( includeRepost: Boolean, since: StatusId?, until: StatusId? - ): Result, MultiMError> { + ): MultiMResult> { return cacheableApi.cacheOrGet( STATUSES, CacheableApi.generateKey(account) + includeRepost @@ -50,7 +49,7 @@ class CacheableAccountApi( override suspend fun relationships( myself: Account, other: Account - ): Result { + ): MultiMResult { return cacheableApi.cacheOrGet(RELATIONSHIPS, myself, other) { accountApi.relationships( myself, diff --git a/core/src/main/kotlin/dev/usbharu/multim/cache/CacheableStatusApi.kt b/core/src/main/kotlin/dev/usbharu/multim/cache/CacheableStatusApi.kt index 4bffdd5..a1aa4d3 100644 --- a/core/src/main/kotlin/dev/usbharu/multim/cache/CacheableStatusApi.kt +++ b/core/src/main/kotlin/dev/usbharu/multim/cache/CacheableStatusApi.kt @@ -1,8 +1,6 @@ package dev.usbharu.multim.cache -import com.github.michaelbull.result.Result import dev.usbharu.multim.api.StatusApi -import dev.usbharu.multim.error.MultiMError import dev.usbharu.multim.error.MultiMResult import dev.usbharu.multim.model.PreviousAndNextPosts import dev.usbharu.multim.model.Reaction @@ -11,19 +9,19 @@ import dev.usbharu.multim.model.StatusId class CacheableStatusApi(private val cacheableApi: CacheableApi, private val statusApi: StatusApi) : CacheableApi by cacheableApi, StatusApi by statusApi { - override suspend fun findById(id: StatusId): Result { + override suspend fun findById(id: StatusId): MultiMResult { return cacheableApi.cacheOrGet(FIND_BY_ID, id) { statusApi.findById(id) } } - override suspend fun reactions(id: StatusId): Result, MultiMError> { + override suspend fun reactions(id: StatusId): MultiMResult> { return cacheableApi.cacheOrGet(REACTIONS, id) { statusApi.reactions(id) } } - override suspend fun replies(id: StatusId): Result, MultiMError> { + override suspend fun replies(id: StatusId): MultiMResult> { return cacheableApi.cacheOrGet(REPLIES, id) { statusApi.replies(id) } } - override suspend fun getPreviousAndNext(id: StatusId): Result { + override suspend fun getPreviousAndNext(id: StatusId): MultiMResult { return cacheableApi.cacheOrGet( GET_PREVIOUS_AND_NEXT, id ) { statusApi.getPreviousAndNext(id) } diff --git a/core/src/main/kotlin/dev/usbharu/multim/cache/CacheableTimelineApi.kt b/core/src/main/kotlin/dev/usbharu/multim/cache/CacheableTimelineApi.kt index c4dac3e..941c6ed 100644 --- a/core/src/main/kotlin/dev/usbharu/multim/cache/CacheableTimelineApi.kt +++ b/core/src/main/kotlin/dev/usbharu/multim/cache/CacheableTimelineApi.kt @@ -1,8 +1,7 @@ package dev.usbharu.multim.cache -import com.github.michaelbull.result.Result import dev.usbharu.multim.api.TimelineApi -import dev.usbharu.multim.error.MultiMError +import dev.usbharu.multim.error.MultiMResult import dev.usbharu.multim.model.Timeline class CacheableTimelineApi( @@ -10,7 +9,7 @@ class CacheableTimelineApi( private val timelineApi: TimelineApi ) : CacheableApi by cacheableApi, TimelineApi by timelineApi { - override suspend fun availableTimelines(): Result, MultiMError> { + override suspend fun availableTimelines(): MultiMResult> { return cacheableApi.cacheOrGet(AVAILABLE_TIMELINES) { timelineApi.availableTimelines() } } } diff --git a/core/src/main/kotlin/dev/usbharu/multim/error/MultiMError.kt b/core/src/main/kotlin/dev/usbharu/multim/error/MultiMError.kt index 2f82cad..7ae91b9 100644 --- a/core/src/main/kotlin/dev/usbharu/multim/error/MultiMError.kt +++ b/core/src/main/kotlin/dev/usbharu/multim/error/MultiMError.kt @@ -103,7 +103,7 @@ enum class ErrorType(val message: String) { UNKNOWN("UNKNOWN") } -fun Result.mapMultiMError(): Result { +fun Result.mapMultiMError(): MultiMResult { return when (this) { is Ok -> this is Err -> { diff --git a/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountAccountApi.kt b/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountAccountApi.kt index 2481dae..6c6b195 100644 --- a/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountAccountApi.kt +++ b/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountAccountApi.kt @@ -1,11 +1,10 @@ package dev.usbharu.multim.multi -import com.github.michaelbull.result.Result import com.github.michaelbull.result.flatMap import com.github.michaelbull.result.map import dev.usbharu.multim.Logger import dev.usbharu.multim.api.AccountApi -import dev.usbharu.multim.error.MultiMError +import dev.usbharu.multim.error.MultiMResult import dev.usbharu.multim.model.* import dev.usbharu.multim.multi.model.MultiAccountProfile import dev.usbharu.multim.multi.model.MultiAccountStatus @@ -17,7 +16,7 @@ class MultiAccountAccountApi(private val multiAccountApiBase: MultiAccountApiBas account: Account, since: StatusId?, until: StatusId? - ): Result, MultiMError> { + ): MultiMResult> { Logger.debug("Account Api", "Multi account account api userTimeline") return getImpl2(account) { userTimeline(it, since, until) } .flatMap { @@ -32,23 +31,23 @@ class MultiAccountAccountApi(private val multiAccountApiBase: MultiAccountApiBas } } - override suspend fun follow(account: Account): Result { + override suspend fun follow(account: Account): MultiMResult { Logger.debug("Account Api", "Multi account account api follow") return getImpl2(account) { follow(it) }.map { it.first } } - suspend fun follow(account: MultiAccountData): Result, MultiMError> { + suspend fun follow(account: MultiAccountData): MultiMResult> { Logger.debug("Account Api", "Multi account account api follow with MultiAccountData") return getImpl(account) { follow(it) } } - override suspend fun unfollow(account: Account): Result { + override suspend fun unfollow(account: Account): MultiMResult { Logger.debug("Account Api", "Multi account account api unfollow") return getImpl2(account) { unfollow(it) }.map { it.first } } - override suspend fun profile(account: Account): Result { + override suspend fun profile(account: Account): MultiMResult { Logger.debug("Account Api", "Multi account account api profile") return getImpl2(account) { profile(it) } .flatMap { @@ -65,7 +64,7 @@ class MultiAccountAccountApi(private val multiAccountApiBase: MultiAccountApiBas includeRepost: Boolean, since: StatusId?, until: StatusId? - ): Result, MultiMError> { + ): MultiMResult> { Logger.debug("Account Api", "Multi account account api statuses") return getImpl2(account) { statuses( @@ -88,37 +87,37 @@ class MultiAccountAccountApi(private val multiAccountApiBase: MultiAccountApiBas override suspend fun relationships( myself: Account, other: Account - ): Result { + ): MultiMResult { Logger.debug("Account Api", "Multi account account api relationships") return getImpl2(myself) { relationships(it, other) }.flatMap { it.first } } - override suspend fun requestCancel(account: Account): Result { + override suspend fun requestCancel(account: Account): MultiMResult { Logger.debug("Account Api", "Multi account account api requestCancel") return getImpl2(account) { requestCancel(it) }.map { it.first } } - override suspend fun requestAccept(account: Account): Result { + override suspend fun requestAccept(account: Account): MultiMResult { Logger.debug("Account Api", "Multi account account api requestAccept") return getImpl2(account) { requestAccept(account) }.map { it.first } } - override suspend fun requestReject(account: Account): Result { + override suspend fun requestReject(account: Account): MultiMResult { Logger.debug("Account Api", "Multi account account api requestReject") return getImpl2(account) { requestReject(it) }.map { it.first } } - suspend fun unfollow(account: MultiAccountData): Result, MultiMError> { + suspend fun unfollow(account: MultiAccountData): MultiMResult> { Logger.debug("Account Api", "Multi account account api unfollow with MultiAccountData") return getImpl(account) { unfollow(it) } } - suspend fun profile(account: MultiAccountData): Result, MultiMError> { + suspend fun profile(account: MultiAccountData): MultiMResult> { Logger.debug("Account Api", "Multi account account api profile with MultiAccountData") return getImpl(account) { profile(it) } } - suspend fun statuses(account: MultiAccountData): Result>, MultiMError> { + suspend fun statuses(account: MultiAccountData): MultiMResult>> { Logger.debug("Account Api", "Multi account account api status with MultiAccountData") return getImpl(account) { statuses(it) } } @@ -126,30 +125,30 @@ class MultiAccountAccountApi(private val multiAccountApiBase: MultiAccountApiBas suspend fun relationships( myself: MultiAccountData, other: MultiAccountData - ): Result, MultiMError> { + ): MultiMResult> { Logger.debug("Account Api", "Multi account account api relationships with MultiAccountData") return getImpl(myself) { relationships(it, other.innerData) } } - suspend fun requestCancel(account: MultiAccountData): Result, MultiMError> { + suspend fun requestCancel(account: MultiAccountData): MultiMResult> { Logger.debug("Account Api", "Multi account account api requestCancel with MultiAccountData") return getImpl(account) { requestCancel(it) } } - suspend fun requestAccept(account: MultiAccountData): Result, MultiMError> { + suspend fun requestAccept(account: MultiAccountData): MultiMResult> { Logger.debug("Account Api", "Multi account account api requestAccept with MultiAccountData") return getImpl(account) { requestAccept(it) } } - suspend fun requestReject(account: MultiAccountData): Result, MultiMError> { + suspend fun requestReject(account: MultiAccountData): MultiMResult> { Logger.debug("Account Api", "Multi account account api requestAccept with MultiAccountData") return getImpl(account) { requestReject(it) } } private suspend fun getImpl( apiData: MultiAccountData, - callback: suspend AccountApi.(T) -> Result - ): Result, MultiMError> { + callback: suspend AccountApi.(T) -> MultiMResult + ): MultiMResult> { return accountApi(apiData) .flatMap { callback(it, apiData.innerData) } .map { MultiAccountDataImpl(it, apiData.hashCode) } @@ -158,7 +157,7 @@ class MultiAccountAccountApi(private val multiAccountApiBase: MultiAccountApiBas private suspend fun getImpl2( apiData: T, callback: suspend AccountApi.(T) -> R - ): Result, MultiMError> { + ): MultiMResult> { return accountApi(apiData) .map { callback(it, apiData) } .map { @@ -167,7 +166,7 @@ class MultiAccountAccountApi(private val multiAccountApiBase: MultiAccountApiBas } } - private fun accountApi(id: T): Result { + private fun accountApi(id: T): MultiMResult { return multiAccountApiBase.getImpl((id as? MultiAccountData<*>)?.hashCode) .map { it.accountApi } } diff --git a/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountApiBase.kt b/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountApiBase.kt index 3309b25..5ed64ed 100644 --- a/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountApiBase.kt +++ b/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountApiBase.kt @@ -1,13 +1,21 @@ package dev.usbharu.multim.multi -import com.github.michaelbull.result.* +import com.github.michaelbull.result.map +import com.github.michaelbull.result.onFailure +import com.github.michaelbull.result.onSuccess +import com.github.michaelbull.result.toResultOr import dev.usbharu.multim.Logger import dev.usbharu.multim.MultiM import dev.usbharu.multim.ServiceInfo import dev.usbharu.multim.error.ErrorType import dev.usbharu.multim.error.MultiMError +import dev.usbharu.multim.error.MultiMResult import dev.usbharu.multim.factory.MultiMApis import dev.usbharu.multim.factory.ServiceInfoFactory +import kotlin.collections.List +import kotlin.collections.get +import kotlin.collections.mutableMapOf +import kotlin.collections.set class MultiAccountApiBase(val serviceList: List) { @@ -18,7 +26,7 @@ class MultiAccountApiBase(val serviceList: List) { val apiClientMap = mutableMapOf() var mainClientHashCode: Int? = null - suspend fun addAccount(url: String, token: String): Result { + suspend fun addAccount(url: String, token: String): MultiMResult { Logger.info("Multi Account", "START Add account url:$url token:${"*".repeat(token.length)}") val hashCode = (url + token).hashCode() @@ -52,7 +60,7 @@ class MultiAccountApiBase(val serviceList: List) { return result } - suspend fun addMainAccount(url: String, token: String): Result { + suspend fun addMainAccount(url: String, token: String): MultiMResult { Logger.info( "Multi Account", "Add account url:$url token:${"*".repeat(token.length)} as main account." @@ -60,7 +68,7 @@ class MultiAccountApiBase(val serviceList: List) { return addAccount(url, token).map { mainClientHashCode = it;it } } - fun getImpl(hashCode: Int? = mainClientHashCode): Result { + fun getImpl(hashCode: Int? = mainClientHashCode): MultiMResult { Logger.debug("Multi Account", "Get api client impl $hashCode") if (hashCode == null) { Logger.warn("Multi Account", "HashCode is null! Use main account.") diff --git a/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountEmojiApi.kt b/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountEmojiApi.kt index d35d727..31a8191 100644 --- a/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountEmojiApi.kt +++ b/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountEmojiApi.kt @@ -1,11 +1,9 @@ package dev.usbharu.multim.multi -import com.github.michaelbull.result.Result import com.github.michaelbull.result.flatMap import com.github.michaelbull.result.map import dev.usbharu.multim.Logger import dev.usbharu.multim.api.EmojiApi -import dev.usbharu.multim.error.MultiMError import dev.usbharu.multim.error.MultiMResult import dev.usbharu.multim.model.Emoji @@ -32,8 +30,8 @@ class MultiAccountEmojiApi(val multiAccountApiBase: MultiAccountApiBase) : Emoji private suspend fun getImpl( apiData: MultiAccountData, - callback: suspend EmojiApi.(T) -> Result - ): Result, MultiMError> { + callback: suspend EmojiApi.(T) -> MultiMResult + ): MultiMResult> { return emojiApi(apiData) .flatMap { callback(it, apiData.innerData) } .map { MultiAccountDataImpl(it, apiData.hashCode) } @@ -42,7 +40,7 @@ class MultiAccountEmojiApi(val multiAccountApiBase: MultiAccountApiBase) : Emoji private suspend fun getImpl2( apiData: T, callback: suspend EmojiApi.(T) -> R - ): Result, MultiMError> { + ): MultiMResult> { return emojiApi(apiData) .map { callback(it, apiData) } .map { @@ -51,7 +49,7 @@ class MultiAccountEmojiApi(val multiAccountApiBase: MultiAccountApiBase) : Emoji } } - private fun emojiApi(id: T): Result { + private fun emojiApi(id: T): MultiMResult { return multiAccountApiBase.getImpl((id as? MultiAccountData<*>)?.hashCode) .map { it.emojiApi } } diff --git a/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountIApi.kt b/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountIApi.kt index 9ddb102..c637c16 100644 --- a/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountIApi.kt +++ b/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountIApi.kt @@ -1,11 +1,9 @@ package dev.usbharu.multim.multi -import com.github.michaelbull.result.Result import com.github.michaelbull.result.flatMap import com.github.michaelbull.result.map import dev.usbharu.multim.Logger import dev.usbharu.multim.api.IApi -import dev.usbharu.multim.error.MultiMError import dev.usbharu.multim.error.MultiMResult import dev.usbharu.multim.model.Profile import dev.usbharu.multim.model.Status @@ -41,8 +39,8 @@ class MultiAccountIApi(val multiAccountApiBase: MultiAccountApiBase) : IApi { private suspend fun getImpl( apiData: MultiAccountData, - callback: suspend IApi.(T) -> Result - ): Result, MultiMError> { + callback: suspend IApi.(T) -> MultiMResult + ): MultiMResult> { return iApi(apiData) .flatMap { callback(it, apiData.innerData) } .map { MultiAccountDataImpl(it, apiData.hashCode) } @@ -52,7 +50,7 @@ class MultiAccountIApi(val multiAccountApiBase: MultiAccountApiBase) : IApi { private suspend fun getImpl2( apiData: T, callback: suspend IApi.(T) -> R - ): Result, MultiMError> { + ): MultiMResult> { val timelineApi = iApi(apiData) return timelineApi.map { callback(it, apiData) to ( @@ -61,7 +59,7 @@ class MultiAccountIApi(val multiAccountApiBase: MultiAccountApiBase) : IApi { } } - private fun iApi(id: T): Result { + private fun iApi(id: T): MultiMResult { Logger.debug("I Api", "Multi account timeline api timelineApi with MultiAccountData") return multiAccountApiBase.getImpl((id as? MultiAccountData<*>)?.hashCode) .map { it.i } diff --git a/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountStatusApi.kt b/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountStatusApi.kt index 194ccad..09cb04d 100644 --- a/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountStatusApi.kt +++ b/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountStatusApi.kt @@ -1,79 +1,77 @@ package dev.usbharu.multim.multi -import com.github.michaelbull.result.Result import com.github.michaelbull.result.flatMap import com.github.michaelbull.result.map import dev.usbharu.multim.Logger import dev.usbharu.multim.api.StatusApi -import dev.usbharu.multim.error.MultiMError import dev.usbharu.multim.error.MultiMResult import dev.usbharu.multim.model.* import dev.usbharu.multim.multi.model.MultiAccountReaction import dev.usbharu.multim.multi.model.MultiAccountStatus class MultiAccountStatusApi(private val multiAccountApiBase: MultiAccountApiBase) : StatusApi { - suspend fun post(status: MultiAccountData): Result, MultiMError> { + suspend fun post(status: MultiAccountData): MultiMResult> { Logger.debug("Status Api", "Multi account status api post with MultiAccountData") return getImpl(status) { post(it) } } - suspend fun delete(id: MultiAccountData): Result, MultiMError> { + suspend fun delete(id: MultiAccountData): MultiMResult> { Logger.debug("Status Api", "Multi account status api delete with MultiAccountData") return getImpl(id) { delete(it) } } - suspend fun findById(id: MultiAccountData): Result, MultiMError> { + suspend fun findById(id: MultiAccountData): MultiMResult> { Logger.debug("Status Api", "Multi account status api findById with MultiAccountData") return getImpl(id) { findById(it) } } suspend fun addReaction( id: MultiAccountData, reaction: MultiAccountData - ): Result, MultiMError> { + ): MultiMResult> { Logger.debug("Status Api", "Multi account status api addReaction with MultiAccountData") return getImpl(id) { addReaction(it, reaction.innerData) } } suspend fun removeReaction( id: MultiAccountData, reaction: MultiAccountData - ): Result, MultiMError> { + ): MultiMResult> { Logger.debug("Status Api", "Multi account status api removeReaction with MultiAccountData") return getImpl(id) { removeReaction(it, reaction.innerData) } } - suspend fun reactions(id: MultiAccountData): Result>, MultiMError> { + suspend fun reactions(id: MultiAccountData): MultiMResult>> { Logger.debug("Status Api", "Multi account status api reactions with MultiAccountData") return getImpl(id) { reactions(it) } } - suspend fun replies(id: MultiAccountData): Result>, MultiMError> { + suspend fun replies(id: MultiAccountData): MultiMResult>> { Logger.debug("Status Api", "Multi account status api replies with MultiAccountData") return getImpl(id) { replies(it) } } - suspend fun repost(id: MultiAccountData): Result, MultiMError> { + suspend fun repost(id: MultiAccountData): MultiMResult> { Logger.debug("Status Api", "Multi account status api repost with MultiAccountData") return getImpl(id) { repost(it) } } - suspend fun unRepost(id: MultiAccountData): Result, MultiMError> { + suspend fun unRepost(id: MultiAccountData): MultiMResult> { Logger.debug("Status Api", "Multi account status api unRepost with MultiAccountData") return getImpl(id) { unRepost(it) } } suspend fun replyTo( id: MultiAccountData, status: MultiAccountData - ): Result, MultiMError> { + ): MultiMResult> { Logger.debug("Status Api", "Multi account status api replyTo with MultiAccountData") return getImpl(id) { replyTo(it, status.innerData) } } - suspend fun addToBookmarks(id: MultiAccountData): Result, MultiMError> { + suspend fun addToBookmarks(id: MultiAccountData): MultiMResult> { Logger.debug("Status Api", "Multi account status api addToBookmarks with MultiAccountData") return getImpl(id) { addToBookmarks(it) } } - suspend fun removeFromBookmarks(id: MultiAccountData): Result, MultiMError> { + suspend fun removeFromBookmarks(id: MultiAccountData): MultiMResult> { Logger.debug( "Status Api", "Multi account status api removeFromBookmarks with MultiAccountData" @@ -81,7 +79,7 @@ class MultiAccountStatusApi(private val multiAccountApiBase: MultiAccountApiBase return getImpl(id) { removeFromBookmarks(it) } } - suspend fun getPreviousAndNext(id: MultiAccountData): Result, MultiMError> { + suspend fun getPreviousAndNext(id: MultiAccountData): MultiMResult> { Logger.debug( "Status Api", "Multi account status api getPreviousAndNext with MultiAccountData" @@ -90,15 +88,15 @@ class MultiAccountStatusApi(private val multiAccountApiBase: MultiAccountApiBase } private suspend fun getImpl( - apiData: MultiAccountData, callback: suspend StatusApi.(T) -> Result - ): Result, MultiMError> { + apiData: MultiAccountData, callback: suspend StatusApi.(T) -> MultiMResult + ): MultiMResult> { return statusApi(apiData).flatMap { callback(it, apiData.innerData) } .map { MultiAccountDataImpl(it, apiData.hashCode) } } private suspend fun getImpl2( apiData: T, callback: suspend StatusApi.(T) -> R - ): Result, MultiMError> { + ): MultiMResult> { return statusApi(apiData).map { callback( it, apiData @@ -107,13 +105,13 @@ class MultiAccountStatusApi(private val multiAccountApiBase: MultiAccountApiBase } } - private fun statusApi(id: T): Result { + private fun statusApi(id: T): MultiMResult { return multiAccountApiBase.getImpl((id as? MultiAccountData<*>)?.hashCode) .map { it.statusApi } } - override suspend fun post(status: StatusForPost): Result { + override suspend fun post(status: StatusForPost): MultiMResult { Logger.debug("Status Api", "Multi account status api post") return getImpl2(status) { post(it) }.flatMap { it.first.map { iStatus -> @@ -123,29 +121,29 @@ class MultiAccountStatusApi(private val multiAccountApiBase: MultiAccountApiBase } - override suspend fun delete(id: StatusId): Result { + override suspend fun delete(id: StatusId): MultiMResult { Logger.debug("Status Api", "Multi account status api delete") return getImpl2(id) { delete(it) }.map { it.first } } - override suspend fun findById(id: StatusId): Result { + override suspend fun findById(id: StatusId): MultiMResult { Logger.debug("Status Api", "Multi account status api findById") return getImpl2(id) { findById(it) }.flatMap { it.first.map { iStatus -> (iStatus to it.second).toMultiAccount() } } } - override suspend fun addReaction(id: StatusId, reaction: Reaction): Result { + override suspend fun addReaction(id: StatusId, reaction: Reaction): MultiMResult { Logger.debug("Status Api", "Multi account status api addReaction") return getImpl2(id) { addReaction(it, reaction) }.map { it.first } } override suspend fun removeReaction( id: StatusId, reaction: Reaction? - ): Result { + ): MultiMResult { Logger.debug("Status Api", "Multi account status api removeReaction") return getImpl2(id) { removeReaction(it, reaction) }.map { it.first } } - override suspend fun reactions(id: StatusId): Result, MultiMError> { + override suspend fun reactions(id: StatusId): MultiMResult> { Logger.debug("Status Api", "Multi account status api reactions") return getImpl2(id) { reactions(it) }.let { it.flatMap { @@ -160,7 +158,7 @@ class MultiAccountStatusApi(private val multiAccountApiBase: MultiAccountApiBase } } - override suspend fun replies(id: StatusId): Result, MultiMError> { + override suspend fun replies(id: StatusId): MultiMResult> { Logger.debug("Status Api", "Multi account status api replies") return getImpl2(id) { replies(it) }.flatMap { it.first.map { statusList -> @@ -173,17 +171,17 @@ class MultiAccountStatusApi(private val multiAccountApiBase: MultiAccountApiBase } } - override suspend fun repost(id: StatusId): Result { + override suspend fun repost(id: StatusId): MultiMResult { Logger.debug("Status Api", "Multi account status api repost") return getImpl2(id) { repost(it) }.flatMap { it.first.map { iStatus -> (iStatus to it.second).toMultiAccount() } } } - override suspend fun unRepost(id: StatusId): Result { + override suspend fun unRepost(id: StatusId): MultiMResult { Logger.debug("Status Api", "Multi account status api unRepost") return getImpl2(id) { unRepost(it) }.map { it.first } } - override suspend fun replyTo(id: StatusId, status: StatusForPost): Result { + override suspend fun replyTo(id: StatusId, status: StatusForPost): MultiMResult { Logger.debug("Status Api", "Multi account status api replyTo") return getImpl2(status) { replyTo( @@ -192,17 +190,17 @@ class MultiAccountStatusApi(private val multiAccountApiBase: MultiAccountApiBase }.flatMap { it.first.map { iStatus -> (iStatus to it.second).toMultiAccount() } } } - override suspend fun addToBookmarks(id: StatusId): Result { + override suspend fun addToBookmarks(id: StatusId): MultiMResult { Logger.debug("Status Api", "Multi account status api addToBookmarks") return getImpl2(id) { addToBookmarks(it) }.map { it.first } } - override suspend fun removeFromBookmarks(id: StatusId): Result { + override suspend fun removeFromBookmarks(id: StatusId): MultiMResult { Logger.debug("Status Api", "Multi account status api removeFromBookmarks") return getImpl2(id) { removeFromBookmarks(it) }.map { it.first } } - override suspend fun getPreviousAndNext(id: StatusId): Result { + override suspend fun getPreviousAndNext(id: StatusId): MultiMResult { Logger.debug("Status Api", "Multi account status api getPreviousAndNext") return getImpl2(id) { getPreviousAndNext(it) }.flatMap { it.first } } diff --git a/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountTimelineApi.kt b/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountTimelineApi.kt index e89a1aa..9084511 100644 --- a/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountTimelineApi.kt +++ b/core/src/main/kotlin/dev/usbharu/multim/multi/MultiAccountTimelineApi.kt @@ -1,18 +1,17 @@ package dev.usbharu.multim.multi -import com.github.michaelbull.result.Result import com.github.michaelbull.result.flatMap import com.github.michaelbull.result.map import dev.usbharu.multim.Logger import dev.usbharu.multim.api.TimelineApi -import dev.usbharu.multim.error.MultiMError +import dev.usbharu.multim.error.MultiMResult import dev.usbharu.multim.model.Status import dev.usbharu.multim.model.Timeline import dev.usbharu.multim.multi.model.MultiAccountStatus class MultiAccountTimelineApi(private val multiAccountApiBase: MultiAccountApiBase) : TimelineApi { - suspend fun availableTimelines(id: MultiAccountData<*>): Result>, MultiMError> { + suspend fun availableTimelines(id: MultiAccountData<*>): MultiMResult>> { Logger.debug( "Timeline Api", "Multi account timeline api availableTimelines with MultiAccountData" @@ -20,7 +19,7 @@ class MultiAccountTimelineApi(private val multiAccountApiBase: MultiAccountApiBa return getImpl(id) { availableTimelines() } } - suspend fun availableTimelines(hashCode: Int): Result>, MultiMError> { + suspend fun availableTimelines(hashCode: Int): MultiMResult>> { Logger.debug("Timeline Api", "Multi account timeline api availableTimelines") return multiAccountApiBase.getImpl(hashCode) .flatMap { it.timelineApi.availableTimelines() } @@ -31,12 +30,12 @@ class MultiAccountTimelineApi(private val multiAccountApiBase: MultiAccountApiBa suspend fun listen( timeline: MultiAccountData, callback: MultiAccountData<(List) -> Unit> - ): Result, MultiMError> { + ): MultiMResult> { Logger.debug("Timeline Api", "Multi account timeline api listen with MultiAccountData") return getImpl(timeline) { listen(it, callback.innerData as (List) -> Unit) } } - suspend fun connect(timeline: MultiAccountData): Result, MultiMError> { + suspend fun connect(timeline: MultiAccountData): MultiMResult> { Logger.debug("Timeline Api", "Multi account timeline api connect with MultiAccountData") return getImpl(timeline) { connect(it) } } @@ -44,15 +43,15 @@ class MultiAccountTimelineApi(private val multiAccountApiBase: MultiAccountApiBa suspend fun disconnect( timeline: MultiAccountData, force: Boolean = false - ): Result, MultiMError> { + ): MultiMResult> { Logger.debug("Timeline Api", "Multi account timeline api disconnect with MultiAccountData") return getImpl(timeline) { disconnect(it, force) } } private suspend fun getImpl( apiData: MultiAccountData, - callback: suspend TimelineApi.(T) -> Result - ): Result, MultiMError> { + callback: suspend TimelineApi.(T) -> MultiMResult + ): MultiMResult> { return timelineApi(apiData) .flatMap { callback(it, apiData.innerData) } .map { MultiAccountDataImpl(it, apiData.hashCode) } @@ -62,7 +61,7 @@ class MultiAccountTimelineApi(private val multiAccountApiBase: MultiAccountApiBa private suspend fun getImpl2( apiData: T, callback: suspend TimelineApi.(T) -> R - ): Result, MultiMError> { + ): MultiMResult> { val timelineApi = timelineApi(apiData) return timelineApi.map { callback(it, apiData) to ( @@ -71,13 +70,13 @@ class MultiAccountTimelineApi(private val multiAccountApiBase: MultiAccountApiBa } } - private fun timelineApi(id: T): Result { + private fun timelineApi(id: T): MultiMResult { Logger.debug("Timeline Api", "Multi account timeline api timelineApi with MultiAccountData") return multiAccountApiBase.getImpl((id as? MultiAccountData<*>)?.hashCode) .map { it.timelineApi } } - override suspend fun availableTimelines(): Result, MultiMError> { + override suspend fun availableTimelines(): MultiMResult> { Logger.debug("Timeline Api", "Multi account timeline api availableTimelines") TODO("Not yet implemented") } @@ -85,17 +84,17 @@ class MultiAccountTimelineApi(private val multiAccountApiBase: MultiAccountApiBa override suspend fun listen( timeline: Timeline, callback: (List) -> Unit - ): Result { + ): MultiMResult { Logger.debug("Timeline Api", "Multi account timeline api listen") return getImpl2(timeline) { listen(it, callback) }.map { it.first } } - override suspend fun connect(timeline: Timeline): Result { + override suspend fun connect(timeline: Timeline): MultiMResult { Logger.debug("Timeline Api", "Multi account timeline api connect") return getImpl2(timeline) { connect(it) }.map { it.first } } - override suspend fun disconnect(timeline: Timeline, force: Boolean): Result { + override suspend fun disconnect(timeline: Timeline, force: Boolean): MultiMResult { Logger.debug("Timeline Api", "Multi account timeline api disconnect") return getImpl2(timeline) { disconnect(it, force) }.map { it.first } } diff --git a/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Ap.kt b/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Ap.kt index 6cd3867..49eef04 100644 --- a/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Ap.kt +++ b/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Ap.kt @@ -1,6 +1,5 @@ package dev.usbharu.multim.misskey.v12.api -import com.github.michaelbull.result.Result import com.github.michaelbull.result.mapError import dev.usbharu.multim.error.* import dev.usbharu.multim.misskey.v12.common.api.MisskeyApiClient @@ -9,7 +8,7 @@ import dev.usbharu.multim.misskey.v12.model.ApShowResponse import io.ktor.client.plugins.* class Ap(val client: MisskeyApiClient) { - suspend fun show(apShowRequest: ApShowRequest): Result { + suspend fun show(apShowRequest: ApShowRequest): MultiMResult { return client.post(apShowRequest, "api/ap/show").mapError { val multiMError: MultiMError = when (it) { is HttpClientServerError -> MultiMHttpError(it.throwable as ServerResponseException) diff --git a/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Drive.kt b/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Drive.kt index 9b9e9f0..020c0c3 100644 --- a/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Drive.kt +++ b/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Drive.kt @@ -1,7 +1,6 @@ package dev.usbharu.multim.misskey.v12.api -import com.github.michaelbull.result.Result -import dev.usbharu.multim.error.MultiMError +import dev.usbharu.multim.error.MultiMResult import dev.usbharu.multim.error.mapMultiMError import dev.usbharu.multim.misskey.v12.common.api.MisskeyApiClient import dev.usbharu.multim.misskey.v12.model.* @@ -11,16 +10,16 @@ import io.ktor.http.* class Drive(val client: MisskeyApiClient) { - suspend fun drive(): Result { + suspend fun drive(): MultiMResult { return client.postEmpty("api/drive").mapMultiMError() } - suspend fun files(filesRequest: DriveFilesRequest): Result { + suspend fun files(filesRequest: DriveFilesRequest): MultiMResult { return client.post(filesRequest, "api/drive/files") .mapMultiMError() } - suspend fun folders(foldersRequest: DriveFoldersRequest): Result { + suspend fun folders(foldersRequest: DriveFoldersRequest): MultiMResult { return client.post( foldersRequest, "api/drive/folders" @@ -28,14 +27,14 @@ class Drive(val client: MisskeyApiClient) { } inner class Files { - suspend fun attachedNotes(attachedNotesRequest: DriveFilesAttachedNotesRequest): Result { + suspend fun attachedNotes(attachedNotesRequest: DriveFilesAttachedNotesRequest): MultiMResult { return client.post( attachedNotesRequest, "api/drive/files/attached-notes" ).mapMultiMError() } - suspend fun checkExistence(checkExistenceRequest: DriveFilesCheckExistenceRequest): Result { + suspend fun checkExistence(checkExistenceRequest: DriveFilesCheckExistenceRequest): MultiMResult { return client.post( checkExistenceRequest, "api/drive/files/check-existence" @@ -55,47 +54,47 @@ class Drive(val client: MisskeyApiClient) { // return client.post(createRequest, "api/drive/files/create") } - suspend fun delete(deleteRequest: DriveFilesDeleteRequest): Result { + suspend fun delete(deleteRequest: DriveFilesDeleteRequest): MultiMResult { return client.postWithoutResponse(deleteRequest, "api/drive/files/delete") .mapMultiMError() } - suspend fun findByHash(findByHashRequest: DriveFilesFindByHashRequest): Result { + suspend fun findByHash(findByHashRequest: DriveFilesFindByHashRequest): MultiMResult { return client.post( findByHashRequest, "api/drive/files/find-by-hash" ).mapMultiMError() } - suspend fun find(findRequest: DriveFilesFindRequest): Result { + suspend fun find(findRequest: DriveFilesFindRequest): MultiMResult { return client.post( findRequest, "api/drive/files/find" ).mapMultiMError() } - suspend fun show(showRequest: DriveFilesShowRequestByUrl): Result { + suspend fun show(showRequest: DriveFilesShowRequestByUrl): MultiMResult { return client.post( showRequest, "api/drive/files/show" ).mapMultiMError() } - suspend fun show(showRequest: DriveFilesShowRequestByFileId): Result { + suspend fun show(showRequest: DriveFilesShowRequestByFileId): MultiMResult { return client.post( showRequest, "api/drive/files/show" ).mapMultiMError() } - suspend fun update(updateRequest: DriveFilesUpdateRequest): Result { + suspend fun update(updateRequest: DriveFilesUpdateRequest): MultiMResult { return client.post( updateRequest, "api/drive/files/update" ).mapMultiMError() } - suspend fun uploadFromUrl(uploadFromUrlRequest: DriveFilesUploadFromUrlRequest): Result { + suspend fun uploadFromUrl(uploadFromUrlRequest: DriveFilesUploadFromUrlRequest): MultiMResult { return client.postWithoutResponse( uploadFromUrlRequest, "api/drive/files/upload-from-url" @@ -104,19 +103,19 @@ class Drive(val client: MisskeyApiClient) { } inner class Folders { - suspend fun create(foldersCreateRequest: DriveFoldersCreateRequest): Result { + suspend fun create(foldersCreateRequest: DriveFoldersCreateRequest): MultiMResult { return client.post( foldersCreateRequest, "api/drive/folders/create" ).mapMultiMError() } - suspend fun delete(foldersDeleteRequest: DriveFoldersDeleteRequest): Result { + suspend fun delete(foldersDeleteRequest: DriveFoldersDeleteRequest): MultiMResult { return client.postWithoutResponse(foldersDeleteRequest, "api/drive/folders/delete") .mapMultiMError() } - suspend fun find(foldersFindRequest: DriveFoldersFindRequest): Result { + suspend fun find(foldersFindRequest: DriveFoldersFindRequest): MultiMResult { return client.post( foldersFindRequest, "api/drive/folders/find" diff --git a/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Following.kt b/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Following.kt index c27680e..7954faa 100644 --- a/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Following.kt +++ b/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Following.kt @@ -1,27 +1,26 @@ package dev.usbharu.multim.misskey.v12.api -import com.github.michaelbull.result.Result -import dev.usbharu.multim.error.MultiMError +import dev.usbharu.multim.error.MultiMResult import dev.usbharu.multim.error.mapMultiMError import dev.usbharu.multim.misskey.v12.common.api.MisskeyApiClient import dev.usbharu.multim.misskey.v12.model.* class Following(val client: MisskeyApiClient) { - suspend fun create(followingCreateRequest: FollowingCreateRequest): Result { + suspend fun create(followingCreateRequest: FollowingCreateRequest): MultiMResult { return client.post( followingCreateRequest, "api/following/create" ).mapMultiMError() } - suspend fun delete(followingDeleteRequest: FollowingDeleteRequest): Result { + suspend fun delete(followingDeleteRequest: FollowingDeleteRequest): MultiMResult { return client.post( followingDeleteRequest, "api/following/delete" ).mapMultiMError() } - suspend fun invalidate(followingInvalidateRequest: FollowingInvalidateRequest): Result { + suspend fun invalidate(followingInvalidateRequest: FollowingInvalidateRequest): MultiMResult { return client.post( followingInvalidateRequest, "api/following/invalidate" @@ -29,26 +28,26 @@ class Following(val client: MisskeyApiClient) { } inner class Requests { - suspend fun accept(followingRequestsAcceptRequest: FollowingRequestsAcceptRequest): Result { + suspend fun accept(followingRequestsAcceptRequest: FollowingRequestsAcceptRequest): MultiMResult { return client.postWithoutResponse( followingRequestsAcceptRequest, "api/following/requests/list" ).mapMultiMError() } - suspend fun cancel(followingRequestsCancelRequest: FollowingRequestsCancelRequest): Result { + suspend fun cancel(followingRequestsCancelRequest: FollowingRequestsCancelRequest): MultiMResult { return client.postWithoutResponse( followingRequestsCancelRequest, "api/following/requests/cancel" ).mapMultiMError() } - suspend fun list(): Result { + suspend fun list(): MultiMResult { return client.postEmpty("api/following/requests/list") .mapMultiMError() } - suspend fun reject(followingRequestsRejectRequest: FollowingRequestsRejectRequest): Result { + suspend fun reject(followingRequestsRejectRequest: FollowingRequestsRejectRequest): MultiMResult { return client.postWithoutResponse( followingRequestsRejectRequest, "api/following/requests/reject" diff --git a/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Miauth.kt b/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Miauth.kt index d109e83..1300e2c 100644 --- a/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Miauth.kt +++ b/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Miauth.kt @@ -1,8 +1,7 @@ package dev.usbharu.multim.misskey.v12.api -import com.github.michaelbull.result.Result import com.github.michaelbull.result.map -import dev.usbharu.multim.error.MultiMError +import dev.usbharu.multim.error.MultiMResult import dev.usbharu.multim.error.mapMultiMError import dev.usbharu.multim.misskey.v12.common.api.MisskeyApiClient import dev.usbharu.multim.misskey.v12.model.MiauthCheckRequest @@ -13,7 +12,7 @@ import java.util.* class Miauth(val client: MisskeyApiClient) { - suspend fun auth(): Result { + suspend fun auth(): MultiMResult { val body = client.get(client.baseUrl + "/miauth/" + UUID.randomUUID() + "/") { url { @@ -25,7 +24,7 @@ class Miauth(val client: MisskeyApiClient) { return body.mapMultiMError() } - suspend fun check(params: MiauthCheckRequest): Result { + suspend fun check(params: MiauthCheckRequest): MultiMResult { return client.postEmpty("", "/api/miauth/${params.sessionId}/check") .mapMultiMError() } diff --git a/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Notes.kt b/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Notes.kt index 7fa969a..c0e017f 100644 --- a/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Notes.kt +++ b/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/api/Notes.kt @@ -1,7 +1,5 @@ package dev.usbharu.multim.misskey.v12.api -import com.github.michaelbull.result.Result -import dev.usbharu.multim.error.MultiMError import dev.usbharu.multim.error.MultiMResult import dev.usbharu.multim.error.mapMultiMError import dev.usbharu.multim.misskey.v12.common.api.MisskeyApiClient @@ -10,33 +8,33 @@ import dev.usbharu.multim.misskey.v12.model.components.Note class Notes(val client: MisskeyApiClient) { - suspend fun globalTimeline(globalTimelineRequest: NotesGlobalTimelineRequest = NotesGlobalTimelineRequest()): Result { + suspend fun globalTimeline(globalTimelineRequest: NotesGlobalTimelineRequest = NotesGlobalTimelineRequest()): MultiMResult { return client.post( globalTimelineRequest, "api/notes/global-timeline" ).mapMultiMError() } - suspend fun hybridTimeline(hybridTimelineRequest: NotesHybridTimelineRequest = NotesHybridTimelineRequest()): Result { + suspend fun hybridTimeline(hybridTimelineRequest: NotesHybridTimelineRequest = NotesHybridTimelineRequest()): MultiMResult { return client.post( hybridTimelineRequest, "api/notes/hybrid-timeline" ).mapMultiMError() } - suspend fun localTimeline(localTimelineRequest: NotesLocalTimelineRequest = NotesLocalTimelineRequest()): Result { + suspend fun localTimeline(localTimelineRequest: NotesLocalTimelineRequest = NotesLocalTimelineRequest()): MultiMResult { return client.post( localTimelineRequest, "api/notes/local-timeline" ).mapMultiMError() } - suspend fun show(showRequest: NotesShowRequest): Result { + suspend fun show(showRequest: NotesShowRequest): MultiMResult { return client.post(showRequest, "api/notes/show") .mapMultiMError() } - suspend fun create(createRequest: NotesCreateRequest): Result { + suspend fun create(createRequest: NotesCreateRequest): MultiMResult { return client.post( createRequest, "api/notes/create" @@ -47,80 +45,80 @@ class Notes(val client: MisskeyApiClient) { client.postWithoutResponse(deleteRequest, "api/notes/delete").mapMultiMError() } - suspend fun featured(featuredRequest: NotesFeaturedRequest = NotesFeaturedRequest()): Result { + suspend fun featured(featuredRequest: NotesFeaturedRequest = NotesFeaturedRequest()): MultiMResult { return client.post( featuredRequest, "api/notes/featured" ).mapMultiMError() } - suspend fun mentions(mentionsRequest: NotesMentionsRequest): Result { + suspend fun mentions(mentionsRequest: NotesMentionsRequest): MultiMResult { return client.post( mentionsRequest, "api/notes/mentions" ).mapMultiMError() } - suspend fun children(childrenRequest: NotesChildrenRequest): Result { + suspend fun children(childrenRequest: NotesChildrenRequest): MultiMResult { return client.post( childrenRequest, "api/notes/children" ).mapMultiMError() } - suspend fun notes(notesRequest: NotesNotesRequest): Result { + suspend fun notes(notesRequest: NotesNotesRequest): MultiMResult { return client.post(notesRequest, "api/notes") .mapMultiMError() } - suspend fun conversation(conversationRequest: NotesConversationRequest): Result { + suspend fun conversation(conversationRequest: NotesConversationRequest): MultiMResult { return client.post( conversationRequest, "api/notes/conversation" ).mapMultiMError() } - suspend fun reactions(reactionsRequest: NotesReactionsRequest): Result { + suspend fun reactions(reactionsRequest: NotesReactionsRequest): MultiMResult { return client.post( reactionsRequest, "api/notes/reactions" ).mapMultiMError() } - suspend fun renotes(renoteRequest: NotesRenoteRequest): Result { + suspend fun renotes(renoteRequest: NotesRenoteRequest): MultiMResult { return client.post( renoteRequest, "api/notes/renotes" ).mapMultiMError() } - suspend fun replies(repliesRequest: NotesRepliesRequest): Result { + suspend fun replies(repliesRequest: NotesRepliesRequest): MultiMResult { return client.post( repliesRequest, "api/notes/replies" ).mapMultiMError() } - suspend fun searchByTag(searchByTagRequest: NotesSearchByTagRequest): Result { + suspend fun searchByTag(searchByTagRequest: NotesSearchByTagRequest): MultiMResult { return client.post( searchByTagRequest, "api/notes/search-by-tag" ).mapMultiMError() } - suspend fun search(searchRequest: NotesSearchRequest): Result { + suspend fun search(searchRequest: NotesSearchRequest): MultiMResult { return client.post( searchRequest, "api/notes/search" ).mapMultiMError() } - suspend fun state(stateRequest: NotesStateRequest): Result { + suspend fun state(stateRequest: NotesStateRequest): MultiMResult { return client.post(stateRequest, "api/notes/state") .mapMultiMError() } - suspend fun timeline(timelineRequest: NotesTimelineRequest): Result { + suspend fun timeline(timelineRequest: NotesTimelineRequest): MultiMResult { return client.post( timelineRequest, "api/notes/timeline" @@ -134,7 +132,7 @@ class Notes(val client: MisskeyApiClient) { ).mapMultiMError() } - suspend fun unrenote(unrenoteRequest: NotesUnrenoteRequest): Result { + suspend fun unrenote(unrenoteRequest: NotesUnrenoteRequest): MultiMResult { return client.postWithoutResponse(unrenoteRequest, "api/notes/unrenote").mapMultiMError() } @@ -163,14 +161,14 @@ class Notes(val client: MisskeyApiClient) { } inner class ThreadMuting { - suspend fun create(threadMutingCreateRequest: NotesThreadMutingCreateRequest): Result { + suspend fun create(threadMutingCreateRequest: NotesThreadMutingCreateRequest): MultiMResult { return client.postWithoutResponse( threadMutingCreateRequest, "api/notes/thread-muting/create" ).mapMultiMError() } - suspend fun delete(threadMutingDeleteRequest: NotesThreadMutingDeleteRequest): Result { + suspend fun delete(threadMutingDeleteRequest: NotesThreadMutingDeleteRequest): MultiMResult { return client.postWithoutResponse( threadMutingDeleteRequest, "api/notes/thread-muting/delete" @@ -179,36 +177,36 @@ class Notes(val client: MisskeyApiClient) { } inner class Watching { - suspend fun create(watchingCreateRequest: NotesWatchingCreateRequest): Result { + suspend fun create(watchingCreateRequest: NotesWatchingCreateRequest): MultiMResult { return client.postWithoutResponse(watchingCreateRequest, "api/notes/watching/create") .mapMultiMError() } - suspend fun delete(watchingDeleteRequest: NotesWatchingDeleteRequest): Result { + suspend fun delete(watchingDeleteRequest: NotesWatchingDeleteRequest): MultiMResult { return client.postWithoutResponse(watchingDeleteRequest, "api/notes/watching/delete") .mapMultiMError() } } inner class Favorites { - suspend fun create(favoritesCreateRequest: NotesFavoritesCreateRequest): Result { + suspend fun create(favoritesCreateRequest: NotesFavoritesCreateRequest): MultiMResult { return client.postWithoutResponse(favoritesCreateRequest, "api/notes/favorites/create") .mapMultiMError() } - suspend fun delete(favoritesDeleteRequest: NotesFavoritesDeleteRequest): Result { + suspend fun delete(favoritesDeleteRequest: NotesFavoritesDeleteRequest): MultiMResult { return client.postWithoutResponse(favoritesDeleteRequest, "api/notes/favorites/delete") .mapMultiMError() } } inner class Reaction { - suspend fun create(reactionCreateRequest: NotesReactionCreateRequest): Result { + suspend fun create(reactionCreateRequest: NotesReactionCreateRequest): MultiMResult { return client.postWithoutResponse(reactionCreateRequest, "api/notes/reactions/create") .mapMultiMError() } - suspend fun delete(reactionDeleteRequest: NotesReactionDeleteRequest): Result { + suspend fun delete(reactionDeleteRequest: NotesReactionDeleteRequest): MultiMResult { return client.postWithoutResponse(reactionDeleteRequest, "api/notes/reactions/delete") .mapMultiMError() } diff --git a/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/common/api/MisskeyAccountApi.kt b/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/common/api/MisskeyAccountApi.kt index 1adbe73..cdbba66 100644 --- a/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/common/api/MisskeyAccountApi.kt +++ b/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/common/api/MisskeyAccountApi.kt @@ -2,11 +2,11 @@ package dev.usbharu.multim.misskey.v12.common.api import com.github.michaelbull.result.Err import com.github.michaelbull.result.Ok -import com.github.michaelbull.result.Result import com.github.michaelbull.result.map import dev.usbharu.multim.api.AccountApi import dev.usbharu.multim.error.ErrorType import dev.usbharu.multim.error.MultiMError +import dev.usbharu.multim.error.MultiMResult import dev.usbharu.multim.error.TODO import dev.usbharu.multim.misskey.v12.api.MisskeyApis import dev.usbharu.multim.misskey.v12.common.* @@ -24,7 +24,7 @@ class MisskeyAccountApi(val misskeyApis: MisskeyApis) : AccountApi { account: Account, since: StatusId?, until: StatusId? - ): Result, MultiMError> { + ): MultiMResult> { if (account is MisskeyAccount && since is MisskeyStatusId? && until is MisskeyStatusId?) { return misskeyApis.users.notes( UsersNotesRequest( @@ -43,7 +43,7 @@ class MisskeyAccountApi(val misskeyApis: MisskeyApis) : AccountApi { } } - override suspend fun follow(account: Account): Result { + override suspend fun follow(account: Account): MultiMResult { return if (account is MisskeyAccount) { misskeyApis.following.create(FollowingCreateRequest(account.id)).map { } } else { @@ -51,7 +51,7 @@ class MisskeyAccountApi(val misskeyApis: MisskeyApis) : AccountApi { } } - override suspend fun unfollow(account: Account): Result { + override suspend fun unfollow(account: Account): MultiMResult { return if (account is MisskeyAccount) { misskeyApis.following.delete(FollowingDeleteRequest(account.id)).map { } } else { @@ -60,7 +60,7 @@ class MisskeyAccountApi(val misskeyApis: MisskeyApis) : AccountApi { } } - override suspend fun profile(account: Account): Result { + override suspend fun profile(account: Account): MultiMResult { if (account is MisskeyAccount) { val show = misskeyApis.users.show(UsersShowRequest(account.id)) return show.map { @@ -96,7 +96,7 @@ class MisskeyAccountApi(val misskeyApis: MisskeyApis) : AccountApi { includeRepost: Boolean, since: StatusId?, until: StatusId? - ): Result, MultiMError> { + ): MultiMResult> { return if (account is MisskeyAccount) { misskeyApis.users.notes( UsersNotesRequest( @@ -112,7 +112,7 @@ class MisskeyAccountApi(val misskeyApis: MisskeyApis) : AccountApi { override suspend fun relationships( myself: Account, other: Account - ): Result { + ): MultiMResult { if (myself is MisskeyAccount && other is MisskeyAccount) { return misskeyApis.users.relation(UsersRelationRequest(other.id)) .map { it.toRelation(myself, other) } @@ -120,7 +120,7 @@ class MisskeyAccountApi(val misskeyApis: MisskeyApis) : AccountApi { return TODO() } - override suspend fun requestCancel(account: Account): Result { + override suspend fun requestCancel(account: Account): MultiMResult { if (account is MisskeyAccount) { misskeyApis.following.Requests().cancel(FollowingRequestsCancelRequest(account.id)) return Ok(Unit) @@ -128,7 +128,7 @@ class MisskeyAccountApi(val misskeyApis: MisskeyApis) : AccountApi { return TODO() } - override suspend fun requestAccept(account: Account): Result { + override suspend fun requestAccept(account: Account): MultiMResult { return if (account is MisskeyAccount) { misskeyApis.following.Requests().accept(FollowingRequestsAcceptRequest(account.id)) Ok(Unit) @@ -137,7 +137,7 @@ class MisskeyAccountApi(val misskeyApis: MisskeyApis) : AccountApi { } } - override suspend fun requestReject(account: Account): Result { + override suspend fun requestReject(account: Account): MultiMResult { return if (account is MisskeyAccount) { misskeyApis.following.Requests().reject(FollowingRequestsRejectRequest(account.id)) Ok(Unit) diff --git a/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/common/api/MisskeyStatusApi.kt b/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/common/api/MisskeyStatusApi.kt index d16225f..4af4c72 100644 --- a/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/common/api/MisskeyStatusApi.kt +++ b/impl/misskey/src/main/kotlin/dev/usbharu/multim/misskey/v12/common/api/MisskeyStatusApi.kt @@ -1,6 +1,9 @@ package dev.usbharu.multim.misskey.v12.common.api -import com.github.michaelbull.result.* +import com.github.michaelbull.result.Err +import com.github.michaelbull.result.Ok +import com.github.michaelbull.result.flatMap +import com.github.michaelbull.result.map import dev.usbharu.multim.api.StatusApi import dev.usbharu.multim.error.ErrorType import dev.usbharu.multim.error.MultiMError @@ -22,14 +25,14 @@ import dev.usbharu.multim.model.* * @constructor Create empty Misskey status api */ class MisskeyStatusApi(private val misskeyApis: MisskeyApis) : StatusApi { - override suspend fun post(status: StatusForPost): Result { + override suspend fun post(status: StatusForPost): MultiMResult { return misskeyApis.notes.create(NotesCreateRequest(text = status.content.text)) .map { it.createdNote.toStatus() } } - override suspend fun delete(id: StatusId): Result { + override suspend fun delete(id: StatusId): MultiMResult { if (id is MisskeyStatusId) { misskeyApis.notes.delete(NotesDeleteRequest(id.id)) return Ok(Unit) @@ -37,13 +40,13 @@ class MisskeyStatusApi(private val misskeyApis: MisskeyApis) : StatusApi { return TODO() } - override suspend fun findById(id: StatusId): Result { + override suspend fun findById(id: StatusId): MultiMResult { return id.fetchId() .flatMap { misskeyApis.notes.show(NotesShowRequest(it.id)) } .map { it.toStatus() } } - override suspend fun addReaction(id: StatusId, reaction: Reaction): Result { + override suspend fun addReaction(id: StatusId, reaction: Reaction): MultiMResult { if (reaction is MisskeyReaction && id is MisskeyStatusId) { misskeyApis.notes.Reaction().create( NotesReactionCreateRequest( @@ -65,7 +68,7 @@ class MisskeyStatusApi(private val misskeyApis: MisskeyApis) : StatusApi { override suspend fun removeReaction( id: StatusId, reaction: Reaction? - ): Result { + ): MultiMResult { return if (id is MisskeyStatusId) { misskeyApis.notes.Reaction().delete(NotesReactionDeleteRequest(id.id)) Ok(Unit) @@ -75,18 +78,18 @@ class MisskeyStatusApi(private val misskeyApis: MisskeyApis) : StatusApi { } } - override suspend fun reactions(id: StatusId): Result, MultiMError> { + override suspend fun reactions(id: StatusId): MultiMResult> { return id.fetchId().flatMap { misskeyApis.notes.show(NotesShowRequest(it.id)) } .map { it.reactions.toReactions(it) } } - override suspend fun repost(id: StatusId): Result { + override suspend fun repost(id: StatusId): MultiMResult { return id.fetchId() .flatMap { misskeyApis.notes.create(NotesCreateRequest(renoteId = it.id)) } .map { it.createdNote.toStatus() } } - override suspend fun unRepost(id: StatusId): Result { + override suspend fun unRepost(id: StatusId): MultiMResult { return if (id is MisskeyStatusId) { misskeyApis.notes.unrenote(NotesUnrenoteRequest(id.id)) Ok(Unit) @@ -96,7 +99,7 @@ class MisskeyStatusApi(private val misskeyApis: MisskeyApis) : StatusApi { } } - override suspend fun replyTo(id: StatusId, status: StatusForPost): Result { + override suspend fun replyTo(id: StatusId, status: StatusForPost): MultiMResult { return id.fetchId().flatMap { misskeyApis.notes.create( NotesCreateRequest( @@ -107,12 +110,12 @@ class MisskeyStatusApi(private val misskeyApis: MisskeyApis) : StatusApi { }.map { it.createdNote.toStatus() } } - override suspend fun addToBookmarks(id: StatusId): Result { + override suspend fun addToBookmarks(id: StatusId): MultiMResult { return id.fetchId() .flatMap { misskeyApis.notes.Favorites().create(NotesFavoritesCreateRequest(it.id)) } } - override suspend fun removeFromBookmarks(id: StatusId): Result { + override suspend fun removeFromBookmarks(id: StatusId): MultiMResult { return if (id is MisskeyStatusId) { misskeyApis.notes.Favorites().delete(NotesFavoritesDeleteRequest(id.id)) Ok(Unit) @@ -122,11 +125,11 @@ class MisskeyStatusApi(private val misskeyApis: MisskeyApis) : StatusApi { } } - override suspend fun getPreviousAndNext(id: StatusId): Result { + override suspend fun getPreviousAndNext(id: StatusId): MultiMResult { return TODO() //よくわからんのでとりあえず未実装 多分user-timelineからリノートを取り除いたらできる } - override suspend fun replies(id: StatusId): Result, MultiMError> { + override suspend fun replies(id: StatusId): MultiMResult> { return id.fetchId().flatMap { misskeyApis.notes.children(NotesChildrenRequest(it.id)) } .map { it.map { note -> note.toStatus() } } } diff --git a/impl/misskey/src/test/kotlin/dev/usbharu/multim/misskey/v12/common/api/MisskeyStatusApiTest.kt b/impl/misskey/src/test/kotlin/dev/usbharu/multim/misskey/v12/common/api/MisskeyStatusApiTest.kt index 92e9df7..b3ac2ef 100644 --- a/impl/misskey/src/test/kotlin/dev/usbharu/multim/misskey/v12/common/api/MisskeyStatusApiTest.kt +++ b/impl/misskey/src/test/kotlin/dev/usbharu/multim/misskey/v12/common/api/MisskeyStatusApiTest.kt @@ -1,7 +1,6 @@ package dev.usbharu.multim.misskey.v12.common.api import MisskeyTestUtil -import com.github.michaelbull.result.get import dev.usbharu.multim.TestUtil.failOnError import dev.usbharu.multim.misskey.v12.api.MisskeyApis import dev.usbharu.multim.misskey.v12.common.MisskeyStatusId