feat: багофикс по запросам волбачия

This commit is contained in:
Jganenokk
2026-08-15 15:51:52 +07:00
parent 198f137826
commit ecaa132e8f
33 changed files with 904 additions and 154 deletions
+37 -5
View File
@@ -475,6 +475,7 @@ class ContactsModule {
int from = 0,
int count = 25,
}) async {
if (contactId <= 0) return ContactPhotos.empty;
final map = await api.sendRequestMap(Opcode.contactPhotos, {
'contactId': contactId,
'from': from,
@@ -502,14 +503,45 @@ class ContactsModule {
}
static const List<String> _debugFirstNames = [
'Алиса', 'Борис', 'Вера', 'Глеб', 'Дарья', 'Егор', 'Жанна', 'Захар',
'Ирина', 'Кирилл', 'Лия', 'Максим', 'Нина', 'Олег', 'Полина', 'Роман',
'София', 'Тимур', 'Ульяна', 'Фёдор', 'Ханна', 'Цветана', 'Чеслав', 'Шура',
'Алиса',
'Борис',
'Вера',
'Глеб',
'Дарья',
'Егор',
'Жанна',
'Захар',
'Ирина',
'Кирилл',
'Лия',
'Максим',
'Нина',
'Олег',
'Полина',
'Роман',
'София',
'Тимур',
'Ульяна',
'Фёдор',
'Ханна',
'Цветана',
'Чеслав',
'Шура',
];
static const List<String> _debugLastNames = [
'Иванов', 'Петров', 'Сидоров', 'Кузнецов', 'Смирнов', 'Попов', 'Волков',
'Соколов', 'Морозов', 'Новиков', 'Фёдоров', 'Козлов',
'Иванов',
'Петров',
'Сидоров',
'Кузнецов',
'Смирнов',
'Попов',
'Волков',
'Соколов',
'Морозов',
'Новиков',
'Фёдоров',
'Козлов',
];
static List<CachedContact> debugContacts() {
+78 -2
View File
@@ -149,16 +149,92 @@ class TranscriptionResult {
class TranscriptionCache {
static final Map<String, TranscriptionResult> _cache = {};
static final Map<String, Set<VoidCallback>> _listeners = {};
static final Set<String> _expanded = {};
static void put(String messageId, TranscriptionResult result) {
static void put(
String messageId,
TranscriptionResult result, {
bool expanded = false,
}) {
_cache[messageId] = result;
if (expanded) _expanded.add(messageId);
final listeners = _listeners[messageId];
if (listeners == null) return;
for (final listener in listeners.toList()) {
listener();
}
}
static TranscriptionResult? get(String messageId) => _cache[messageId];
static bool has(String messageId) => _cache.containsKey(messageId);
static void clear() => _cache.clear();
static bool isExpanded(String messageId) => _expanded.contains(messageId);
static void setExpanded(String messageId, bool value) {
if (value) {
_expanded.add(messageId);
} else {
_expanded.remove(messageId);
}
}
static void listen(String messageId, VoidCallback listener) {
_listeners.putIfAbsent(messageId, () => <VoidCallback>{}).add(listener);
}
static void unlisten(String messageId, VoidCallback listener) {
final listeners = _listeners[messageId];
if (listeners == null) return;
listeners.remove(listener);
if (listeners.isEmpty) _listeners.remove(messageId);
}
static void clear() {
_cache.clear();
_expanded.clear();
}
}
class TranscriptionPushHandler {
static StreamSubscription<Packet>? _sub;
static void attach(Api api) {
_sub?.cancel();
_sub = api.pushStream
.where((p) => p.opcode == Opcode.transcriptionResult)
.listen(_onPush);
}
static void _onPush(Packet packet) {
final payload = packet.payload;
if (payload is! Map) return;
final source = payload['message'] is Map
? payload['message'] as Map
: payload;
final messageId = (source['messageId'] ?? source['msgId'])?.toString();
if (messageId == null || messageId.isEmpty) return;
final status = source['transcriptionStatus'] as int? ?? 1;
final rawText = source['transcription'] as String?;
if (status != 1) return;
TranscriptionCache.put(
messageId,
TranscriptionResult(
status: 1,
text: (rawText == null || rawText.isEmpty)
? 'не удалось распознать текст'
: rawText,
messageId: messageId,
chatId: source['chatId'] as int?,
mediaId: source['mediaId'] as int?,
),
expanded: true,
);
}
}
class FileHistoryEntry {