Skip to content

Commit ec811ee

Browse files
committed
message: Include both {new,originalRaw}Content in takeFailedMessageEdit
Greg points out that we'll need both values when restoring a failed message edit: originalRawContent for the eventual edit-message request (for prevContentSha256), and newContent to fill the edit-message compose box, so the user can restore the edit session to what it was before it failed.
1 parent 99c530a commit ec811ee

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

lib/model/message.dart

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,18 @@ mixin MessageStore {
6363
///
6464
/// Should only be called when there is a failed request,
6565
/// per [getEditMessageErrorStatus].
66-
String takeFailedMessageEdit(int messageId);
66+
({String originalRawContent, String newContent}) takeFailedMessageEdit(int messageId);
6767
}
6868

6969
class _EditMessageRequestStatus {
70-
_EditMessageRequestStatus({required this.hasError, required this.newContent});
70+
_EditMessageRequestStatus({
71+
required this.hasError,
72+
required this.originalRawContent,
73+
required this.newContent,
74+
});
7175

7276
bool hasError;
77+
final String originalRawContent;
7378
final String newContent;
7479
}
7580

@@ -185,7 +190,7 @@ class MessageStoreImpl extends PerAccountStoreBase with MessageStore {
185190
}
186191

187192
_editMessageRequests[messageId] = _EditMessageRequestStatus(
188-
hasError: false, newContent: newContent);
193+
hasError: false, originalRawContent: originalRawContent, newContent: newContent);
189194
_notifyMessageListViewsForOneMessage(messageId);
190195
try {
191196
await updateMessage(connection,
@@ -210,7 +215,7 @@ class MessageStoreImpl extends PerAccountStoreBase with MessageStore {
210215
}
211216

212217
@override
213-
String takeFailedMessageEdit(int messageId) {
218+
({String originalRawContent, String newContent}) takeFailedMessageEdit(int messageId) {
214219
final status = _editMessageRequests.remove(messageId);
215220
_notifyMessageListViewsForOneMessage(messageId);
216221
if (status == null) {
@@ -219,7 +224,10 @@ class MessageStoreImpl extends PerAccountStoreBase with MessageStore {
219224
if (!status.hasError) {
220225
throw StateError("called takeFailedMessageEdit, but edit hasn't failed");
221226
}
222-
return status.newContent;
227+
return (
228+
originalRawContent: status.originalRawContent,
229+
newContent: status.newContent
230+
);
223231
}
224232

225233
void handleUserTopicEvent(UserTopicEvent event) {

lib/model/store.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -765,7 +765,7 @@ class PerAccountStore extends PerAccountStoreBase with ChangeNotifier, EmojiStor
765765
originalRawContent: originalRawContent, newContent: newContent);
766766
}
767767
@override
768-
String takeFailedMessageEdit(int messageId) {
768+
({String originalRawContent, String newContent}) takeFailedMessageEdit(int messageId) {
769769
assert(!_disposed);
770770
return _messages.takeFailedMessageEdit(messageId);
771771
}

test/model/message_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ void main() {
252252
check(store.getEditMessageErrorStatus(message.id)).isNotNull().isTrue();
253253
checkNotifiedOnce();
254254

255-
check(store.takeFailedMessageEdit(message.id)).equals('new content');
255+
check(store.takeFailedMessageEdit(message.id).newContent).equals('new content');
256256
check(store.getEditMessageErrorStatus(message.id)).isNull();
257257
checkNotifiedOnce();
258258
}));
@@ -338,7 +338,7 @@ void main() {
338338
async.elapse(Duration(seconds: 1));
339339
check(store.getEditMessageErrorStatus(message.id)).isNotNull().isTrue();
340340
checkNotifiedOnce();
341-
check(store.takeFailedMessageEdit(message.id)).equals('new content');
341+
check(store.takeFailedMessageEdit(message.id).newContent).equals('new content');
342342
checkNotifiedOnce();
343343

344344
await store.handleEvent(eg.updateMessageEditEvent(message)); // no error

0 commit comments

Comments
 (0)