@@ -54,21 +54,29 @@ class ReminderBloc extends Bloc<ReminderEvent, ReminderState> {
54
54
bool hasReminder (String reminderId) =>
55
55
state.allReminders.where ((e) => e.id == reminderId).firstOrNull != null ;
56
56
57
+ final List <ViewPB > _allViews = [];
58
+
57
59
void _dispatch () {
58
60
on < ReminderEvent > (
59
61
(event, emit) async {
60
62
await event.when (
61
63
started: () async {
62
- Log .info ('Start fetching reminders' );
64
+ add (const ReminderEvent .refresh ());
65
+ },
66
+ refresh: () async {
63
67
final result = await _reminderService.fetchReminders ();
68
+ final views = await ViewBackendService .getAllViews ();
69
+ views.onSuccess ((views) {
70
+ _allViews.clear ();
71
+ _allViews.addAll (views.items);
72
+ });
73
+
64
74
await result.fold (
65
75
(reminders) async {
66
- final availableReminders = await filterAvailableReminders (
67
- reminders,
68
- removeUnavailableReminder: true ,
69
- );
76
+ final availableReminders =
77
+ await filterAvailableReminders (reminders);
70
78
Log .info (
71
- 'Fetched reminders on startup : ${availableReminders .length }' ,
79
+ 'Fetched reminders on refresh : ${availableReminders .length }' ,
72
80
);
73
81
if (! isClosed && ! emit.isDone) {
74
82
emit (
@@ -79,12 +87,12 @@ class ReminderBloc extends Bloc<ReminderEvent, ReminderState> {
79
87
);
80
88
}
81
89
},
82
- (error) async {
90
+ (error) {
83
91
Log .error ('Failed to fetch reminders: $error ' );
84
92
},
85
93
);
86
94
},
87
- remove : (reminderId) async {
95
+ removeReminder : (reminderId) async {
88
96
final result = await _reminderService.removeReminder (
89
97
reminderId: reminderId,
90
98
);
@@ -105,6 +113,28 @@ class ReminderBloc extends Bloc<ReminderEvent, ReminderState> {
105
113
),
106
114
);
107
115
},
116
+ removeReminders: (reminderIds) async {
117
+ Log .info ('Remove reminders: $reminderIds ' );
118
+ final removedIds = < String > {};
119
+ for (final reminderId in reminderIds) {
120
+ final result = await _reminderService.removeReminder (
121
+ reminderId: reminderId,
122
+ );
123
+ if (result.isSuccess) {
124
+ Log .info ('Removed reminder: $reminderId ' );
125
+ removedIds.add (reminderId);
126
+ } else {
127
+ Log .error ('Failed to remove reminder: $reminderId ' );
128
+ }
129
+ }
130
+ emit (
131
+ state.copyWith (
132
+ reminders: state.reminders
133
+ .where ((reminder) => ! removedIds.contains (reminder.id))
134
+ .toList (),
135
+ ),
136
+ );
137
+ },
108
138
add: (reminder) async {
109
139
// check the timestamp in the reminder
110
140
if (reminder.createdAt == null ) {
@@ -305,30 +335,6 @@ class ReminderBloc extends Bloc<ReminderEvent, ReminderState> {
305
335
),
306
336
);
307
337
},
308
- refresh: () async {
309
- final result = await _reminderService.fetchReminders ();
310
-
311
- await result.fold (
312
- (reminders) async {
313
- final availableReminders =
314
- await filterAvailableReminders (reminders);
315
- Log .info (
316
- 'Fetched reminders on refresh: ${availableReminders .length }' ,
317
- );
318
- if (! isClosed && ! emit.isDone) {
319
- emit (
320
- state.copyWith (
321
- reminders: availableReminders,
322
- serverReminders: reminders,
323
- ),
324
- );
325
- }
326
- },
327
- (error) {
328
- Log .error ('Failed to fetch reminders: $error ' );
329
- },
330
- );
331
- },
332
338
resetTimer: () {
333
339
timer? .cancel ();
334
340
timer = _periodicCheck ();
@@ -450,16 +456,15 @@ class ReminderBloc extends Bloc<ReminderEvent, ReminderState> {
450
456
Set <String > reminderIds, {
451
457
Set <String > removeIds = const {},
452
458
}) async {
453
- /// check if schedule time is comming
459
+ /// check if schedule time is coming
454
460
final scheduledAt = reminder.scheduledAt.toDateTime ();
455
461
if (! DateTime .now ().isAfter (scheduledAt) && ! reminder.isRead) {
456
462
return false ;
457
463
}
458
464
459
465
/// check if view is not null
460
466
final viewId = reminder.objectId;
461
- final view =
462
- await ViewBackendService .getView (viewId).fold ((s) => s, (_) => null );
467
+ final view = _allViews.firstWhereOrNull ((e) => e.id == viewId);
463
468
if (view == null ) {
464
469
removeIds.add (reminder.id);
465
470
return false ;
@@ -527,17 +532,18 @@ class ReminderBloc extends Bloc<ReminderEvent, ReminderState> {
527
532
final List <ReminderPB > availableReminders = [];
528
533
final reminderIds = reminders.map ((e) => e.id).toSet ();
529
534
final removeIds = < String > {};
535
+
530
536
for (final r in reminders) {
531
537
if (await checkReminderAvailable (r, reminderIds, removeIds: removeIds)) {
532
538
availableReminders.add (r);
533
539
}
534
540
}
541
+
535
542
if (removeUnavailableReminder) {
536
- for (final id in removeIds) {
537
- Log .warn ('Remove unavailable reminder: $id ' );
538
- if (! isClosed) add (ReminderEvent .remove (reminderId: id));
539
- }
543
+ Log .info ('Remove unavailable reminder: $removeIds ' );
544
+ add (ReminderEvent .removeReminders (removeIds));
540
545
}
546
+
541
547
return availableReminders;
542
548
}
543
549
}
@@ -548,7 +554,12 @@ class ReminderEvent with _$ReminderEvent {
548
554
const factory ReminderEvent .started () = _Started ;
549
555
550
556
// Remove a reminder
551
- const factory ReminderEvent .remove ({required String reminderId}) = _Remove ;
557
+ const factory ReminderEvent .removeReminder ({required String reminderId}) =
558
+ _RemoveReminder ;
559
+
560
+ // Remove reminders
561
+ const factory ReminderEvent .removeReminders (Set <String > reminderIds) =
562
+ _RemoveReminders ;
552
563
553
564
// Add a reminder
554
565
const factory ReminderEvent .add ({required ReminderPB reminder}) = _Add ;
0 commit comments