opt: оптимизейшон

This commit is contained in:
Jganenokk
2026-07-14 15:48:48 +07:00
parent c3d70d9bfc
commit 90eb891a71
3 changed files with 35 additions and 23 deletions
+15 -12
View File
@@ -139,9 +139,7 @@ class SharedContentModule {
final index = _photoIndexes.putIfAbsent(chatId, _ChatPhotoIndex.new);
for (var page = 0; page < _photoIndexMaxPages; page++) {
if (index.items.any((i) => i.dedupKey == photoKey)) {
return _snapshot(index);
}
if (index.seen.contains(photoKey)) return _snapshot(index);
if (index.reachedEnd) return null;
await _nextPhotoPage(chatId, index, resolveAnchor);
}
@@ -212,17 +210,22 @@ class SharedContentModule {
backward: _photoIndexPageSize,
);
index.started = true;
var added = 0;
for (final item in page.items) {
if (!index.seen.add(item.dedupKey)) continue;
index.items.add(item);
added++;
}
index.items.sort((a, b) => b.time.compareTo(a.time));
if (page.total > index.total) index.total = page.total;
if (added == 0) index.reachedEnd = true;
final fresh = <SharedMediaItem>[];
for (final item in page.items) {
if (index.seen.add(item.dedupKey)) fresh.add(item);
}
if (fresh.isEmpty) {
index.reachedEnd = true;
return;
}
final oldest = index.items.isEmpty ? null : index.items.last;
index.items.addAll(fresh);
if (oldest != null && fresh.first.time > oldest.time) {
index.items.sort((a, b) => b.time.compareTo(a.time));
}
}
Future<SharedMediaPage> fetchMedia({
+8 -10
View File
@@ -957,15 +957,13 @@ class _ChatScreenState extends State<ChatScreen>
);
}
PhotoViewerActions _photoActions() {
return PhotoViewerActions(
goToMessage: _requestGoToMessage,
forward: _forwardMessageById,
delete: (messageId, senderId) =>
_confirmDeleteMessage(messageId, senderId == _myId),
viewAllPhotos: () => _openChatInfo(initialTab: ChatInfoTab.media),
);
}
late final PhotoViewerActions _photoActions = PhotoViewerActions(
goToMessage: _requestGoToMessage,
forward: _forwardMessageById,
delete: (messageId, senderId) =>
_confirmDeleteMessage(messageId, senderId == _myId),
viewAllPhotos: () => _openChatInfo(initialTab: ChatInfoTab.media),
);
void _forwardMessageById(String messageId) {
final message = _messages.where((m) => m.id == messageId).firstOrNull;
@@ -4702,7 +4700,7 @@ class _ChatScreenState extends State<ChatScreen>
nextMessage: nextMessage,
chatType: chat?.type ?? 'CHAT',
chatId: widget.chatId,
photoActions: _photoActions(),
photoActions: _photoActions,
overrideStatus: _effectiveStatus(message),
otherReadTime: _otherReadTime,
reactionsListenable: _reactionNotifierFor(
+12 -1
View File
@@ -208,8 +208,19 @@ class _PhotoViewerScreenState extends State<PhotoViewerScreen> {
resolveAnchor: () => _resolveAnchor(chatId),
);
if (!mounted) return;
final known = _items.length;
final appended =
known > 0 &&
feed.items.length > known &&
feed.items[known - 1].dedupKey == _items.last.id;
setState(() {
_items = feed.items.map(_ViewerPhoto.fromFeed).toList();
if (appended) {
_items.addAll(feed.items.skip(known).map(_ViewerPhoto.fromFeed));
} else {
_items = feed.items.map(_ViewerPhoto.fromFeed).toList();
}
_total = feed.total;
_reachedEnd = feed.reachedEnd;
});