Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions core/src/main/kotlin/dev/usbharu/multim/MultiM.kt
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -36,7 +35,7 @@ object MultiM {
token: String,
factory: PlatformApiFactory,
httpClient: HttpClient = httpClientWithJson
): Result<MultiMApis, MultiMError> {
): MultiMResult<MultiMApis> {
dev.usbharu.multim.Logger.info("Create Client", "START Create client with url:$url.")
dev.usbharu.multim.Logger.debug(
"Create Client",
Expand All @@ -63,7 +62,7 @@ object MultiM {
auth: Auth,
factory: PlatformApiFactory,
httpClient: HttpClient = httpClientWithJson
): Result<MultiMApis, MultiMError> {
): MultiMResult<MultiMApis> {
dev.usbharu.multim.Logger.info("Create Client", "START Create cient with url:$url.")
dev.usbharu.multim.Logger.debug(
"Create Client",
Expand Down
20 changes: 10 additions & 10 deletions core/src/main/kotlin/dev/usbharu/multim/api/AccountApi.kt
Original file line number Diff line number Diff line change
@@ -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で返しているが、詳細がわからないのでしっかり返す。
Expand All @@ -15,31 +15,31 @@ interface AccountApi {
account: Account,
since: StatusId? = null,
until: StatusId? = null
): Result<List<Status>, MultiMError> {
): MultiMResult<List<Status>> {
Logger.debug("Account Api", "Not impl account api. userTimeline.")
return Err(MultiMError("userTimeline not implements", null, ErrorType.NOT_IMPL))
}

val FOLLOW: String
get() = "account/follow"

suspend fun follow(account: Account): Result<Unit, MultiMError> {
suspend fun follow(account: Account): MultiMResult<Unit> {
Logger.debug("Account Api", "Not impl account api. follow.")
return Err(MultiMError("follow not implements", null, ErrorType.NOT_IMPL))
}

val UNFOLLOW: String
get() = "account/unfollow"

suspend fun unfollow(account: Account): Result<Unit, MultiMError> {
suspend fun unfollow(account: Account): MultiMResult<Unit> {
Logger.debug("Account Api", "Not impl account api. unfollow.")
return Err(MultiMError("unfollow not implements", null, ErrorType.NOT_IMPL))
}

val PROFILE: String
get() = "account/profile"

suspend fun profile(account: Account): Result<Profile, MultiMError> {
suspend fun profile(account: Account): MultiMResult<Profile> {
Logger.debug("Account Api", "Not impl account api. profile.")
return Err(MultiMError("profile not implements", null, ErrorType.NOT_IMPL))
}
Expand All @@ -52,39 +52,39 @@ interface AccountApi {
includeRepost: Boolean = false,
since: StatusId? = null,
until: StatusId? = null,
): Result<List<Status>, MultiMError> {
): MultiMResult<List<Status>> {
Logger.debug("Account Api", "Not impl account api. statuses.")
return Err(MultiMError("statuses not implements", null, ErrorType.NOT_IMPL))
}

val RELATIONSHIPS: String
get() = "account/relationships"

suspend fun relationships(myself: Account, other: Account): Result<Relation, MultiMError> {
suspend fun relationships(myself: Account, other: Account): MultiMResult<Relation> {
Logger.debug("Account Api", "Not impl account api. relationships.")
return Err(MultiMError("relationships not implements", null, ErrorType.NOT_IMPL))
}

val REQUEST_CANCEL: String
get() = "account/requestCancel"

suspend fun requestCancel(account: Account): Result<Unit, MultiMError> {
suspend fun requestCancel(account: Account): MultiMResult<Unit> {
Logger.debug("Account Api", "Not impl account api. requestCancel.")
return Err(MultiMError("requestCancel not implements", null, ErrorType.NOT_IMPL))
}

val REQUEST_ACCEPT: String
get() = "account/requestAccept"

suspend fun requestAccept(account: Account): Result<Unit, MultiMError> {
suspend fun requestAccept(account: Account): MultiMResult<Unit> {
Logger.debug("Account Api", "Not impl account api. requestAccept.")
return Err(MultiMError("requestAccept not implements", null, ErrorType.NOT_IMPL))
}

val REQUEST_REJECT: String
get() = "account/requestReject"

suspend fun requestReject(account: Account): Result<Unit, MultiMError> {
suspend fun requestReject(account: Account): MultiMResult<Unit> {
Logger.debug("Account Api", "Not impl account api. requestReject.")
return Err(MultiMError("requestReject not implements", null, ErrorType.NOT_IMPL))
}
Expand Down
9 changes: 4 additions & 5 deletions core/src/main/kotlin/dev/usbharu/multim/api/NodeinfoApi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -27,7 +26,7 @@ class NodeinfoApi(private var httpClient: HttpClient) {
}
}

suspend fun wellKnownNodeinfo(url: String): Result<NodeinfoList, MultiMError> {
suspend fun wellKnownNodeinfo(url: String): MultiMResult<NodeinfoList> {
Logger.info("Nodeinfo Api", "START Get $url.well-known/nodeinfo")
val get = try {
httpClient.get("$url.well-known/nodeinfo")
Expand Down Expand Up @@ -63,7 +62,7 @@ class NodeinfoApi(private var httpClient: HttpClient) {
}
}

fun nodeinfoLink(nodeinfoList: NodeinfoList): Result<NodeinfoList.NodeinfoLink, MultiMError> {
fun nodeinfoLink(nodeinfoList: NodeinfoList): MultiMResult<NodeinfoList.NodeinfoLink> {
Logger.info("Nodeinfo Api", "START Get nodeinfo link")
return runCatching<NodeinfoList.NodeinfoLink> {
nodeinfoList.links.minByOrNull { it.rel.substringAfterLast("/", "0").toFloat() }!!
Expand All @@ -78,7 +77,7 @@ class NodeinfoApi(private var httpClient: HttpClient) {


// todo 強制で2.0のが返ってくるのでバージョンを識別する
suspend fun nodeinfo(nodeinfoLink: NodeinfoList.NodeinfoLink): Result<NodeInfo, MultiMError> {
suspend fun nodeinfo(nodeinfoLink: NodeinfoList.NodeinfoLink): MultiMResult<NodeInfo> {

val get = try {
httpClient.get(nodeinfoLink.href)
Expand All @@ -96,7 +95,7 @@ class NodeinfoApi(private var httpClient: HttpClient) {
}
}

suspend fun nodeinfo(url: String): Result<NodeInfo, MultiMError> {
suspend fun nodeinfo(url: String): MultiMResult<NodeInfo> {
return wellKnownNodeinfo(url)
.flatMap { nodeinfoLink(it) }
.flatMap { nodeinfo(it) }
Expand Down
27 changes: 13 additions & 14 deletions core/src/main/kotlin/dev/usbharu/multim/api/StatusApi.kt
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -15,31 +14,31 @@ interface StatusApi {
val POST: String
get() = "status/post"

suspend fun post(status: StatusForPost): Result<Status, MultiMError> {
suspend fun post(status: StatusForPost): MultiMResult<Status> {
Logger.debug("Status Api", "Not impl status api post")
return Err(MultiMError("post not implements", null, ErrorType.NOT_IMPL))
}

val DELETE: String
get() = "status/delete"

suspend fun delete(id: StatusId): Result<Unit, MultiMError> {
suspend fun delete(id: StatusId): MultiMResult<Unit> {
Logger.debug("Status Api", "Not impl status api delete")
return Err(MultiMError("delete not implements", null, ErrorType.NOT_IMPL))
}

val FIND_BY_ID: String
get() = "status/findById"

suspend fun findById(id: StatusId): Result<Status, MultiMError> {
suspend fun findById(id: StatusId): MultiMResult<Status> {
Logger.debug("Status Api", "Not impl status api findById")
return Err(MultiMError("findById not implements", null, ErrorType.NOT_IMPL))
}

val ADD_REACTION: String
get() = "status/addReaction"

suspend fun addReaction(id: StatusId, reaction: Reaction): Result<Unit, MultiMError> {
suspend fun addReaction(id: StatusId, reaction: Reaction): MultiMResult<Unit> {
Logger.debug("Status Api", "Not impl status api addReaction")
return Err(MultiMError("addReaction not implements", null, ErrorType.NOT_IMPL))
}
Expand All @@ -54,71 +53,71 @@ interface StatusApi {
* @param reaction 実装によって挙動が変わります。nullでも
* @return
*/
suspend fun removeReaction(id: StatusId, reaction: Reaction?): Result<Unit, MultiMError> {
suspend fun removeReaction(id: StatusId, reaction: Reaction?): MultiMResult<Unit> {
Logger.debug("Status Api", "Not impl status api removeReaction")
return Err(MultiMError("removeReaction not implements", null, ErrorType.NOT_IMPL))
}

val REACTIONS: String
get() = "status/reactions"

suspend fun reactions(id: StatusId): Result<Map<Reaction, Int>, MultiMError> {
suspend fun reactions(id: StatusId): MultiMResult<Map<Reaction, Int>> {
Logger.debug("Status Api", "Not impl status api reactions")
return Err(MultiMError("reactions not implements", null, ErrorType.NOT_IMPL))
}

val REPLIES: String
get() = "status/replies"

suspend fun replies(id: StatusId): Result<List<Status>, MultiMError> {
suspend fun replies(id: StatusId): MultiMResult<List<Status>> {
Logger.debug("Status Api", "Not impl status api replies")
return Err(MultiMError("replies not implements", null, ErrorType.NOT_IMPL))
}

val REPOST: String
get() = "status/repost"

suspend fun repost(id: StatusId): Result<Status, MultiMError> {
suspend fun repost(id: StatusId): MultiMResult<Status> {
Logger.debug("Status Api", "Not impl status api repost")
return Err(MultiMError("repost not implements", null, ErrorType.NOT_IMPL))
}

val UN_REPOST: String
get() = "status/unRepost"

suspend fun unRepost(id: StatusId): Result<Unit, MultiMError> {
suspend fun unRepost(id: StatusId): MultiMResult<Unit> {
Logger.debug("Status Api", "Not impl status api unRepost")
return Err(MultiMError("unRepost not implements", null, ErrorType.NOT_IMPL))
}

val REPLY_TO: String
get() = "status/replyTo"

suspend fun replyTo(id: StatusId, status: StatusForPost): Result<Status, MultiMError> {
suspend fun replyTo(id: StatusId, status: StatusForPost): MultiMResult<Status> {
Logger.debug("Status Api", "Not impl status api replyTo")
return Err(MultiMError("replyTo not implements", null, ErrorType.NOT_IMPL))
}

val ADD_TO_BOOKMARKS: String
get() = "status/addBookMarks"

suspend fun addToBookmarks(id: StatusId): Result<Unit, MultiMError> {
suspend fun addToBookmarks(id: StatusId): MultiMResult<Unit> {
Logger.debug("Status Api", "Not impl status api addToBookmarks")
return Err(MultiMError("addToBookmarks not implements", null, ErrorType.NOT_IMPL))
}

val REMOVE_FROM_BOOKMARKS: String
get() = "status/removeFromBookmarks"

suspend fun removeFromBookmarks(id: StatusId): Result<Unit, MultiMError> {
suspend fun removeFromBookmarks(id: StatusId): MultiMResult<Unit> {
Logger.debug("Status Api", "Not impl status api removeFromBookmarks")
return Err(MultiMError("removeFromBookmarks not implements", null, ErrorType.NOT_IMPL))
}

val GET_PREVIOUS_AND_NEXT: String
get() = "status/getPreviousAndNext"

suspend fun getPreviousAndNext(id: StatusId): Result<PreviousAndNextPosts, MultiMError> {
suspend fun getPreviousAndNext(id: StatusId): MultiMResult<PreviousAndNextPosts> {
Logger.debug("Status Api", "Not impl status api getPreviousAndNext")
return Err(MultiMError("getPreviousAndNext not implements", null, ErrorType.NOT_IMPL))
}
Expand Down
10 changes: 5 additions & 5 deletions core/src/main/kotlin/dev/usbharu/multim/api/TimelineApi.kt
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
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

interface TimelineApi {
val AVAILABLE_TIMELINES: String
get() = "timeline/availableTimelines"

suspend fun availableTimelines(): Result<List<Timeline>, MultiMError> {
suspend fun availableTimelines(): MultiMResult<List<Timeline>> {
Logger.debug("Timeline Api", "Not impl timeline api availableTimelines")
return Err(MultiMError("availableTimelines not implements", null, ErrorType.NOT_IMPL))
}
Expand All @@ -23,7 +23,7 @@ interface TimelineApi {
suspend fun listen(
timeline: Timeline,
callback: (List<Status>) -> Unit
): Result<Unit, MultiMError> {
): MultiMResult<Unit> {
Logger.debug("Timeline Api", "Not impl timeline api listen")
return Err(MultiMError("timeline listen not implements", null, ErrorType.NOT_IMPL))
}
Expand All @@ -32,7 +32,7 @@ interface TimelineApi {
get() = "timeline/connect"

// todo 返り値を詳細にする
suspend fun connect(timeline: Timeline): Result<Unit, MultiMError> {
suspend fun connect(timeline: Timeline): MultiMResult<Unit> {
Logger.debug("Timeline Api", "Not impl timeline api connect")
return Err(MultiMError("timeline connect not implements", null, ErrorType.NOT_IMPL))
}
Expand All @@ -47,7 +47,7 @@ interface TimelineApi {
* @param force 強制的に切断し、もし受信しても無視するように要求する。
* @return
*/
suspend fun disconnect(timeline: Timeline, force: Boolean = false): Result<Unit, MultiMError> {
suspend fun disconnect(timeline: Timeline, force: Boolean = false): MultiMResult<Unit> {
Logger.debug("Timeline Api", "Not impl timeline api disconnect")
return Err(MultiMError("timeline disconnect not implements", null, ErrorType.NOT_IMPL))
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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(
Expand All @@ -15,7 +14,7 @@ class CacheableAccountApi(
account: Account,
since: StatusId?,
until: StatusId?
): Result<List<Status>, MultiMError> {
): MultiMResult<List<Status>> {
return cacheableApi.cacheOrGet(
CacheableApi.generateKey(
account,
Expand All @@ -25,7 +24,7 @@ class CacheableAccountApi(
) { accountApi.userTimeline(account, since, until) }
}

override suspend fun profile(account: Account): Result<Profile, MultiMError> {
override suspend fun profile(account: Account): MultiMResult<Profile> {
return cacheableApi.cacheOrGet(PROFILE, account) { accountApi.profile(account) }
}

Expand All @@ -34,7 +33,7 @@ class CacheableAccountApi(
includeRepost: Boolean,
since: StatusId?,
until: StatusId?
): Result<List<Status>, MultiMError> {
): MultiMResult<List<Status>> {
return cacheableApi.cacheOrGet(
STATUSES,
CacheableApi.generateKey(account) + includeRepost
Expand All @@ -50,7 +49,7 @@ class CacheableAccountApi(
override suspend fun relationships(
myself: Account,
other: Account
): Result<Relation, MultiMError> {
): MultiMResult<Relation> {
return cacheableApi.cacheOrGet(RELATIONSHIPS, myself, other) {
accountApi.relationships(
myself,
Expand Down
Loading