diff --git a/src/components/appMediaViewer.ts b/src/components/appMediaViewer.ts index 2b4b7259..f5450746 100644 --- a/src/components/appMediaViewer.ts +++ b/src/components/appMediaViewer.ts @@ -1546,13 +1546,13 @@ export class AppMediaViewerAvatar extends AppMediaViewerBase<'', 'delete', AppMe return this.loadMediaPromiseDown = promise; }; - public async openMedia(photoId: string, target?: HTMLElement, fromRight = 0) { + public async openMedia(photoId: string, target?: HTMLElement, fromRight = 0, prevTargets?: AppMediaViewerAvatarTargetType[], nextTargets?: AppMediaViewerAvatarTargetType[]) { if(this.setMoverPromise) return this.setMoverPromise; const photo = appPhotosManager.getPhoto(photoId); this.currentPhotoId = photo.id; - return super._openMedia(photo, photo.date, this.peerId, fromRight, target, false); + return super._openMedia(photo, photo.date, this.peerId, fromRight, target, false, prevTargets, nextTargets); } } diff --git a/src/components/avatar.ts b/src/components/avatar.ts index ed1d1555..842653dd 100644 --- a/src/components/avatar.ts +++ b/src/components/avatar.ts @@ -11,6 +11,7 @@ import { attachClickEvent, cancelEvent } from "../helpers/dom"; import AppMediaViewer, { AppMediaViewerAvatar } from "./appMediaViewer"; import { Message, Photo } from "../layer"; import appPeersManager from "../lib/appManagers/appPeersManager"; +import appPhotosManager from "../lib/appManagers/appPhotosManager"; //import type { LazyLoadQueueIntersector } from "./lazyLoadQueue"; const onAvatarUpdate = (peerId: number) => { @@ -25,7 +26,7 @@ rootScope.on('avatar_update', onAvatarUpdate); rootScope.on('peer_title_edit', onAvatarUpdate); export async function openAvatarViewer(target: HTMLElement, peerId: number, middleware: () => boolean, message?: any, prevTargets?: {element: HTMLElement, item: string | Message.messageService}[], nextTargets?: typeof prevTargets) { - const photo = await appProfileManager.getFullPhoto(peerId); + let photo = await appProfileManager.getFullPhoto(peerId); if(!middleware() || !photo) { return; } @@ -84,7 +85,16 @@ export async function openAvatarViewer(target: HTMLElement, peerId: number, midd } if(photo) { - new AppMediaViewerAvatar(peerId).openMedia(photo.id, getTarget()); + if(typeof(message) === 'string') { + photo = appPhotosManager.getPhoto(message); + } + + const f = (arr: typeof prevTargets) => arr.map(el => ({ + element: el.element, + photoId: el.item as string + })); + + new AppMediaViewerAvatar(peerId).openMedia(photo.id, getTarget(), undefined, prevTargets ? f(prevTargets) : undefined, nextTargets ? f(nextTargets) : undefined); } } diff --git a/src/components/sidebarRight/tabs/sharedMedia.ts b/src/components/sidebarRight/tabs/sharedMedia.ts index 36599a3a..9232130e 100644 --- a/src/components/sidebarRight/tabs/sharedMedia.ts +++ b/src/components/sidebarRight/tabs/sharedMedia.ts @@ -1090,8 +1090,8 @@ export default class AppSharedMediaTab extends SliderSuperTab { } } - public loadSidebarMedia(single: boolean) { - this.searchSuper.load(single); + public loadSidebarMedia(single: boolean, justLoad = false) { + this.searchSuper.load(single, justLoad); } onOpenAfterTimeout() { diff --git a/src/lib/appManagers/appImManager.ts b/src/lib/appManagers/appImManager.ts index c917d050..cb0f1a4b 100644 --- a/src/lib/appManagers/appImManager.ts +++ b/src/lib/appManagers/appImManager.ts @@ -249,12 +249,20 @@ export class AppImManager { const key = chat.peerId + (chat.threadId ? '_' + chat.threadId : ''); const chatPositions = sessionStorage.getFromCache('chatPositions'); - chatPositions[key] = { - mids: getObjectKeysAndSort(chat.bubbles.bubbles, 'desc'), - top - } as ChatSavedPosition; + if(!(chat.bubbles.scrollable.getDistanceToEnd() <= 16 && chat.bubbles.scrollable.loadedAll.bottom)) { + const position = { + mids: getObjectKeysAndSort(chat.bubbles.bubbles, 'desc'), + top + }; - this.log('saved chat position:', chatPositions[key]); + chatPositions[key] = position; + + this.log('saved chat position:', position); + } else { + delete chatPositions[key]; + + this.log('deleted chat position'); + } sessionStorage.set({chatPositions}, true); //}