Skip to content

Commit 7902e3e

Browse files
committed
compose: Support editing an already-sent message
Fixes: #126
1 parent abec662 commit 7902e3e

12 files changed

+223
-42
lines changed

assets/l10n/app_en.arb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -680,5 +680,17 @@
680680
"emojiPickerSearchEmoji": "Search emoji",
681681
"@emojiPickerSearchEmoji": {
682682
"description": "Hint text for the emoji picker search text field."
683+
},
684+
"actionSheetOptionEditMessage": "Edit",
685+
"@actionSheetOptionEditMessage": {
686+
"description": "Label for action sheet button to edit a message."
687+
},
688+
"errorEditingFailed": "Failed to edit message",
689+
"@errorEditingFailed": {
690+
"description": "Error title when editing a message fails."
691+
},
692+
"editMessageSaveTooltip": "Save changes",
693+
"@editMessageSaveTooltip": {
694+
"description": "Tooltip for the save button when editing a message"
683695
}
684696
}

lib/generated/l10n/zulip_localizations.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1016,6 +1016,24 @@ abstract class ZulipLocalizations {
10161016
/// In en, this message translates to:
10171017
/// **'Search emoji'**
10181018
String get emojiPickerSearchEmoji;
1019+
1020+
/// Label for action sheet button to edit a message.
1021+
///
1022+
/// In en, this message translates to:
1023+
/// **'Edit'**
1024+
String get actionSheetOptionEditMessage;
1025+
1026+
/// Error title when editing a message fails.
1027+
///
1028+
/// In en, this message translates to:
1029+
/// **'Failed to edit message'**
1030+
String get errorEditingFailed;
1031+
1032+
/// Tooltip for the save button when editing a message
1033+
///
1034+
/// In en, this message translates to:
1035+
/// **'Save changes'**
1036+
String get editMessageSaveTooltip;
10191037
}
10201038

10211039
class _ZulipLocalizationsDelegate extends LocalizationsDelegate<ZulipLocalizations> {

lib/generated/l10n/zulip_localizations_ar.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,4 +537,13 @@ class ZulipLocalizationsAr extends ZulipLocalizations {
537537

538538
@override
539539
String get emojiPickerSearchEmoji => 'Search emoji';
540+
541+
@override
542+
String get actionSheetOptionEditMessage => 'Edit';
543+
544+
@override
545+
String get errorEditingFailed => 'Failed to edit message';
546+
547+
@override
548+
String get editMessageSaveTooltip => 'Save changes';
540549
}

lib/generated/l10n/zulip_localizations_en.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,4 +537,13 @@ class ZulipLocalizationsEn extends ZulipLocalizations {
537537

538538
@override
539539
String get emojiPickerSearchEmoji => 'Search emoji';
540+
541+
@override
542+
String get actionSheetOptionEditMessage => 'Edit';
543+
544+
@override
545+
String get errorEditingFailed => 'Failed to edit message';
546+
547+
@override
548+
String get editMessageSaveTooltip => 'Save changes';
540549
}

lib/generated/l10n/zulip_localizations_ja.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,4 +537,13 @@ class ZulipLocalizationsJa extends ZulipLocalizations {
537537

538538
@override
539539
String get emojiPickerSearchEmoji => 'Search emoji';
540+
541+
@override
542+
String get actionSheetOptionEditMessage => 'Edit';
543+
544+
@override
545+
String get errorEditingFailed => 'Failed to edit message';
546+
547+
@override
548+
String get editMessageSaveTooltip => 'Save changes';
540549
}

lib/generated/l10n/zulip_localizations_nb.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,4 +537,13 @@ class ZulipLocalizationsNb extends ZulipLocalizations {
537537

538538
@override
539539
String get emojiPickerSearchEmoji => 'Search emoji';
540+
541+
@override
542+
String get actionSheetOptionEditMessage => 'Edit';
543+
544+
@override
545+
String get errorEditingFailed => 'Failed to edit message';
546+
547+
@override
548+
String get editMessageSaveTooltip => 'Save changes';
540549
}

lib/generated/l10n/zulip_localizations_pl.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,4 +537,13 @@ class ZulipLocalizationsPl extends ZulipLocalizations {
537537

538538
@override
539539
String get emojiPickerSearchEmoji => 'Szukaj emoji';
540+
541+
@override
542+
String get actionSheetOptionEditMessage => 'Edit';
543+
544+
@override
545+
String get errorEditingFailed => 'Failed to edit message';
546+
547+
@override
548+
String get editMessageSaveTooltip => 'Save changes';
540549
}

lib/generated/l10n/zulip_localizations_ru.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,4 +537,13 @@ class ZulipLocalizationsRu extends ZulipLocalizations {
537537

538538
@override
539539
String get emojiPickerSearchEmoji => 'Поиск эмодзи';
540+
541+
@override
542+
String get actionSheetOptionEditMessage => 'Edit';
543+
544+
@override
545+
String get errorEditingFailed => 'Failed to edit message';
546+
547+
@override
548+
String get editMessageSaveTooltip => 'Save changes';
540549
}

lib/generated/l10n/zulip_localizations_sk.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,4 +537,13 @@ class ZulipLocalizationsSk extends ZulipLocalizations {
537537

538538
@override
539539
String get emojiPickerSearchEmoji => 'Hľadať emotikon';
540+
541+
@override
542+
String get actionSheetOptionEditMessage => 'Edit';
543+
544+
@override
545+
String get errorEditingFailed => 'Failed to edit message';
546+
547+
@override
548+
String get editMessageSaveTooltip => 'Save changes';
540549
}

lib/model/store.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -715,6 +715,16 @@ class PerAccountStore extends ChangeNotifier with EmojiStore, ChannelStore, Mess
715715
);
716716
}
717717

718+
Future<void> editMessage({required int messageId, required String content}) {
719+
assert(!_disposed);
720+
721+
return _apiUpdateMessage(connection,
722+
messageId: messageId,
723+
content: content,
724+
propagateMode: PropagateMode.changeOne,
725+
);
726+
}
727+
718728
static List<CustomProfileField> _sortCustomProfileFields(List<CustomProfileField> initialCustomProfileFields) {
719729
// TODO(server): The realm-wide field objects have an `order` property,
720730
// but the actual API appears to be that the fields should be shown in
@@ -735,6 +745,7 @@ class PerAccountStore extends ChangeNotifier with EmojiStore, ChannelStore, Mess
735745
}
736746

737747
const _apiSendMessage = sendMessage; // Bit ugly; for alternatives, see: https://chat.zulip.org/#narrow/stream/243-mobile-team/topic/flutter.3A.20PerAccountStore.20methods/near/1545809
748+
const _apiUpdateMessage = updateMessage;
738749
const _tryResolveUrl = tryResolveUrl;
739750

740751
/// Like [Uri.resolve], but on failure return null instead of throwing.

0 commit comments

Comments
 (0)