mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
chore: add more logs in reminder bloc
This commit is contained in:
parent
c2e8a12427
commit
9d0bb8fb29
@ -43,33 +43,43 @@ class ReminderBloc extends Bloc<ReminderEvent, ReminderState> {
|
|||||||
final remindersOrFailure = await _reminderService.fetchReminders();
|
final remindersOrFailure = await _reminderService.fetchReminders();
|
||||||
|
|
||||||
remindersOrFailure.fold(
|
remindersOrFailure.fold(
|
||||||
(reminders) => emit(state.copyWith(reminders: reminders)),
|
(reminders) {
|
||||||
(error) => Log.error(error),
|
Log.info('Fetched reminders on startup (${reminders.length})');
|
||||||
|
emit(state.copyWith(reminders: reminders));
|
||||||
|
},
|
||||||
|
(error) {
|
||||||
|
Log.error('Failed to fetch reminders: $error');
|
||||||
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
remove: (reminderId) async {
|
remove: (reminderId) async {
|
||||||
final unitOrFailure =
|
final unitOrFailure = await _reminderService.removeReminder(
|
||||||
await _reminderService.removeReminder(reminderId: reminderId);
|
reminderId: reminderId,
|
||||||
|
);
|
||||||
|
|
||||||
unitOrFailure.fold(
|
unitOrFailure.fold(
|
||||||
(_) {
|
(_) {
|
||||||
|
Log.info('Reminder removed: $reminderId');
|
||||||
final reminders = [...state.reminders];
|
final reminders = [...state.reminders];
|
||||||
reminders.removeWhere((e) => e.id == reminderId);
|
reminders.removeWhere((e) => e.id == reminderId);
|
||||||
emit(state.copyWith(reminders: reminders));
|
emit(state.copyWith(reminders: reminders));
|
||||||
},
|
},
|
||||||
(error) => Log.error(error),
|
(error) =>
|
||||||
|
Log.error('Failed to remove reminder($reminderId): $error'),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
add: (reminder) async {
|
add: (reminder) async {
|
||||||
final unitOrFailure =
|
final unitOrFailure = await _reminderService.addReminder(
|
||||||
await _reminderService.addReminder(reminder: reminder);
|
reminder: reminder,
|
||||||
|
);
|
||||||
|
|
||||||
return unitOrFailure.fold(
|
return unitOrFailure.fold(
|
||||||
(_) {
|
(_) {
|
||||||
|
Log.info('Reminder added: ${reminder.id}');
|
||||||
final reminders = [...state.reminders, reminder];
|
final reminders = [...state.reminders, reminder];
|
||||||
emit(state.copyWith(reminders: reminders));
|
emit(state.copyWith(reminders: reminders));
|
||||||
},
|
},
|
||||||
(error) => Log.error(error),
|
(error) => Log.error('Failed to add reminder: $error'),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
addById: (reminderId, objectId, scheduledAt, meta) async => add(
|
addById: (reminderId, objectId, scheduledAt, meta) async => add(
|
||||||
@ -86,8 +96,9 @@ class ReminderBloc extends Bloc<ReminderEvent, ReminderState> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
update: (updateObject) async {
|
update: (updateObject) async {
|
||||||
final reminder = state.reminders
|
final reminder = state.reminders.firstWhereOrNull(
|
||||||
.firstWhereOrNull((r) => r.id == updateObject.id);
|
(r) => r.id == updateObject.id,
|
||||||
|
);
|
||||||
|
|
||||||
if (reminder == null) {
|
if (reminder == null) {
|
||||||
return;
|
return;
|
||||||
@ -95,18 +106,20 @@ class ReminderBloc extends Bloc<ReminderEvent, ReminderState> {
|
|||||||
|
|
||||||
final newReminder = updateObject.merge(a: reminder);
|
final newReminder = updateObject.merge(a: reminder);
|
||||||
final failureOrUnit = await _reminderService.updateReminder(
|
final failureOrUnit = await _reminderService.updateReminder(
|
||||||
reminder: newReminder,
|
reminder: updateObject.merge(a: reminder),
|
||||||
);
|
);
|
||||||
|
|
||||||
failureOrUnit.fold(
|
failureOrUnit.fold(
|
||||||
(_) {
|
(_) {
|
||||||
final index =
|
Log.info('Reminder updated: ${updateObject.id} $updateObject');
|
||||||
state.reminders.indexWhere((r) => r.id == reminder.id);
|
final index = state.reminders.indexWhere(
|
||||||
|
(r) => r.id == reminder.id,
|
||||||
|
);
|
||||||
final reminders = [...state.reminders];
|
final reminders = [...state.reminders];
|
||||||
reminders.replaceRange(index, index + 1, [newReminder]);
|
reminders.replaceRange(index, index + 1, [newReminder]);
|
||||||
emit(state.copyWith(reminders: reminders));
|
emit(state.copyWith(reminders: reminders));
|
||||||
},
|
},
|
||||||
(error) => Log.error(error),
|
(error) => Log.error('Failed to update reminder: $error'),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
pressReminder: (reminderId, path, view) {
|
pressReminder: (reminderId, path, view) {
|
||||||
@ -155,46 +168,61 @@ class ReminderBloc extends Bloc<ReminderEvent, ReminderState> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
markAsRead: (reminderIds) async {
|
|
||||||
final reminders = await _onMarkAsRead(reminderIds: reminderIds);
|
|
||||||
emit(
|
|
||||||
state.copyWith(
|
|
||||||
reminders: reminders,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
archive: (reminderIds) async {
|
|
||||||
final reminders = await _onArchived(
|
|
||||||
isArchived: true,
|
|
||||||
reminderIds: reminderIds,
|
|
||||||
);
|
|
||||||
emit(
|
|
||||||
state.copyWith(
|
|
||||||
reminders: reminders,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
markAllRead: () async {
|
markAllRead: () async {
|
||||||
final reminders = await _onMarkAsRead();
|
final unreadReminders = state.reminders.where(
|
||||||
|
(reminder) => !reminder.isRead,
|
||||||
|
);
|
||||||
|
|
||||||
|
for (final reminder in unreadReminders) {
|
||||||
|
reminder.isRead = true;
|
||||||
|
await _reminderService.updateReminder(reminder: reminder);
|
||||||
|
}
|
||||||
|
|
||||||
|
final reminder = [...state.reminders].map((e) {
|
||||||
|
if (e.isRead) {
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
e.freeze();
|
||||||
|
return e.rebuild((update) {
|
||||||
|
update.isRead = true;
|
||||||
|
});
|
||||||
|
}).toList();
|
||||||
|
|
||||||
|
Log.info('Marked all reminders as read');
|
||||||
|
|
||||||
emit(
|
emit(
|
||||||
state.copyWith(
|
state.copyWith(
|
||||||
reminders: reminders,
|
reminders: reminder,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
archiveAll: () async {
|
archiveAll: () async {
|
||||||
final reminders = await _onArchived(isArchived: true);
|
final unArchivedReminders = state.reminders.where(
|
||||||
emit(
|
(reminder) => !reminder.isArchived,
|
||||||
state.copyWith(
|
|
||||||
reminders: reminders,
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
},
|
|
||||||
unarchiveAll: () async {
|
for (final reminder in unArchivedReminders) {
|
||||||
final reminders = await _onArchived(isArchived: false);
|
reminder.isRead = true;
|
||||||
|
reminder.meta[ReminderMetaKeys.isArchived] = true.toString();
|
||||||
|
await _reminderService.updateReminder(reminder: reminder);
|
||||||
|
}
|
||||||
|
|
||||||
|
final reminder = [...state.reminders].map((e) {
|
||||||
|
if (e.isRead && e.isArchived) {
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
e.freeze();
|
||||||
|
return e.rebuild((update) {
|
||||||
|
update.isRead = true;
|
||||||
|
update.meta[ReminderMetaKeys.isArchived] = true.toString();
|
||||||
|
});
|
||||||
|
}).toList();
|
||||||
|
|
||||||
|
Log.info('Archived all reminders');
|
||||||
|
|
||||||
emit(
|
emit(
|
||||||
state.copyWith(
|
state.copyWith(
|
||||||
reminders: reminders,
|
reminders: reminder,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
@ -202,8 +230,13 @@ class ReminderBloc extends Bloc<ReminderEvent, ReminderState> {
|
|||||||
final remindersOrFailure = await _reminderService.fetchReminders();
|
final remindersOrFailure = await _reminderService.fetchReminders();
|
||||||
|
|
||||||
remindersOrFailure.fold(
|
remindersOrFailure.fold(
|
||||||
(reminders) => emit(state.copyWith(reminders: reminders)),
|
(reminders) {
|
||||||
(error) => emit(state),
|
Log.info('Refreshed reminders');
|
||||||
|
emit(state.copyWith(reminders: reminders));
|
||||||
|
},
|
||||||
|
(error) {
|
||||||
|
Log.error('Failed to refresh reminders: $error');
|
||||||
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -211,96 +244,6 @@ class ReminderBloc extends Bloc<ReminderEvent, ReminderState> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Mark the reminder as read
|
|
||||||
///
|
|
||||||
/// If the [reminderIds] is null, all unread reminders will be marked as read
|
|
||||||
/// Otherwise, only the reminders with the given IDs will be marked as read
|
|
||||||
Future<List<ReminderPB>> _onMarkAsRead({
|
|
||||||
List<String>? reminderIds,
|
|
||||||
}) async {
|
|
||||||
final Iterable<ReminderPB> remindersToUpdate;
|
|
||||||
|
|
||||||
if (reminderIds != null) {
|
|
||||||
remindersToUpdate = state.reminders.where(
|
|
||||||
(reminder) => reminderIds.contains(reminder.id) && !reminder.isRead,
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
// Get all reminders that are not matching the isArchived flag
|
|
||||||
remindersToUpdate = state.reminders.where(
|
|
||||||
(reminder) => !reminder.isRead,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (final reminder in remindersToUpdate) {
|
|
||||||
reminder.isRead = true;
|
|
||||||
|
|
||||||
await _reminderService.updateReminder(reminder: reminder);
|
|
||||||
Log.info('Mark reminder ${reminder.id} as read');
|
|
||||||
}
|
|
||||||
|
|
||||||
return state.reminders.map((e) {
|
|
||||||
if (reminderIds != null && !reminderIds.contains(e.id)) {
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e.isRead) {
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
|
|
||||||
e.freeze();
|
|
||||||
return e.rebuild((update) {
|
|
||||||
update.isRead = true;
|
|
||||||
});
|
|
||||||
}).toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Archive or unarchive reminders
|
|
||||||
///
|
|
||||||
/// If the [reminderIds] is null, all reminders will be archived
|
|
||||||
/// Otherwise, only the reminders with the given IDs will be archived or unarchived
|
|
||||||
Future<List<ReminderPB>> _onArchived({
|
|
||||||
required bool isArchived,
|
|
||||||
List<String>? reminderIds,
|
|
||||||
}) async {
|
|
||||||
final Iterable<ReminderPB> remindersToUpdate;
|
|
||||||
|
|
||||||
if (reminderIds != null) {
|
|
||||||
remindersToUpdate = state.reminders.where(
|
|
||||||
(reminder) =>
|
|
||||||
reminderIds.contains(reminder.id) &&
|
|
||||||
reminder.isArchived != isArchived,
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
// Get all reminders that are not matching the isArchived flag
|
|
||||||
remindersToUpdate = state.reminders.where(
|
|
||||||
(reminder) => reminder.isArchived != isArchived,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (final reminder in remindersToUpdate) {
|
|
||||||
reminder.isRead = isArchived;
|
|
||||||
reminder.meta[ReminderMetaKeys.isArchived] = isArchived.toString();
|
|
||||||
await _reminderService.updateReminder(reminder: reminder);
|
|
||||||
Log.info('Reminder ${reminder.id} is archived: $isArchived');
|
|
||||||
}
|
|
||||||
|
|
||||||
return state.reminders.map((e) {
|
|
||||||
if (reminderIds != null && !reminderIds.contains(e.id)) {
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e.isArchived == isArchived) {
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
|
|
||||||
e.freeze();
|
|
||||||
return e.rebuild((update) {
|
|
||||||
update.isRead = isArchived;
|
|
||||||
update.meta[ReminderMetaKeys.isArchived] = isArchived.toString();
|
|
||||||
});
|
|
||||||
}).toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
Timer _periodicCheck() {
|
Timer _periodicCheck() {
|
||||||
return Timer.periodic(
|
return Timer.periodic(
|
||||||
const Duration(minutes: 1),
|
const Duration(minutes: 1),
|
||||||
@ -364,30 +307,17 @@ class ReminderEvent with _$ReminderEvent {
|
|||||||
// Update a reminder (eg. isAck, isRead, etc.)
|
// Update a reminder (eg. isAck, isRead, etc.)
|
||||||
const factory ReminderEvent.update(ReminderUpdate update) = _Update;
|
const factory ReminderEvent.update(ReminderUpdate update) = _Update;
|
||||||
|
|
||||||
// Event to mark specific reminders as read, takes a list of reminder IDs
|
// Mark all unread reminders as read
|
||||||
const factory ReminderEvent.markAsRead(List<String> reminderIds) =
|
|
||||||
_MarkAsRead;
|
|
||||||
|
|
||||||
// Event to mark all unread reminders as read
|
|
||||||
const factory ReminderEvent.markAllRead() = _MarkAllRead;
|
const factory ReminderEvent.markAllRead() = _MarkAllRead;
|
||||||
|
|
||||||
// Event to archive specific reminders, takes a list of reminder IDs
|
|
||||||
const factory ReminderEvent.archive(List<String> reminderIds) = _Archive;
|
|
||||||
|
|
||||||
// Event to archive all reminders
|
|
||||||
const factory ReminderEvent.archiveAll() = _ArchiveAll;
|
const factory ReminderEvent.archiveAll() = _ArchiveAll;
|
||||||
|
|
||||||
// Event to unarchive all reminders
|
|
||||||
const factory ReminderEvent.unarchiveAll() = _UnarchiveAll;
|
|
||||||
|
|
||||||
// Event to handle reminder press action
|
|
||||||
const factory ReminderEvent.pressReminder({
|
const factory ReminderEvent.pressReminder({
|
||||||
required String reminderId,
|
required String reminderId,
|
||||||
@Default(null) int? path,
|
@Default(null) int? path,
|
||||||
@Default(null) ViewPB? view,
|
@Default(null) ViewPB? view,
|
||||||
}) = _PressReminder;
|
}) = _PressReminder;
|
||||||
|
|
||||||
// Event to refresh reminders
|
|
||||||
const factory ReminderEvent.refresh() = _Refresh;
|
const factory ReminderEvent.refresh() = _Refresh;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -402,7 +332,6 @@ class ReminderUpdate {
|
|||||||
this.scheduledAt,
|
this.scheduledAt,
|
||||||
this.includeTime,
|
this.includeTime,
|
||||||
this.isArchived,
|
this.isArchived,
|
||||||
this.date,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
final String id;
|
final String id;
|
||||||
@ -411,7 +340,6 @@ class ReminderUpdate {
|
|||||||
final DateTime? scheduledAt;
|
final DateTime? scheduledAt;
|
||||||
final bool? includeTime;
|
final bool? includeTime;
|
||||||
final bool? isArchived;
|
final bool? isArchived;
|
||||||
final DateTime? date;
|
|
||||||
|
|
||||||
ReminderPB merge({required ReminderPB a}) {
|
ReminderPB merge({required ReminderPB a}) {
|
||||||
final isAcknowledged = isAck == null && scheduledAt != null
|
final isAcknowledged = isAck == null && scheduledAt != null
|
||||||
@ -427,10 +355,6 @@ class ReminderUpdate {
|
|||||||
meta[ReminderMetaKeys.isArchived] = isArchived.toString();
|
meta[ReminderMetaKeys.isArchived] = isArchived.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (date != a.date && date != null) {
|
|
||||||
meta[ReminderMetaKeys.date] = date!.millisecondsSinceEpoch.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
return ReminderPB(
|
return ReminderPB(
|
||||||
id: a.id,
|
id: a.id,
|
||||||
objectId: a.objectId,
|
objectId: a.objectId,
|
||||||
|
Loading…
Reference in New Issue
Block a user