@@ -1307,6 +1307,44 @@ class Channel {
1307
1307
);
1308
1308
}
1309
1309
1310
+ /// Create a reminder for the given [messageId] .
1311
+ ///
1312
+ /// Optionally, provide a [remindAt] date to set when the reminder should
1313
+ /// be triggered. If not provided, the reminder will be created as a
1314
+ /// bookmark type instead.
1315
+ Future <CreateReminderResponse > createReminder (
1316
+ String messageId, {
1317
+ DateTime ? remindAt,
1318
+ }) {
1319
+ _checkInitialized ();
1320
+ return _client.createReminder (
1321
+ messageId,
1322
+ remindAt: remindAt,
1323
+ );
1324
+ }
1325
+
1326
+ /// Update an existing reminder with the given [reminderId] .
1327
+ ///
1328
+ /// Optionally, provide a [remindAt] date to set when the reminder should
1329
+ /// be triggered. If not provided, the reminder will be updated as a
1330
+ /// bookmark type instead.
1331
+ Future <UpdateReminderResponse > updateReminder (
1332
+ String messageId, {
1333
+ DateTime ? remindAt,
1334
+ }) {
1335
+ _checkInitialized ();
1336
+ return _client.updateReminder (
1337
+ messageId,
1338
+ remindAt: remindAt,
1339
+ );
1340
+ }
1341
+
1342
+ /// Remove the reminder for the given [messageId] .
1343
+ Future <EmptyResponse > deleteReminder (String messageId) {
1344
+ _checkInitialized ();
1345
+ return _client.deleteReminder (messageId);
1346
+ }
1347
+
1310
1348
/// Send a reaction to this channel.
1311
1349
///
1312
1350
/// Set [enforceUnique] to true to remove the existing user reaction.
@@ -2108,6 +2146,16 @@ class ChannelClientState {
2108
2146
2109
2147
_listenUserStopWatching ();
2110
2148
2149
+ /* Start of reminder events */
2150
+
2151
+ _listenReminderCreated ();
2152
+
2153
+ _listenReminderUpdated ();
2154
+
2155
+ _listenReminderDeleted ();
2156
+
2157
+ /* End of reminder events */
2158
+
2111
2159
_startCleaningStaleTypingEvents ();
2112
2160
2113
2161
_startCleaningStalePinnedMessages ();
@@ -2593,6 +2641,65 @@ class ChannelClientState {
2593
2641
);
2594
2642
}
2595
2643
2644
+ void _listenReminderCreated () {
2645
+ _subscriptions.add (
2646
+ _channel.on (EventType .reminderCreated).listen ((event) {
2647
+ final reminder = event.reminder;
2648
+ if (reminder == null ) return ;
2649
+
2650
+ updateReminder (reminder);
2651
+ }),
2652
+ );
2653
+ }
2654
+
2655
+ void _listenReminderUpdated () {
2656
+ _subscriptions.add (
2657
+ _channel.on (EventType .reminderUpdated).listen ((event) {
2658
+ final reminder = event.reminder;
2659
+ if (reminder == null ) return ;
2660
+
2661
+ updateReminder (reminder);
2662
+ }),
2663
+ );
2664
+ }
2665
+
2666
+ void _listenReminderDeleted () {
2667
+ _subscriptions.add (
2668
+ _channel.on (EventType .reminderDeleted).listen ((event) {
2669
+ final reminder = event.reminder;
2670
+ if (reminder == null ) return ;
2671
+
2672
+ deleteReminder (reminder);
2673
+ }),
2674
+ );
2675
+ }
2676
+
2677
+ /// Updates the [reminder] of the message if it exists.
2678
+ void updateReminder (MessageReminder reminder) {
2679
+ final messageId = reminder.messageId;
2680
+ // TODO: Improve once we have support for parentId in reminders.
2681
+ for (final message in [...messages, ...threads.values.flattened]) {
2682
+ if (message.id == messageId) {
2683
+ return updateMessage (
2684
+ message.copyWith (reminder: reminder),
2685
+ );
2686
+ }
2687
+ }
2688
+ }
2689
+
2690
+ /// Deletes the [reminder] of the message if it exists.
2691
+ void deleteReminder (MessageReminder reminder) {
2692
+ final messageId = reminder.messageId;
2693
+ // TODO: Improve once we have support for parentId in reminders.
2694
+ for (final message in [...messages, ...threads.values.flattened]) {
2695
+ if (message.id == messageId) {
2696
+ return updateMessage (
2697
+ message.copyWith (reminder: null ),
2698
+ );
2699
+ }
2700
+ }
2701
+ }
2702
+
2596
2703
void _listenReactionDeleted () {
2597
2704
_subscriptions.add (_channel.on (EventType .reactionDeleted).listen ((event) {
2598
2705
final oldMessage =
0 commit comments