diff --git a/twidere.component.common/src/main/java/org/mariotaku/microblog/library/mastodon/api/StatusesResources.java b/twidere.component.common/src/main/java/org/mariotaku/microblog/library/mastodon/api/StatusesResources.java index cf86f57b8..cca9e0f7a 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/microblog/library/mastodon/api/StatusesResources.java +++ b/twidere.component.common/src/main/java/org/mariotaku/microblog/library/mastodon/api/StatusesResources.java @@ -69,4 +69,10 @@ public interface StatusesResources { @POST("/v1/statuses/{id}/unfavourite") Status unfavouriteStatus(@Path("id") String id) throws MicroBlogException; + + @POST("/v1/statuses/{id}/pin") + Status pinStatus(@Path("id") String id) throws MicroBlogException; + + @POST("/v1/statuses/{id}/unpin") + Status unpinStatus(@Path("id") String id) throws MicroBlogException; } diff --git a/twidere.component.common/src/main/java/org/mariotaku/microblog/library/mastodon/model/Status.java b/twidere.component.common/src/main/java/org/mariotaku/microblog/library/mastodon/model/Status.java index b47d2bf85..0088c1b0e 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/microblog/library/mastodon/model/Status.java +++ b/twidere.component.common/src/main/java/org/mariotaku/microblog/library/mastodon/model/Status.java @@ -103,6 +103,11 @@ public class Status { */ @JsonField(name = "sensitive") boolean sensitive; + /** + * Whether the authenticated user has pinned the status + */ + @JsonField(name = "pinned") + boolean pinned; /** * If not empty, warning text that should be displayed before the actual content */ @@ -194,6 +199,10 @@ public class Status { return sensitive; } + public boolean isPinned() { + return pinned; + } + public String getSpoilerText() { return spoilerText; } @@ -251,6 +260,7 @@ public class Status { ", reblogged=" + reblogged + ", favourited=" + favourited + ", sensitive=" + sensitive + + ", pinned=" + pinned + ", spoilerText='" + spoilerText + '\'' + ", visibility='" + visibility + '\'' + ", mediaAttachments=" + Arrays.toString(mediaAttachments) + diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/task/status/PinStatusTask.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/task/status/PinStatusTask.kt index 49e1b2dcf..d87adccc5 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/task/status/PinStatusTask.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/task/status/PinStatusTask.kt @@ -22,8 +22,12 @@ package org.mariotaku.twidere.task.status import android.content.Context import android.widget.Toast import org.mariotaku.microblog.library.MicroBlog +import org.mariotaku.microblog.library.MicroBlogException +import org.mariotaku.microblog.library.mastodon.Mastodon import org.mariotaku.microblog.library.twitter.model.PinTweetResult import org.mariotaku.twidere.R +import org.mariotaku.twidere.annotation.AccountType +import org.mariotaku.twidere.exception.APINotSupportedException import org.mariotaku.twidere.extension.model.newMicroBlogInstance import org.mariotaku.twidere.model.AccountDetails import org.mariotaku.twidere.model.UserKey @@ -37,9 +41,20 @@ import org.mariotaku.twidere.task.AbsAccountRequestTask class PinStatusTask(context: Context, accountKey: UserKey, val id: String) : AbsAccountRequestTask(context, accountKey) { + @Throws(MicroBlogException::class) override fun onExecute(account: AccountDetails, params: Any?): PinTweetResult { - val twitter = account.newMicroBlogInstance(context, MicroBlog::class.java) - return twitter.pinTweet(id) + when (account.type) { + AccountType.MASTODON -> { + val mastodon = account.newMicroBlogInstance(context, Mastodon::class.java) + return mastodon.pinStatus(id) + } + AccountType.TWITTER -> { + val twitter = account.newMicroBlogInstance(context, MicroBlog::class.java) + return twitter.pinTweet(id) + } + else -> { + throw APINotSupportedException(account.type) + } } override fun onSucceed(callback: Any?, result: PinTweetResult) { diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/task/status/UnpinStatusTask.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/task/status/UnpinStatusTask.kt index 0bcc94aa7..1f1d452b7 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/task/status/UnpinStatusTask.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/task/status/UnpinStatusTask.kt @@ -22,6 +22,8 @@ package org.mariotaku.twidere.task.status import android.content.Context import android.widget.Toast import org.mariotaku.microblog.library.MicroBlog +import org.mariotaku.microblog.library.MicroBlogException +import org.mariotaku.microblog.library.mastodon.Mastodon import org.mariotaku.microblog.library.twitter.model.PinTweetResult import org.mariotaku.twidere.R import org.mariotaku.twidere.extension.model.newMicroBlogInstance @@ -29,6 +31,8 @@ import org.mariotaku.twidere.model.AccountDetails import org.mariotaku.twidere.model.UserKey import org.mariotaku.twidere.model.event.StatusPinEvent import org.mariotaku.twidere.task.AbsAccountRequestTask +import org.mariotaku.twidere.annotation.AccountType +import org.mariotaku.twidere.exception.APINotSupportedException /** * Created by mariotaku on 2017/4/28. @@ -37,9 +41,20 @@ import org.mariotaku.twidere.task.AbsAccountRequestTask class UnpinStatusTask(context: Context, accountKey: UserKey, val id: String) : AbsAccountRequestTask(context, accountKey) { + @Throws(MicroBlogException::class) override fun onExecute(account: AccountDetails, params: Any?): PinTweetResult { - val twitter = account.newMicroBlogInstance(context, MicroBlog::class.java) - return twitter.unpinTweet(id) + when (account.type) { + AccountType.MASTODON -> { + val mastodon = account.newMicroBlogInstance(context, Mastodon::class.java) + return mastodon.unpinStatus(id) + } + AccountType.TWITTER -> { + val twitter = account.newMicroBlogInstance(context, MicroBlog::class.java) + return twitter.unpinTweet(id) + } + else -> { + throw APINotSupportedException(account.type) + } } override fun onSucceed(callback: Any?, result: PinTweetResult) {