feat: animoji реакции
This commit is contained in:
@@ -2,6 +2,7 @@ import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../api.dart';
|
||||
import '../../core/protocol/opcode_map.dart';
|
||||
import '../../core/utils/emoji_keyword_index.dart';
|
||||
import '../../core/utils/logger.dart';
|
||||
import '../../models/animoji.dart';
|
||||
|
||||
@@ -23,6 +24,7 @@ class AnimojiModule {
|
||||
static const int _maxRecents = 24;
|
||||
|
||||
final Map<int, Animoji> _byId = {};
|
||||
final Map<String, Animoji> _byEmoji = {};
|
||||
List<int> _orderedIds = [];
|
||||
List<int> _recentIds = [];
|
||||
bool _recentsLoaded = false;
|
||||
@@ -50,7 +52,7 @@ class AnimojiModule {
|
||||
|
||||
Future<void> noteUsed(Animoji animoji) async {
|
||||
await ensureRecentsLoaded();
|
||||
_byId[animoji.id] = animoji;
|
||||
_remember(animoji);
|
||||
_recentIds.remove(animoji.id);
|
||||
_recentIds.insert(0, animoji.id);
|
||||
if (_recentIds.length > _maxRecents) {
|
||||
@@ -72,6 +74,9 @@ class AnimojiModule {
|
||||
|
||||
Animoji? cached(int id) => _byId[id];
|
||||
|
||||
Animoji? findByEmoji(String emoji) =>
|
||||
_byEmoji[EmojiKeywordIndex.normalize(emoji)];
|
||||
|
||||
Future<Animoji?> fetchById(int id) async {
|
||||
final known = _byId[id];
|
||||
if (known != null) return known;
|
||||
@@ -84,7 +89,7 @@ class AnimojiModule {
|
||||
for (final e in list) {
|
||||
if (e is! Map) continue;
|
||||
final animoji = Animoji.fromMap(e);
|
||||
if (animoji != null) _byId[animoji.id] = animoji;
|
||||
if (animoji != null) _remember(animoji);
|
||||
}
|
||||
return _byId[id];
|
||||
}
|
||||
@@ -152,7 +157,7 @@ class AnimojiModule {
|
||||
for (final e in list) {
|
||||
if (e is! Map) continue;
|
||||
final animoji = Animoji.fromMap(e);
|
||||
if (animoji != null) _byId[animoji.id] = animoji;
|
||||
if (animoji != null) _remember(animoji);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,6 +165,11 @@ class AnimojiModule {
|
||||
logger.i('Анимодзи: ${_orderedIds.length} доступно для реакций');
|
||||
}
|
||||
|
||||
void _remember(Animoji animoji) {
|
||||
_byId[animoji.id] = animoji;
|
||||
_byEmoji[EmojiKeywordIndex.normalize(animoji.emoji)] = animoji;
|
||||
}
|
||||
|
||||
List<int> _dedup(List<int> ids) {
|
||||
final seen = <int>{};
|
||||
final result = <int>[];
|
||||
|
||||
Reference in New Issue
Block a user