2019-09-22 08:18:44 +02:00
|
|
|
/* Copyright 2017 Andrew Dawson
|
|
|
|
*
|
|
|
|
* This file is a part of Tusky.
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
|
|
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
|
|
|
|
* License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
|
|
|
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
|
|
|
* Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License along with Tusky; if not,
|
|
|
|
* see <http://www.gnu.org/licenses>. */
|
|
|
|
|
|
|
|
package com.keylesspalace.tusky.network
|
|
|
|
|
2022-05-30 20:03:40 +02:00
|
|
|
import at.connyduck.calladapter.networkresult.NetworkResult
|
2021-06-17 18:54:56 +02:00
|
|
|
import com.keylesspalace.tusky.entity.AccessToken
|
|
|
|
import com.keylesspalace.tusky.entity.Account
|
|
|
|
import com.keylesspalace.tusky.entity.Announcement
|
|
|
|
import com.keylesspalace.tusky.entity.AppCredentials
|
|
|
|
import com.keylesspalace.tusky.entity.Attachment
|
|
|
|
import com.keylesspalace.tusky.entity.Conversation
|
|
|
|
import com.keylesspalace.tusky.entity.DeletedStatus
|
|
|
|
import com.keylesspalace.tusky.entity.Emoji
|
|
|
|
import com.keylesspalace.tusky.entity.Filter
|
2022-08-07 19:09:26 +02:00
|
|
|
import com.keylesspalace.tusky.entity.HashTag
|
2021-06-17 18:54:56 +02:00
|
|
|
import com.keylesspalace.tusky.entity.Instance
|
|
|
|
import com.keylesspalace.tusky.entity.Marker
|
|
|
|
import com.keylesspalace.tusky.entity.MastoList
|
2022-02-25 18:57:18 +01:00
|
|
|
import com.keylesspalace.tusky.entity.MediaUploadResult
|
2021-06-17 18:54:56 +02:00
|
|
|
import com.keylesspalace.tusky.entity.NewStatus
|
|
|
|
import com.keylesspalace.tusky.entity.Notification
|
2022-05-17 19:32:09 +02:00
|
|
|
import com.keylesspalace.tusky.entity.NotificationSubscribeResult
|
2021-06-17 18:54:56 +02:00
|
|
|
import com.keylesspalace.tusky.entity.Poll
|
|
|
|
import com.keylesspalace.tusky.entity.Relationship
|
|
|
|
import com.keylesspalace.tusky.entity.ScheduledStatus
|
|
|
|
import com.keylesspalace.tusky.entity.SearchResult
|
|
|
|
import com.keylesspalace.tusky.entity.Status
|
|
|
|
import com.keylesspalace.tusky.entity.StatusContext
|
2022-12-08 10:18:12 +01:00
|
|
|
import com.keylesspalace.tusky.entity.StatusSource
|
2022-03-15 21:34:57 +01:00
|
|
|
import com.keylesspalace.tusky.entity.TimelineAccount
|
2021-05-16 19:53:27 +02:00
|
|
|
import io.reactivex.rxjava3.core.Single
|
2019-09-22 08:18:44 +02:00
|
|
|
import okhttp3.MultipartBody
|
|
|
|
import okhttp3.RequestBody
|
|
|
|
import okhttp3.ResponseBody
|
|
|
|
import retrofit2.Call
|
|
|
|
import retrofit2.Response
|
2021-06-17 18:54:56 +02:00
|
|
|
import retrofit2.http.Body
|
|
|
|
import retrofit2.http.DELETE
|
2019-09-22 08:18:44 +02:00
|
|
|
import retrofit2.http.Field
|
2022-05-17 19:32:09 +02:00
|
|
|
import retrofit2.http.FieldMap
|
2021-06-17 18:54:56 +02:00
|
|
|
import retrofit2.http.FormUrlEncoded
|
|
|
|
import retrofit2.http.GET
|
|
|
|
import retrofit2.http.HTTP
|
|
|
|
import retrofit2.http.Header
|
|
|
|
import retrofit2.http.Multipart
|
|
|
|
import retrofit2.http.PATCH
|
|
|
|
import retrofit2.http.POST
|
|
|
|
import retrofit2.http.PUT
|
|
|
|
import retrofit2.http.Part
|
|
|
|
import retrofit2.http.Path
|
|
|
|
import retrofit2.http.Query
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* for documentation of the Mastodon REST API see https://docs.joinmastodon.org/api/
|
|
|
|
*/
|
|
|
|
|
|
|
|
@JvmSuppressWildcards
|
|
|
|
interface MastodonApi {
|
|
|
|
|
|
|
|
companion object {
|
2022-04-13 19:22:09 +02:00
|
|
|
const val ENDPOINT_AUTHORIZE = "oauth/authorize"
|
2019-09-22 08:18:44 +02:00
|
|
|
const val DOMAIN_HEADER = "domain"
|
|
|
|
const val PLACEHOLDER_DOMAIN = "dummy.placeholder"
|
|
|
|
}
|
|
|
|
|
|
|
|
@GET("/api/v1/custom_emojis")
|
2022-05-30 20:03:40 +02:00
|
|
|
suspend fun getCustomEmojis(): NetworkResult<List<Emoji>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("api/v1/instance")
|
2022-11-05 17:37:20 +01:00
|
|
|
suspend fun getInstance(@Header(DOMAIN_HEADER) domain: String? = null): NetworkResult<Instance>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("api/v1/filters")
|
2022-12-07 19:30:53 +01:00
|
|
|
suspend fun getFilters(): NetworkResult<List<Filter>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("api/v1/timelines/home")
|
2022-09-13 19:47:55 +02:00
|
|
|
@Throws(Exception::class)
|
|
|
|
suspend fun homeTimeline(
|
2022-01-11 19:00:29 +01:00
|
|
|
@Query("max_id") maxId: String? = null,
|
|
|
|
@Query("since_id") sinceId: String? = null,
|
|
|
|
@Query("limit") limit: Int? = null
|
2022-09-13 19:47:55 +02:00
|
|
|
): Response<List<Status>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("api/v1/timelines/public")
|
2022-09-13 19:47:55 +02:00
|
|
|
suspend fun publicTimeline(
|
2022-01-11 19:00:29 +01:00
|
|
|
@Query("local") local: Boolean? = null,
|
|
|
|
@Query("max_id") maxId: String? = null,
|
|
|
|
@Query("since_id") sinceId: String? = null,
|
|
|
|
@Query("limit") limit: Int? = null
|
2022-09-13 19:47:55 +02:00
|
|
|
): Response<List<Status>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("api/v1/timelines/tag/{hashtag}")
|
2022-09-13 19:47:55 +02:00
|
|
|
suspend fun hashtagTimeline(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("hashtag") hashtag: String,
|
|
|
|
@Query("any[]") any: List<String>?,
|
|
|
|
@Query("local") local: Boolean?,
|
|
|
|
@Query("max_id") maxId: String?,
|
|
|
|
@Query("since_id") sinceId: String?,
|
|
|
|
@Query("limit") limit: Int?
|
2022-09-13 19:47:55 +02:00
|
|
|
): Response<List<Status>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("api/v1/timelines/list/{listId}")
|
2022-09-13 19:47:55 +02:00
|
|
|
suspend fun listTimeline(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("listId") listId: String,
|
|
|
|
@Query("max_id") maxId: String?,
|
|
|
|
@Query("since_id") sinceId: String?,
|
|
|
|
@Query("limit") limit: Int?
|
2022-09-13 19:47:55 +02:00
|
|
|
): Response<List<Status>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("api/v1/notifications")
|
|
|
|
fun notifications(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Query("max_id") maxId: String?,
|
|
|
|
@Query("since_id") sinceId: String?,
|
|
|
|
@Query("limit") limit: Int?,
|
|
|
|
@Query("exclude_types[]") excludes: Set<Notification.Type>?
|
2021-01-31 19:34:33 +01:00
|
|
|
): Single<Response<List<Notification>>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
2020-09-20 18:43:28 +02:00
|
|
|
@GET("api/v1/markers")
|
|
|
|
fun markersWithAuth(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Header("Authorization") auth: String,
|
|
|
|
@Header(DOMAIN_HEADER) domain: String,
|
|
|
|
@Query("timeline[]") timelines: List<String>
|
2020-09-20 18:43:28 +02:00
|
|
|
): Single<Map<String, Marker>>
|
|
|
|
|
2019-09-22 08:18:44 +02:00
|
|
|
@GET("api/v1/notifications")
|
|
|
|
fun notificationsWithAuth(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Header("Authorization") auth: String,
|
|
|
|
@Header(DOMAIN_HEADER) domain: String,
|
|
|
|
@Query("since_id") sinceId: String?
|
2020-09-20 18:43:28 +02:00
|
|
|
): Single<List<Notification>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@POST("api/v1/notifications/clear")
|
2021-01-31 19:34:33 +01:00
|
|
|
fun clearNotifications(): Single<ResponseBody>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@FormUrlEncoded
|
|
|
|
@PUT("api/v1/media/{mediaId}")
|
2022-04-21 18:46:21 +02:00
|
|
|
suspend fun updateMedia(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("mediaId") mediaId: String,
|
Add UI for image-attachment "focus" (#2620)
* Attempt-zero implementation of a "focus" feature for image attachments. Choose "Set focus" in the attachment menu, tap once to select focus point (no visual feedback currently), tap "OK". Works in tests.
* Remove code duplication between 'update description' and 'update focus'
* Fix ktlint/bitrise failures
* Make updateMediaItem private
* When focus is set on a post attachment the preview focuses correctly. ProgressImageView now inherits from MediaPreviewImageView.
* Replace use of PointF for Focus where focus is represented, fix ktlint
* Substitute 'focus' for 'focus point' in strings
* First attempt draw focus point. Only updates on initial load. Modeled on code from RoundedCorners builtin from Glide
* Redraw focus after each tap
* Dark curtain where focus isn't (now looks like mastosoc)
* Correct ktlint for FocusDialog
* draft: switch to overlay for focus indicator
* Draw focus circle, but ImageView and FocusIndicatorView seem to share a single canvas
* Switch focus circle to path approach
* Correctly scale, save and load focuses. Clamp to visible area. Focus editor looks and feels right
* ktlint fixes and comments
* Focus indicator drawing should use device-independent pixels
* Shrink focus window when it gets unattractively tall (no linting, misbehaves on wide aspect ratio screens)
* Correct max-height behavior for screens in landscape mode
* Focus attachment result is are flipped on x axis; fix this
* Correctly thread focus through on scheduled posts, redrafted posts, and drafts (but draft focus is lost on post)
* More focus ktlint fixes
* Fix specific case where a draft is given a focus, then deleted, then posted in that order
* Fix accidental file change in focus PR
* ktLint fix
* Fix property style warnings in focus
* Fix remaining style warnings from focus PR
Co-authored-by: Conny Duck <k.pozniak@gmx.at>
2022-09-21 20:28:06 +02:00
|
|
|
@Field("description") description: String?,
|
|
|
|
@Field("focus") focus: String?
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<Attachment>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
2022-04-28 20:37:31 +02:00
|
|
|
@GET("api/v1/media/{mediaId}")
|
|
|
|
suspend fun getMedia(
|
|
|
|
@Path("mediaId") mediaId: String
|
|
|
|
): Response<MediaUploadResult>
|
|
|
|
|
2019-09-22 08:18:44 +02:00
|
|
|
@POST("api/v1/statuses")
|
2022-04-28 20:37:31 +02:00
|
|
|
suspend fun createStatus(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Header("Authorization") auth: String,
|
|
|
|
@Header(DOMAIN_HEADER) domain: String,
|
|
|
|
@Header("Idempotency-Key") idempotencyKey: String,
|
|
|
|
@Body status: NewStatus
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<Status>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("api/v1/statuses/{id}")
|
2022-12-06 20:23:48 +01:00
|
|
|
suspend fun status(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") statusId: String
|
2022-12-06 20:23:48 +01:00
|
|
|
): NetworkResult<Status>
|
2021-01-21 18:57:09 +01:00
|
|
|
|
2022-12-08 10:18:12 +01:00
|
|
|
@PUT("api/v1/statuses/{id}")
|
|
|
|
suspend fun editStatus(
|
|
|
|
@Path("id") statusId: String,
|
|
|
|
@Header("Authorization") auth: String,
|
|
|
|
@Header(DOMAIN_HEADER) domain: String,
|
|
|
|
@Header("Idempotency-Key") idempotencyKey: String,
|
|
|
|
@Body editedStatus: NewStatus,
|
|
|
|
): NetworkResult<Status>
|
|
|
|
|
2022-08-15 11:00:18 +02:00
|
|
|
@GET("api/v1/statuses/{id}")
|
|
|
|
suspend fun statusAsync(
|
|
|
|
@Path("id") statusId: String
|
|
|
|
): NetworkResult<Status>
|
|
|
|
|
2022-12-08 10:18:12 +01:00
|
|
|
@GET("api/v1/statuses/{id}/source")
|
|
|
|
suspend fun statusSource(
|
|
|
|
@Path("id") statusId: String
|
|
|
|
): NetworkResult<StatusSource>
|
|
|
|
|
2019-09-22 08:18:44 +02:00
|
|
|
@GET("api/v1/statuses/{id}/context")
|
2022-08-15 11:00:18 +02:00
|
|
|
suspend fun statusContext(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") statusId: String
|
2022-08-15 11:00:18 +02:00
|
|
|
): NetworkResult<StatusContext>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("api/v1/statuses/{id}/reblogged_by")
|
2022-12-07 19:34:31 +01:00
|
|
|
suspend fun statusRebloggedBy(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") statusId: String,
|
|
|
|
@Query("max_id") maxId: String?
|
2022-12-07 19:34:31 +01:00
|
|
|
): Response<List<TimelineAccount>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("api/v1/statuses/{id}/favourited_by")
|
2022-12-07 19:34:31 +01:00
|
|
|
suspend fun statusFavouritedBy(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") statusId: String,
|
|
|
|
@Query("max_id") maxId: String?
|
2022-12-07 19:34:31 +01:00
|
|
|
): Response<List<TimelineAccount>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@DELETE("api/v1/statuses/{id}")
|
|
|
|
fun deleteStatus(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") statusId: String
|
2019-09-22 08:18:44 +02:00
|
|
|
): Single<DeletedStatus>
|
|
|
|
|
|
|
|
@POST("api/v1/statuses/{id}/reblog")
|
|
|
|
fun reblogStatus(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") statusId: String
|
2019-09-22 08:18:44 +02:00
|
|
|
): Single<Status>
|
|
|
|
|
|
|
|
@POST("api/v1/statuses/{id}/unreblog")
|
|
|
|
fun unreblogStatus(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") statusId: String
|
2019-09-22 08:18:44 +02:00
|
|
|
): Single<Status>
|
|
|
|
|
|
|
|
@POST("api/v1/statuses/{id}/favourite")
|
|
|
|
fun favouriteStatus(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") statusId: String
|
2019-09-22 08:18:44 +02:00
|
|
|
): Single<Status>
|
|
|
|
|
|
|
|
@POST("api/v1/statuses/{id}/unfavourite")
|
|
|
|
fun unfavouriteStatus(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") statusId: String
|
2019-09-22 08:18:44 +02:00
|
|
|
): Single<Status>
|
|
|
|
|
2019-11-19 10:15:32 +01:00
|
|
|
@POST("api/v1/statuses/{id}/bookmark")
|
|
|
|
fun bookmarkStatus(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") statusId: String
|
2019-11-19 10:15:32 +01:00
|
|
|
): Single<Status>
|
|
|
|
|
|
|
|
@POST("api/v1/statuses/{id}/unbookmark")
|
|
|
|
fun unbookmarkStatus(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") statusId: String
|
2019-11-19 10:15:32 +01:00
|
|
|
): Single<Status>
|
|
|
|
|
2019-09-22 08:18:44 +02:00
|
|
|
@POST("api/v1/statuses/{id}/pin")
|
|
|
|
fun pinStatus(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") statusId: String
|
2019-09-22 08:18:44 +02:00
|
|
|
): Single<Status>
|
|
|
|
|
|
|
|
@POST("api/v1/statuses/{id}/unpin")
|
|
|
|
fun unpinStatus(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") statusId: String
|
2019-09-22 08:18:44 +02:00
|
|
|
): Single<Status>
|
|
|
|
|
2020-03-24 21:06:04 +01:00
|
|
|
@POST("api/v1/statuses/{id}/mute")
|
|
|
|
fun muteConversation(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") statusId: String
|
2020-03-24 21:06:04 +01:00
|
|
|
): Single<Status>
|
|
|
|
|
|
|
|
@POST("api/v1/statuses/{id}/unmute")
|
|
|
|
fun unmuteConversation(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") statusId: String
|
2020-03-24 21:06:04 +01:00
|
|
|
): Single<Status>
|
|
|
|
|
2019-10-02 21:28:12 +02:00
|
|
|
@GET("api/v1/scheduled_statuses")
|
2019-12-30 20:40:27 +01:00
|
|
|
fun scheduledStatuses(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Query("limit") limit: Int? = null,
|
|
|
|
@Query("max_id") maxId: String? = null
|
2019-12-30 20:40:27 +01:00
|
|
|
): Single<List<ScheduledStatus>>
|
2019-10-02 21:28:12 +02:00
|
|
|
|
|
|
|
@DELETE("api/v1/scheduled_statuses/{id}")
|
2022-04-14 19:49:49 +02:00
|
|
|
suspend fun deleteScheduledStatus(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") scheduledStatusId: String
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<ResponseBody>
|
2019-10-02 21:28:12 +02:00
|
|
|
|
2019-09-22 08:18:44 +02:00
|
|
|
@GET("api/v1/accounts/verify_credentials")
|
2022-06-30 20:49:48 +02:00
|
|
|
suspend fun accountVerifyCredentials(
|
|
|
|
@Header(DOMAIN_HEADER) domain: String? = null,
|
|
|
|
@Header("Authorization") auth: String? = null,
|
|
|
|
): NetworkResult<Account>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@FormUrlEncoded
|
|
|
|
@PATCH("api/v1/accounts/update_credentials")
|
|
|
|
fun accountUpdateSource(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Field("source[privacy]") privacy: String?,
|
2022-12-02 19:19:17 +01:00
|
|
|
@Field("source[sensitive]") sensitive: Boolean?,
|
|
|
|
@Field("source[language]") language: String?,
|
2019-09-22 08:18:44 +02:00
|
|
|
): Call<Account>
|
|
|
|
|
|
|
|
@Multipart
|
|
|
|
@PATCH("api/v1/accounts/update_credentials")
|
2022-04-14 19:49:49 +02:00
|
|
|
suspend fun accountUpdateCredentials(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Part(value = "display_name") displayName: RequestBody?,
|
|
|
|
@Part(value = "note") note: RequestBody?,
|
|
|
|
@Part(value = "locked") locked: RequestBody?,
|
|
|
|
@Part avatar: MultipartBody.Part?,
|
|
|
|
@Part header: MultipartBody.Part?,
|
|
|
|
@Part(value = "fields_attributes[0][name]") fieldName0: RequestBody?,
|
|
|
|
@Part(value = "fields_attributes[0][value]") fieldValue0: RequestBody?,
|
|
|
|
@Part(value = "fields_attributes[1][name]") fieldName1: RequestBody?,
|
|
|
|
@Part(value = "fields_attributes[1][value]") fieldValue1: RequestBody?,
|
|
|
|
@Part(value = "fields_attributes[2][name]") fieldName2: RequestBody?,
|
|
|
|
@Part(value = "fields_attributes[2][value]") fieldValue2: RequestBody?,
|
|
|
|
@Part(value = "fields_attributes[3][name]") fieldName3: RequestBody?,
|
|
|
|
@Part(value = "fields_attributes[3][value]") fieldValue3: RequestBody?
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<Account>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("api/v1/accounts/search")
|
2022-05-18 18:45:35 +02:00
|
|
|
suspend fun searchAccounts(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Query("q") query: String,
|
|
|
|
@Query("resolve") resolve: Boolean? = null,
|
|
|
|
@Query("limit") limit: Int? = null,
|
|
|
|
@Query("following") following: Boolean? = null
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<List<TimelineAccount>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
2022-05-17 19:55:37 +02:00
|
|
|
@GET("api/v1/accounts/search")
|
2022-05-30 20:03:40 +02:00
|
|
|
fun searchAccountsSync(
|
2022-05-17 19:55:37 +02:00
|
|
|
@Query("q") query: String,
|
|
|
|
@Query("resolve") resolve: Boolean? = null,
|
|
|
|
@Query("limit") limit: Int? = null,
|
|
|
|
@Query("following") following: Boolean? = null
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<List<TimelineAccount>>
|
2022-05-17 19:55:37 +02:00
|
|
|
|
2019-09-22 08:18:44 +02:00
|
|
|
@GET("api/v1/accounts/{id}")
|
|
|
|
fun account(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") accountId: String
|
2020-11-17 20:10:54 +01:00
|
|
|
): Single<Account>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Method to fetch statuses for the specified account.
|
|
|
|
* @param accountId ID for account for which statuses will be requested
|
|
|
|
* @param maxId Only statuses with ID less than maxID will be returned
|
|
|
|
* @param sinceId Only statuses with ID bigger than sinceID will be returned
|
|
|
|
* @param limit Limit returned statuses (current API limits: default - 20, max - 40)
|
|
|
|
* @param excludeReplies only return statuses that are no replies
|
|
|
|
* @param onlyMedia only return statuses that have media attached
|
|
|
|
*/
|
|
|
|
@GET("api/v1/accounts/{id}/statuses")
|
2022-09-13 19:47:55 +02:00
|
|
|
suspend fun accountStatuses(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") accountId: String,
|
2022-09-02 16:52:47 +02:00
|
|
|
@Query("max_id") maxId: String? = null,
|
|
|
|
@Query("since_id") sinceId: String? = null,
|
|
|
|
@Query("limit") limit: Int? = null,
|
|
|
|
@Query("exclude_replies") excludeReplies: Boolean? = null,
|
|
|
|
@Query("only_media") onlyMedia: Boolean? = null,
|
|
|
|
@Query("pinned") pinned: Boolean? = null
|
2022-09-13 19:47:55 +02:00
|
|
|
): Response<List<Status>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("api/v1/accounts/{id}/followers")
|
2022-12-07 19:34:31 +01:00
|
|
|
suspend fun accountFollowers(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") accountId: String,
|
|
|
|
@Query("max_id") maxId: String?
|
2022-12-07 19:34:31 +01:00
|
|
|
): Response<List<TimelineAccount>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("api/v1/accounts/{id}/following")
|
2022-12-07 19:34:31 +01:00
|
|
|
suspend fun accountFollowing(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") accountId: String,
|
|
|
|
@Query("max_id") maxId: String?
|
2022-12-07 19:34:31 +01:00
|
|
|
): Response<List<TimelineAccount>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@FormUrlEncoded
|
|
|
|
@POST("api/v1/accounts/{id}/follow")
|
|
|
|
fun followAccount(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") accountId: String,
|
|
|
|
@Field("reblogs") showReblogs: Boolean? = null,
|
|
|
|
@Field("notify") notify: Boolean? = null
|
2020-11-17 20:10:54 +01:00
|
|
|
): Single<Relationship>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@POST("api/v1/accounts/{id}/unfollow")
|
|
|
|
fun unfollowAccount(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") accountId: String
|
2020-11-17 20:10:54 +01:00
|
|
|
): Single<Relationship>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@POST("api/v1/accounts/{id}/block")
|
|
|
|
fun blockAccount(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") accountId: String
|
2020-11-17 20:10:54 +01:00
|
|
|
): Single<Relationship>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@POST("api/v1/accounts/{id}/unblock")
|
|
|
|
fun unblockAccount(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") accountId: String
|
2020-11-17 20:10:54 +01:00
|
|
|
): Single<Relationship>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
2020-07-27 10:28:59 +02:00
|
|
|
@FormUrlEncoded
|
2019-09-22 08:18:44 +02:00
|
|
|
@POST("api/v1/accounts/{id}/mute")
|
|
|
|
fun muteAccount(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") accountId: String,
|
|
|
|
@Field("notifications") notifications: Boolean? = null,
|
|
|
|
@Field("duration") duration: Int? = null
|
2020-11-17 20:10:54 +01:00
|
|
|
): Single<Relationship>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@POST("api/v1/accounts/{id}/unmute")
|
|
|
|
fun unmuteAccount(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") accountId: String
|
2020-11-17 20:10:54 +01:00
|
|
|
): Single<Relationship>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("api/v1/accounts/relationships")
|
|
|
|
fun relationships(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Query("id[]") accountIds: List<String>
|
2020-11-17 20:10:54 +01:00
|
|
|
): Single<List<Relationship>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
2020-12-23 12:52:39 +01:00
|
|
|
@POST("api/v1/pleroma/accounts/{id}/subscribe")
|
|
|
|
fun subscribeAccount(
|
|
|
|
@Path("id") accountId: String
|
|
|
|
): Single<Relationship>
|
|
|
|
|
|
|
|
@POST("api/v1/pleroma/accounts/{id}/unsubscribe")
|
|
|
|
fun unsubscribeAccount(
|
|
|
|
@Path("id") accountId: String
|
|
|
|
): Single<Relationship>
|
|
|
|
|
2019-09-22 08:18:44 +02:00
|
|
|
@GET("api/v1/blocks")
|
2022-12-07 19:34:31 +01:00
|
|
|
suspend fun blocks(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Query("max_id") maxId: String?
|
2022-12-07 19:34:31 +01:00
|
|
|
): Response<List<TimelineAccount>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("api/v1/mutes")
|
2022-12-07 19:34:31 +01:00
|
|
|
suspend fun mutes(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Query("max_id") maxId: String?
|
2022-12-07 19:34:31 +01:00
|
|
|
): Response<List<TimelineAccount>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("api/v1/domain_blocks")
|
|
|
|
fun domainBlocks(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Query("max_id") maxId: String? = null,
|
|
|
|
@Query("since_id") sinceId: String? = null,
|
|
|
|
@Query("limit") limit: Int? = null
|
2019-09-22 08:18:44 +02:00
|
|
|
): Single<Response<List<String>>>
|
|
|
|
|
|
|
|
@FormUrlEncoded
|
|
|
|
@POST("api/v1/domain_blocks")
|
|
|
|
fun blockDomain(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Field("domain") domain: String
|
2019-09-22 08:18:44 +02:00
|
|
|
): Call<Any>
|
|
|
|
|
|
|
|
@FormUrlEncoded
|
|
|
|
// @DELETE doesn't support fields
|
|
|
|
@HTTP(method = "DELETE", path = "api/v1/domain_blocks", hasBody = true)
|
|
|
|
fun unblockDomain(@Field("domain") domain: String): Call<Any>
|
|
|
|
|
|
|
|
@GET("api/v1/favourites")
|
2022-09-13 19:47:55 +02:00
|
|
|
suspend fun favourites(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Query("max_id") maxId: String?,
|
|
|
|
@Query("since_id") sinceId: String?,
|
|
|
|
@Query("limit") limit: Int?
|
2022-09-13 19:47:55 +02:00
|
|
|
): Response<List<Status>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
2019-11-19 10:15:32 +01:00
|
|
|
@GET("api/v1/bookmarks")
|
2022-09-13 19:47:55 +02:00
|
|
|
suspend fun bookmarks(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Query("max_id") maxId: String?,
|
|
|
|
@Query("since_id") sinceId: String?,
|
|
|
|
@Query("limit") limit: Int?
|
2022-09-13 19:47:55 +02:00
|
|
|
): Response<List<Status>>
|
2019-11-19 10:15:32 +01:00
|
|
|
|
2019-09-22 08:18:44 +02:00
|
|
|
@GET("api/v1/follow_requests")
|
2022-12-07 19:34:31 +01:00
|
|
|
suspend fun followRequests(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Query("max_id") maxId: String?
|
2022-12-07 19:34:31 +01:00
|
|
|
): Response<List<TimelineAccount>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@POST("api/v1/follow_requests/{id}/authorize")
|
|
|
|
fun authorizeFollowRequest(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") accountId: String
|
2020-03-19 22:02:10 +01:00
|
|
|
): Single<Relationship>
|
|
|
|
|
|
|
|
@POST("api/v1/follow_requests/{id}/reject")
|
2021-01-31 19:34:33 +01:00
|
|
|
fun rejectFollowRequest(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") accountId: String
|
2020-03-19 22:02:10 +01:00
|
|
|
): Single<Relationship>
|
|
|
|
|
2019-09-22 08:18:44 +02:00
|
|
|
@FormUrlEncoded
|
|
|
|
@POST("api/v1/apps")
|
2022-03-08 21:22:19 +01:00
|
|
|
suspend fun authenticateApp(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Header(DOMAIN_HEADER) domain: String,
|
|
|
|
@Field("client_name") clientName: String,
|
|
|
|
@Field("redirect_uris") redirectUris: String,
|
|
|
|
@Field("scopes") scopes: String,
|
|
|
|
@Field("website") website: String
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<AppCredentials>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@FormUrlEncoded
|
|
|
|
@POST("oauth/token")
|
2022-03-08 21:22:19 +01:00
|
|
|
suspend fun fetchOAuthToken(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Header(DOMAIN_HEADER) domain: String,
|
|
|
|
@Field("client_id") clientId: String,
|
|
|
|
@Field("client_secret") clientSecret: String,
|
|
|
|
@Field("redirect_uri") redirectUri: String,
|
|
|
|
@Field("code") code: String,
|
|
|
|
@Field("grant_type") grantType: String
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<AccessToken>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
2022-06-20 16:45:54 +02:00
|
|
|
@FormUrlEncoded
|
|
|
|
@POST("oauth/revoke")
|
|
|
|
suspend fun revokeOAuthToken(
|
|
|
|
@Field("client_id") clientId: String,
|
|
|
|
@Field("client_secret") clientSecret: String,
|
|
|
|
@Field("token") token: String
|
|
|
|
): NetworkResult<Unit>
|
|
|
|
|
2022-05-18 18:45:35 +02:00
|
|
|
@GET("/api/v1/lists")
|
2022-05-30 20:03:40 +02:00
|
|
|
suspend fun getLists(): NetworkResult<List<MastoList>>
|
2022-05-18 18:45:35 +02:00
|
|
|
|
2022-11-12 22:05:55 +01:00
|
|
|
@GET("/api/v1/accounts/{id}/lists")
|
|
|
|
suspend fun getListsIncludesAccount(
|
|
|
|
@Path("id") accountId: String
|
|
|
|
): NetworkResult<List<MastoList>>
|
|
|
|
|
2019-09-22 08:18:44 +02:00
|
|
|
@FormUrlEncoded
|
|
|
|
@POST("api/v1/lists")
|
2022-05-18 18:45:35 +02:00
|
|
|
suspend fun createList(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Field("title") title: String
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<MastoList>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@FormUrlEncoded
|
|
|
|
@PUT("api/v1/lists/{listId}")
|
2022-05-18 18:45:35 +02:00
|
|
|
suspend fun updateList(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("listId") listId: String,
|
|
|
|
@Field("title") title: String
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<MastoList>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@DELETE("api/v1/lists/{listId}")
|
2022-05-18 18:45:35 +02:00
|
|
|
suspend fun deleteList(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("listId") listId: String
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<Unit>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("api/v1/lists/{listId}/accounts")
|
2022-05-18 18:45:35 +02:00
|
|
|
suspend fun getAccountsInList(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("listId") listId: String,
|
|
|
|
@Query("limit") limit: Int
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<List<TimelineAccount>>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
2020-02-18 08:45:10 +01:00
|
|
|
@FormUrlEncoded
|
|
|
|
// @DELETE doesn't support fields
|
|
|
|
@HTTP(method = "DELETE", path = "api/v1/lists/{listId}/accounts", hasBody = true)
|
2022-05-18 18:45:35 +02:00
|
|
|
suspend fun deleteAccountFromList(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("listId") listId: String,
|
|
|
|
@Field("account_ids[]") accountIds: List<String>
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<Unit>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
2020-02-18 08:45:10 +01:00
|
|
|
@FormUrlEncoded
|
2019-09-22 08:18:44 +02:00
|
|
|
@POST("api/v1/lists/{listId}/accounts")
|
2022-05-18 18:45:35 +02:00
|
|
|
suspend fun addAccountToList(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("listId") listId: String,
|
|
|
|
@Field("account_ids[]") accountIds: List<String>
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<Unit>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@GET("/api/v1/conversations")
|
2021-06-17 18:54:56 +02:00
|
|
|
suspend fun getConversations(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Query("max_id") maxId: String? = null,
|
2022-05-30 19:06:14 +02:00
|
|
|
@Query("limit") limit: Int? = null
|
|
|
|
): Response<List<Conversation>>
|
2021-06-17 18:54:56 +02:00
|
|
|
|
|
|
|
@DELETE("/api/v1/conversations/{id}")
|
|
|
|
suspend fun deleteConversation(
|
|
|
|
@Path("id") conversationId: String
|
|
|
|
)
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@FormUrlEncoded
|
|
|
|
@POST("api/v1/filters")
|
2022-08-17 17:50:34 +02:00
|
|
|
suspend fun createFilter(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Field("phrase") phrase: String,
|
|
|
|
@Field("context[]") context: List<String>,
|
|
|
|
@Field("irreversible") irreversible: Boolean?,
|
|
|
|
@Field("whole_word") wholeWord: Boolean?,
|
2022-08-17 17:50:34 +02:00
|
|
|
@Field("expires_in") expiresInSeconds: Int?
|
|
|
|
): NetworkResult<Filter>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@FormUrlEncoded
|
|
|
|
@PUT("api/v1/filters/{id}")
|
2022-08-17 17:50:34 +02:00
|
|
|
suspend fun updateFilter(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") id: String,
|
|
|
|
@Field("phrase") phrase: String,
|
|
|
|
@Field("context[]") context: List<String>,
|
|
|
|
@Field("irreversible") irreversible: Boolean?,
|
|
|
|
@Field("whole_word") wholeWord: Boolean?,
|
2022-08-17 17:50:34 +02:00
|
|
|
@Field("expires_in") expiresInSeconds: Int?
|
|
|
|
): NetworkResult<Filter>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@DELETE("api/v1/filters/{id}")
|
2022-08-17 17:50:34 +02:00
|
|
|
suspend fun deleteFilter(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") id: String
|
2022-08-17 17:50:34 +02:00
|
|
|
): NetworkResult<ResponseBody>
|
2019-09-22 08:18:44 +02:00
|
|
|
|
|
|
|
@FormUrlEncoded
|
|
|
|
@POST("api/v1/polls/{id}/votes")
|
|
|
|
fun voteInPoll(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") id: String,
|
|
|
|
@Field("choices[]") choices: List<Int>
|
2019-09-22 08:18:44 +02:00
|
|
|
): Single<Poll>
|
|
|
|
|
2020-11-18 21:12:27 +01:00
|
|
|
@GET("api/v1/announcements")
|
2022-04-21 18:46:21 +02:00
|
|
|
suspend fun listAnnouncements(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Query("with_dismissed") withDismissed: Boolean = true
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<List<Announcement>>
|
2020-11-18 21:12:27 +01:00
|
|
|
|
|
|
|
@POST("api/v1/announcements/{id}/dismiss")
|
2022-04-21 18:46:21 +02:00
|
|
|
suspend fun dismissAnnouncement(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") announcementId: String
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<ResponseBody>
|
2020-11-18 21:12:27 +01:00
|
|
|
|
|
|
|
@PUT("api/v1/announcements/{id}/reactions/{name}")
|
2022-04-21 18:46:21 +02:00
|
|
|
suspend fun addAnnouncementReaction(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") announcementId: String,
|
|
|
|
@Path("name") name: String
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<ResponseBody>
|
2020-11-18 21:12:27 +01:00
|
|
|
|
|
|
|
@DELETE("api/v1/announcements/{id}/reactions/{name}")
|
2022-04-21 18:46:21 +02:00
|
|
|
suspend fun removeAnnouncementReaction(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") announcementId: String,
|
|
|
|
@Path("name") name: String
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<ResponseBody>
|
2020-11-18 21:12:27 +01:00
|
|
|
|
2019-09-22 08:18:44 +02:00
|
|
|
@FormUrlEncoded
|
|
|
|
@POST("api/v1/reports")
|
|
|
|
fun reportObservable(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Field("account_id") accountId: String,
|
|
|
|
@Field("status_ids[]") statusIds: List<String>,
|
|
|
|
@Field("comment") comment: String,
|
|
|
|
@Field("forward") isNotifyRemote: Boolean?
|
2019-09-22 08:18:44 +02:00
|
|
|
): Single<ResponseBody>
|
|
|
|
|
|
|
|
@GET("api/v1/accounts/{id}/statuses")
|
|
|
|
fun accountStatusesObservable(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") accountId: String,
|
|
|
|
@Query("max_id") maxId: String?,
|
|
|
|
@Query("since_id") sinceId: String?,
|
|
|
|
@Query("min_id") minId: String?,
|
|
|
|
@Query("limit") limit: Int?,
|
|
|
|
@Query("exclude_reblogs") excludeReblogs: Boolean?
|
2019-09-22 08:18:44 +02:00
|
|
|
): Single<List<Status>>
|
|
|
|
|
|
|
|
@GET("api/v1/statuses/{id}")
|
|
|
|
fun statusObservable(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") statusId: String
|
2019-09-22 08:18:44 +02:00
|
|
|
): Single<Status>
|
|
|
|
|
|
|
|
@GET("api/v2/search")
|
|
|
|
fun searchObservable(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Query("q") query: String?,
|
|
|
|
@Query("type") type: String? = null,
|
|
|
|
@Query("resolve") resolve: Boolean? = null,
|
|
|
|
@Query("limit") limit: Int? = null,
|
|
|
|
@Query("offset") offset: Int? = null,
|
|
|
|
@Query("following") following: Boolean? = null
|
2019-09-22 08:18:44 +02:00
|
|
|
): Single<SearchResult>
|
|
|
|
|
2022-05-17 19:55:37 +02:00
|
|
|
@GET("api/v2/search")
|
2022-05-30 20:03:40 +02:00
|
|
|
fun searchSync(
|
2022-05-17 19:55:37 +02:00
|
|
|
@Query("q") query: String?,
|
|
|
|
@Query("type") type: String? = null,
|
|
|
|
@Query("resolve") resolve: Boolean? = null,
|
|
|
|
@Query("limit") limit: Int? = null,
|
|
|
|
@Query("offset") offset: Int? = null,
|
|
|
|
@Query("following") following: Boolean? = null
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<SearchResult>
|
2022-05-17 19:55:37 +02:00
|
|
|
|
2020-11-17 20:10:54 +01:00
|
|
|
@FormUrlEncoded
|
|
|
|
@POST("api/v1/accounts/{id}/note")
|
|
|
|
fun updateAccountNote(
|
2021-06-28 21:13:24 +02:00
|
|
|
@Path("id") accountId: String,
|
|
|
|
@Field("comment") note: String
|
2020-11-17 20:10:54 +01:00
|
|
|
): Single<Relationship>
|
2022-05-17 19:32:09 +02:00
|
|
|
|
|
|
|
@FormUrlEncoded
|
|
|
|
@POST("api/v1/push/subscription")
|
|
|
|
suspend fun subscribePushNotifications(
|
|
|
|
@Header("Authorization") auth: String,
|
|
|
|
@Header(DOMAIN_HEADER) domain: String,
|
|
|
|
@Field("subscription[endpoint]") endPoint: String,
|
|
|
|
@Field("subscription[keys][p256dh]") keysP256DH: String,
|
|
|
|
@Field("subscription[keys][auth]") keysAuth: String,
|
|
|
|
// The "data[alerts][]" fields to enable / disable notifications
|
|
|
|
// Should be generated dynamically from all the available notification
|
|
|
|
// types defined in [com.keylesspalace.tusky.entities.Notification.Types]
|
|
|
|
@FieldMap data: Map<String, Boolean>
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<NotificationSubscribeResult>
|
2022-05-17 19:32:09 +02:00
|
|
|
|
|
|
|
@FormUrlEncoded
|
|
|
|
@PUT("api/v1/push/subscription")
|
|
|
|
suspend fun updatePushNotificationSubscription(
|
|
|
|
@Header("Authorization") auth: String,
|
|
|
|
@Header(DOMAIN_HEADER) domain: String,
|
|
|
|
@FieldMap data: Map<String, Boolean>
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<NotificationSubscribeResult>
|
2022-05-17 19:32:09 +02:00
|
|
|
|
|
|
|
@DELETE("api/v1/push/subscription")
|
|
|
|
suspend fun unsubscribePushNotifications(
|
|
|
|
@Header("Authorization") auth: String,
|
|
|
|
@Header(DOMAIN_HEADER) domain: String,
|
2022-05-30 20:03:40 +02:00
|
|
|
): NetworkResult<ResponseBody>
|
2022-08-07 19:09:26 +02:00
|
|
|
|
|
|
|
@GET("api/v1/tags/{name}")
|
|
|
|
suspend fun tag(@Path("name") name: String): NetworkResult<HashTag>
|
|
|
|
|
2022-12-01 19:24:27 +01:00
|
|
|
@GET("api/v1/followed_tags")
|
|
|
|
suspend fun followedTags(
|
|
|
|
@Query("min_id") minId: String? = null,
|
|
|
|
@Query("since_id") sinceId: String? = null,
|
|
|
|
@Query("max_id") maxId: String? = null,
|
|
|
|
@Query("limit") limit: Int? = null,
|
|
|
|
): Response<List<HashTag>>
|
|
|
|
|
2022-08-07 19:09:26 +02:00
|
|
|
@POST("api/v1/tags/{name}/follow")
|
|
|
|
suspend fun followTag(@Path("name") name: String): NetworkResult<HashTag>
|
|
|
|
|
|
|
|
@POST("api/v1/tags/{name}/unfollow")
|
|
|
|
suspend fun unfollowTag(@Path("name") name: String): NetworkResult<HashTag>
|
2019-09-22 08:18:44 +02:00
|
|
|
}
|