Add ability to pin/unpin statuses (#872)

This commit is contained in:
Ivan Kupalov 2018-10-03 21:27:52 +02:00 committed by Konrad Pozniak
commit a0988dc6c6
9 changed files with 61 additions and 13 deletions

View file

@ -33,6 +33,7 @@ import com.keylesspalace.tusky.entity.StatusContext;
import java.util.List;
import io.reactivex.Single;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
@ -156,6 +157,12 @@ public interface MastodonApi {
@POST("api/v1/statuses/{id}/unfavourite")
Call<Status> unfavouriteStatus(@Path("id") String statusId);
@POST("api/v1/statuses/{id}/pin")
Single<Status> pinStatus(@Path("id") String statusId);
@POST("api/v1/statuses/{id}/unpin")
Single<Status> unpinStatus(@Path("id") String statusId);
@GET("api/v1/accounts/verify_credentials")
Call<Account> accountVerifyCredentials();

View file

@ -15,12 +15,14 @@
package com.keylesspalace.tusky.network
import com.keylesspalace.tusky.appstore.EventHub
import com.keylesspalace.tusky.appstore.BlockEvent
import com.keylesspalace.tusky.appstore.EventHub
import com.keylesspalace.tusky.appstore.MuteEvent
import com.keylesspalace.tusky.appstore.StatusDeletedEvent
import com.keylesspalace.tusky.entity.Relationship
import com.keylesspalace.tusky.entity.Status
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.rxkotlin.addTo
import okhttp3.ResponseBody
import retrofit2.Call
import retrofit2.Callback
@ -36,12 +38,20 @@ interface TimelineCases {
fun mute(id: String)
fun block(id: String)
fun delete(id: String)
fun pin(status: Status, pin: Boolean)
}
class TimelineCasesImpl(
private val mastodonApi: MastodonApi,
private val eventHub: EventHub
) : TimelineCases {
/**
* Unused yet but can be use for cancellation later. It's always a good idea to save
* Disposables.
*/
private val cancelDisposable = CompositeDisposable()
override fun reblogWithCallback(status: Status, reblog: Boolean, callback: Callback<Status>) {
val id = status.actionableId
@ -95,4 +105,13 @@ class TimelineCasesImpl(
eventHub.dispatch(StatusDeletedEvent(id))
}
override fun pin(status: Status, pin: Boolean) {
// Replace with extension method if we use RxKotlin
(if (pin) mastodonApi.pinStatus(status.id) else mastodonApi.unpinStatus(status.id))
.subscribe({ updatedStatus ->
status.pinned = updatedStatus.pinned
}, {})
.addTo(this.cancelDisposable)
}
}