Release IKAR 1.0.7: port navigation and sharing improvements, harden calls
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
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
This commit is contained in:
@@ -201,7 +201,8 @@ class TranscriptionCache {
|
||||
} else {
|
||||
_expanded.remove(messageId);
|
||||
}
|
||||
for (final listener in _listeners[messageId]?.toList() ?? <VoidCallback>[]) {
|
||||
for (final listener
|
||||
in _listeners[messageId]?.toList() ?? <VoidCallback>[]) {
|
||||
listener();
|
||||
}
|
||||
}
|
||||
@@ -789,6 +790,23 @@ class MessagesModule {
|
||||
}
|
||||
|
||||
// #***! история с сервера
|
||||
Future<CachedMessage?> fetchMessage(
|
||||
int accountId,
|
||||
int chatId,
|
||||
String id,
|
||||
) async {
|
||||
final messageId = int.tryParse(id);
|
||||
if (messageId == null) return null;
|
||||
final response = await _api.sendRequest(Opcode.msgGet, {
|
||||
'chatId': chatId,
|
||||
'messageId': messageId,
|
||||
});
|
||||
if (!response.isOk || response.payload is! Map) return null;
|
||||
final raw = (response.payload as Map)['message'];
|
||||
if (raw is! Map) return null;
|
||||
return _parseMessage(raw, accountId, chatId);
|
||||
}
|
||||
|
||||
Future<List<CachedMessage>> fetchHistory(
|
||||
int accountId,
|
||||
int chatId, {
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user