part of '../neon_notifications.dart'; abstract interface class NotificationsBlocEvents { void deleteNotification(final int id); void deleteAllNotifications(); } abstract interface class NotificationsBlocStates { BehaviorSubject>> get notifications; BehaviorSubject get unreadCounter; } class NotificationsBloc extends InteractiveBloc implements NotificationsBlocInterface, NotificationsBlocEvents, NotificationsBlocStates { NotificationsBloc( this.options, this._requestManager, this._account, ) { notifications.listen((final result) { if (result.hasData) { unreadCounter.add(result.requireData.length); } }); unawaited(refresh()); _timer = TimerBloc().registerTimer(const Duration(seconds: 30), refresh); } @override final NotificationsAppSpecificOptions options; final RequestManager _requestManager; final Account _account; late final NeonTimer _timer; @override void dispose() { _timer.cancel(); unawaited(notifications.close()); unawaited(unreadCounter.close()); super.dispose(); } @override BehaviorSubject>> notifications = BehaviorSubject>>(); @override BehaviorSubject unreadCounter = BehaviorSubject(); @override Future refresh() async { await _requestManager.wrapNextcloud, NotificationsListNotifications>( _account.id, 'notifications-notifications', notifications, () async => _account.client.notifications.listNotifications(), (final response) => response.ocs.data.toList(), ); } @override void deleteAllNotifications() { wrapAction(() async => _account.client.notifications.deleteAllNotifications()); } @override void deleteNotification(final int id) { wrapAction(() async => _account.client.notifications.deleteNotification(id: id)); } }