From a3212a9c5cf484a08cd44d583f562d1d97311b7b Mon Sep 17 00:00:00 2001 From: po-lan <42771836+po-lan@users.noreply.github.com> Date: Mon, 26 Sep 2022 01:50:32 +0800 Subject: [PATCH] fix BUG of Right click to download media (#161) --- src/components/appMediaViewer.ts | 4 ++-- src/components/chat/contextMenu.ts | 21 +++++++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/components/appMediaViewer.ts b/src/components/appMediaViewer.ts index dfdf63401..99dd78317 100644 --- a/src/components/appMediaViewer.ts +++ b/src/components/appMediaViewer.ts @@ -259,7 +259,7 @@ export default class AppMediaViewer extends AppMediaViewerBase<'caption', 'delet const fromId = (message as Message.message).fwd_from && !message.fromId ? (message as Message.message).fwd_from.from_name : message.fromId; const media = getMediaFromMessage(message); - const cantForwardMessage = message._ === 'messageService' || !this.managers.appMessagesManager.canForward(message); + const cantForwardMessage = message._ === 'messageService' || ! await this.managers.appMessagesManager.canForward(message); [this.buttons.forward, this.btnMenuForward.element].forEach((button) => { button.classList.toggle('hide', cantForwardMessage); }); @@ -271,7 +271,7 @@ export default class AppMediaViewer extends AppMediaViewerBase<'caption', 'delet button.classList.toggle('hide', cantDownloadMessage); }); - const canDeleteMessage = this.managers.appMessagesManager.canDeleteMessage(message); + const canDeleteMessage = await this.managers.appMessagesManager.canDeleteMessage(message); [this.buttons.delete, this.btnMenuDelete.element].forEach((button) => { button.classList.toggle('hide', !canDeleteMessage); }); diff --git a/src/components/chat/contextMenu.ts b/src/components/chat/contextMenu.ts index 48cce0e3a..423ad29a1 100644 --- a/src/components/chat/contextMenu.ts +++ b/src/components/chat/contextMenu.ts @@ -432,19 +432,28 @@ export default class ChatContextMenu { icon: 'download', text: 'MediaViewer.Context.Download', onClick: () => { - appDownloadManager.downloadToDisc({media: (this.message as any).media.document}); + appDownloadManager.downloadToDisc({media: (this.message as any).media?.document || (this.message as any).media.photo}); }, verify: () => { - if(this.message.pFlags.is_outgoing) { + if(this.message.pFlags.is_outgoing || this.noForwards) { return false; } - const doc: MyDocument = ((this.message as Message.message).media as MessageMedia.messageMediaDocument)?.document as any; - if(!doc) return false; + const isPhoto: boolean = !!((this.message as Message.message).media as MessageMedia.messageMediaPhoto)?.photo; + let isGoodType = false + + if(isPhoto) { + isGoodType = true; + } else { + const doc: MyDocument = ((this.message as Message.message).media as MessageMedia.messageMediaDocument)?.document as any; + if(!doc) return false; + isGoodType = doc.type && (['gif', 'video'/* , 'sticker' */] as MyDocument['type'][]).includes(doc.type) + } let hasTarget = !!IS_TOUCH_SUPPORTED; - const isGoodType = !doc.type || !(['gif', 'video'/* , 'sticker' */] as MyDocument['type'][]).includes(doc.type); - if(isGoodType) hasTarget ||= !!findUpClassName(this.target, 'document') || !!findUpClassName(this.target, 'audio') || !!findUpClassName(this.target, 'media-sticker-wrapper'); + + if(isGoodType) hasTarget ||= !!findUpClassName(this.target, 'document') || !!findUpClassName(this.target, 'audio') || !!findUpClassName(this.target, 'media-sticker-wrapper') || !!findUpClassName(this.target, 'media-photo') || !!findUpClassName(this.target, 'media-video'); + return isGoodType && hasTarget; } }, {