Remove stale pre-edit statuses from the thread view. (#3377)
Fixes #3366
This commit is contained in:
parent
4d401c7878
commit
f71aa55bbe
4 changed files with 29 additions and 4 deletions
|
@ -15,6 +15,7 @@ data class MuteEvent(val accountId: String) : Dispatchable
|
|||
data class StatusDeletedEvent(val statusId: String) : Dispatchable
|
||||
data class StatusComposedEvent(val status: Status) : Dispatchable
|
||||
data class StatusScheduledEvent(val status: Status) : Dispatchable
|
||||
data class StatusEditedEvent(val originalId: String, val status: Status) : Dispatchable
|
||||
data class ProfileEditedEvent(val newProfileData: Account) : Dispatchable
|
||||
data class PreferenceChangedEvent(val preferenceKey: String) : Dispatchable
|
||||
data class MainTabsChangedEvent(val newTabs: List<TabData>) : Dispatchable
|
||||
|
|
|
@ -45,6 +45,7 @@ import com.keylesspalace.tusky.adapter.StatusBaseViewHolder
|
|||
import com.keylesspalace.tusky.appstore.EventHub
|
||||
import com.keylesspalace.tusky.appstore.PreferenceChangedEvent
|
||||
import com.keylesspalace.tusky.appstore.StatusComposedEvent
|
||||
import com.keylesspalace.tusky.appstore.StatusEditedEvent
|
||||
import com.keylesspalace.tusky.components.accountlist.AccountListActivity
|
||||
import com.keylesspalace.tusky.components.accountlist.AccountListActivity.Companion.newIntent
|
||||
import com.keylesspalace.tusky.components.preference.PreferencesFragment.ReadingOrder
|
||||
|
@ -303,6 +304,9 @@ class TimelineFragment :
|
|||
val status = event.status
|
||||
handleStatusComposeEvent(status)
|
||||
}
|
||||
is StatusEditedEvent -> {
|
||||
handleStatusComposeEvent(event.status)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@ import com.keylesspalace.tusky.appstore.PinEvent
|
|||
import com.keylesspalace.tusky.appstore.ReblogEvent
|
||||
import com.keylesspalace.tusky.appstore.StatusComposedEvent
|
||||
import com.keylesspalace.tusky.appstore.StatusDeletedEvent
|
||||
import com.keylesspalace.tusky.appstore.StatusEditedEvent
|
||||
import com.keylesspalace.tusky.components.timeline.toViewData
|
||||
import com.keylesspalace.tusky.components.timeline.util.ifExpected
|
||||
import com.keylesspalace.tusky.db.AccountManager
|
||||
|
@ -92,6 +93,7 @@ class ViewThreadViewModel @Inject constructor(
|
|||
is BlockEvent -> removeAllByAccountId(event.accountId)
|
||||
is StatusComposedEvent -> handleStatusComposedEvent(event)
|
||||
is StatusDeletedEvent -> handleStatusDeletedEvent(event)
|
||||
is StatusEditedEvent -> handleStatusEditedEvent(event)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -327,6 +329,20 @@ class ViewThreadViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun handleStatusEditedEvent(event: StatusEditedEvent) {
|
||||
updateSuccess { uiState ->
|
||||
uiState.copy(
|
||||
statusViewData = uiState.statusViewData.map { status ->
|
||||
if (status.actionableId == event.originalId) {
|
||||
event.status.toViewData()
|
||||
} else {
|
||||
status
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleStatusDeletedEvent(event: StatusDeletedEvent) {
|
||||
updateSuccess { uiState ->
|
||||
uiState.copy(
|
||||
|
|
|
@ -21,6 +21,7 @@ import com.keylesspalace.tusky.MainActivity
|
|||
import com.keylesspalace.tusky.R
|
||||
import com.keylesspalace.tusky.appstore.EventHub
|
||||
import com.keylesspalace.tusky.appstore.StatusComposedEvent
|
||||
import com.keylesspalace.tusky.appstore.StatusEditedEvent
|
||||
import com.keylesspalace.tusky.appstore.StatusScheduledEvent
|
||||
import com.keylesspalace.tusky.components.compose.MediaUploader
|
||||
import com.keylesspalace.tusky.components.compose.UploadEvent
|
||||
|
@ -202,16 +203,17 @@ class SendStatusService : Service(), Injectable {
|
|||
},
|
||||
)
|
||||
|
||||
val sendResult = if (statusToSend.statusId == null) {
|
||||
mastodonApi.createStatus(
|
||||
val editing = (statusToSend.statusId != null)
|
||||
val sendResult = if (editing) {
|
||||
mastodonApi.editStatus(
|
||||
statusToSend.statusId!!,
|
||||
"Bearer " + account.accessToken,
|
||||
account.domain,
|
||||
statusToSend.idempotencyKey,
|
||||
newStatus
|
||||
)
|
||||
} else {
|
||||
mastodonApi.editStatus(
|
||||
statusToSend.statusId,
|
||||
mastodonApi.createStatus(
|
||||
"Bearer " + account.accessToken,
|
||||
account.domain,
|
||||
statusToSend.idempotencyKey,
|
||||
|
@ -232,6 +234,8 @@ class SendStatusService : Service(), Injectable {
|
|||
|
||||
if (scheduled) {
|
||||
eventHub.dispatch(StatusScheduledEvent(sentStatus))
|
||||
} else if (editing) {
|
||||
eventHub.dispatch(StatusEditedEvent(statusToSend.statusId!!, sentStatus))
|
||||
} else {
|
||||
eventHub.dispatch(StatusComposedEvent(sentStatus))
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue