Tests / test (push) Canceled after 0s
Build Android (FCM) / build-android-fcm (push) Canceled after 0s
Build Android / build-android (push) Canceled after 0s
Build iOS / build-ios (push) Canceled after 0s
Build Linux / build-linux (push) Canceled after 0s
Build macOS / build-macos (push) Canceled after 0s
Build Windows / build-windows (push) Canceled after 0s
Native crypto / native-crypto (push) Canceled after 0s
Release (main) / android (oneme) (push) Canceled after 0s
Release (main) / android (qlyra) (push) Canceled after 0s
Release (main) / windows (push) Canceled after 0s
Release (main) / linux (push) Canceled after 0s
Release (main) / macos (push) Canceled after 0s
Release (main) / ios (push) Canceled after 0s
Release (main) / release (push) Canceled after 0s
25 lines
849 B
Dart
25 lines
849 B
Dart
import 'package:flutter/foundation.dart';
|
|
|
|
/// Pending UI removals are scoped to an account as well as a chat.
|
|
class PendingMessageDeletions extends ChangeNotifier {
|
|
PendingMessageDeletions();
|
|
static final instance = PendingMessageDeletions();
|
|
final Map<(int, int), Set<String>> _pending = {};
|
|
|
|
bool contains(int accountId, int chatId, String id) =>
|
|
_pending[(accountId, chatId)]?.contains(id) ?? false;
|
|
|
|
void hold(int accountId, int chatId, Iterable<String> ids) {
|
|
_pending.putIfAbsent((accountId, chatId), () => {}).addAll(ids);
|
|
notifyListeners();
|
|
}
|
|
|
|
void release(int accountId, int chatId, Iterable<String> ids) {
|
|
final pending = _pending[(accountId, chatId)];
|
|
if (pending == null) return;
|
|
pending.removeAll(ids);
|
|
if (pending.isEmpty) _pending.remove((accountId, chatId));
|
|
notifyListeners();
|
|
}
|
|
}
|