don't spam endless posts when trying to schedule on GoToSocial (#4705)

closes #4703
This commit is contained in:
Konrad Pozniak 2024-10-11 09:23:30 +02:00 committed by GitHub
parent 997fd14c81
commit c45a3320d2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 12 additions and 5 deletions

View File

@ -4,7 +4,6 @@ import com.keylesspalace.tusky.TabData
import com.keylesspalace.tusky.entity.Account import com.keylesspalace.tusky.entity.Account
import com.keylesspalace.tusky.entity.Notification import com.keylesspalace.tusky.entity.Notification
import com.keylesspalace.tusky.entity.Poll import com.keylesspalace.tusky.entity.Poll
import com.keylesspalace.tusky.entity.ScheduledStatus
import com.keylesspalace.tusky.entity.Status import com.keylesspalace.tusky.entity.Status
data class StatusChangedEvent(val status: Status) : Event data class StatusChangedEvent(val status: Status) : Event
@ -13,7 +12,7 @@ data class BlockEvent(val accountId: String) : Event
data class MuteEvent(val accountId: String) : Event data class MuteEvent(val accountId: String) : Event
data class StatusDeletedEvent(val statusId: String) : Event data class StatusDeletedEvent(val statusId: String) : Event
data class StatusComposedEvent(val status: Status) : Event data class StatusComposedEvent(val status: Status) : Event
data class StatusScheduledEvent(val scheduledStatus: ScheduledStatus) : Event data class StatusScheduledEvent(val scheduledStatusId: String) : Event
data class ProfileEditedEvent(val newProfileData: Account) : Event data class ProfileEditedEvent(val newProfileData: Account) : Event
data class PreferenceChangedEvent(val preferenceKey: String) : Event data class PreferenceChangedEvent(val preferenceKey: String) : Event
data class MainTabsChangedEvent(val newTabs: List<TabData>) : Event data class MainTabsChangedEvent(val newTabs: List<TabData>) : Event

View File

@ -25,3 +25,10 @@ data class ScheduledStatus(
val params: StatusParams, val params: StatusParams,
@Json(name = "media_attachments") val mediaAttachments: List<Attachment> @Json(name = "media_attachments") val mediaAttachments: List<Attachment>
) )
// minimal class to avoid json parsing errors with servers that don't support scheduling
// https://github.com/tuskyapp/Tusky/issues/4703
@JsonClass(generateAdapter = true)
data class ScheduledStatusReply(
val id: String,
)

View File

@ -39,6 +39,7 @@ import com.keylesspalace.tusky.entity.NotificationSubscribeResult
import com.keylesspalace.tusky.entity.Poll import com.keylesspalace.tusky.entity.Poll
import com.keylesspalace.tusky.entity.Relationship import com.keylesspalace.tusky.entity.Relationship
import com.keylesspalace.tusky.entity.ScheduledStatus import com.keylesspalace.tusky.entity.ScheduledStatus
import com.keylesspalace.tusky.entity.ScheduledStatusReply
import com.keylesspalace.tusky.entity.SearchResult import com.keylesspalace.tusky.entity.SearchResult
import com.keylesspalace.tusky.entity.Status import com.keylesspalace.tusky.entity.Status
import com.keylesspalace.tusky.entity.StatusContext import com.keylesspalace.tusky.entity.StatusContext
@ -207,7 +208,7 @@ interface MastodonApi {
@Header(DOMAIN_HEADER) domain: String, @Header(DOMAIN_HEADER) domain: String,
@Header("Idempotency-Key") idempotencyKey: String, @Header("Idempotency-Key") idempotencyKey: String,
@Body status: NewStatus @Body status: NewStatus
): NetworkResult<ScheduledStatus> ): NetworkResult<ScheduledStatusReply>
@GET("api/v1/statuses/{id}") @GET("api/v1/statuses/{id}")
suspend fun status(@Path("id") statusId: String): NetworkResult<Status> suspend fun status(@Path("id") statusId: String): NetworkResult<Status>

View File

@ -47,7 +47,7 @@ import com.keylesspalace.tusky.entity.Attachment
import com.keylesspalace.tusky.entity.MediaAttribute import com.keylesspalace.tusky.entity.MediaAttribute
import com.keylesspalace.tusky.entity.NewPoll import com.keylesspalace.tusky.entity.NewPoll
import com.keylesspalace.tusky.entity.NewStatus import com.keylesspalace.tusky.entity.NewStatus
import com.keylesspalace.tusky.entity.ScheduledStatus import com.keylesspalace.tusky.entity.ScheduledStatusReply
import com.keylesspalace.tusky.entity.Status import com.keylesspalace.tusky.entity.Status
import com.keylesspalace.tusky.network.MastodonApi import com.keylesspalace.tusky.network.MastodonApi
import com.keylesspalace.tusky.util.getParcelableExtraCompat import com.keylesspalace.tusky.util.getParcelableExtraCompat
@ -290,7 +290,7 @@ class SendStatusService : Service() {
mediaUploader.cancelUploadScope(*statusToSend.media.map { it.localId }.toIntArray()) mediaUploader.cancelUploadScope(*statusToSend.media.map { it.localId }.toIntArray())
if (scheduled) { if (scheduled) {
eventHub.dispatch(StatusScheduledEvent(sentStatus as ScheduledStatus)) eventHub.dispatch(StatusScheduledEvent((sentStatus as ScheduledStatusReply).id))
} else if (!isNew) { } else if (!isNew) {
eventHub.dispatch(StatusChangedEvent(sentStatus as Status)) eventHub.dispatch(StatusChangedEvent(sentStatus as Status))
} else { } else {