From 6b8a4ffc6cc95eb4962f192fa22803e7cb44b8b6 Mon Sep 17 00:00:00 2001 From: Brice-W Date: Fri, 2 Jul 2021 14:35:28 +1000 Subject: [PATCH 1/2] display link preview popup only time --- js/background.js | 5 ----- .../session/conversation/SessionCompositionBox.tsx | 11 ++++++++--- ts/components/session/settings/SessionSettings.tsx | 10 ++++++++-- ts/data/data.ts | 1 + ts/window.d.ts | 1 - 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/js/background.js b/js/background.js index c58986015..dcbf28b3f 100644 --- a/js/background.js +++ b/js/background.js @@ -340,11 +340,6 @@ window.libsession.Utils.ToastUtils.pushSpellCheckDirty(); }; - window.toggleLinkPreview = () => { - const newValue = !window.getSettingValue('link-preview-setting'); - window.setSettingValue('link-preview-setting', newValue); - }; - window.toggleMediaPermissions = () => { const value = window.getMediaPermissions(); window.setMediaPermissions(!value); diff --git a/ts/components/session/conversation/SessionCompositionBox.tsx b/ts/components/session/conversation/SessionCompositionBox.tsx index 22df902de..3bcce1d94 100644 --- a/ts/components/session/conversation/SessionCompositionBox.tsx +++ b/ts/components/session/conversation/SessionCompositionBox.tsx @@ -37,6 +37,7 @@ import { getMentionsInput } from '../../../state/selectors/mentionsInput'; import { updateConfirmModal } from '../../../state/ducks/modalDialog'; import { SessionButtonColor } from '../SessionButton'; import { SessionConfirmDialogProps } from '../SessionConfirm'; +import { createOrUpdateItem, getItemById, hasLinkPreviewPopupBeenDisplayed } from '../../../data/data'; export interface ReplyingToMessageProps { convoId: string; @@ -218,7 +219,7 @@ export class SessionCompositionBox extends React.Component { imgBlob = item.getAsFile(); break; case 'text': - this.showLinkSharingConfirmationModalDialog(e); + void this.showLinkSharingConfirmationModalDialog(e); break; default: } @@ -237,18 +238,22 @@ export class SessionCompositionBox extends React.Component { * Check if what is pasted is a URL and prompt confirmation for a setting change * @param e paste event */ - private showLinkSharingConfirmationModalDialog(e: any) { + private async showLinkSharingConfirmationModalDialog(e: any) { const pastedText = e.clipboardData.getData('text'); if (this.isURL(pastedText)) { + const alreadyDisplayedPopup = (await getItemById(hasLinkPreviewPopupBeenDisplayed))?.value || false; window.inboxStore?.dispatch( updateConfirmModal({ - shouldShowConfirm: () => !window.getSettingValue('link-preview-setting'), + shouldShowConfirm: () => !window.getSettingValue('link-preview-setting') && !alreadyDisplayedPopup, title: window.i18n('linkPreviewsTitle'), message: window.i18n('linkPreviewsConfirmMessage'), okTheme: SessionButtonColor.Danger, onClickOk: () => { window.setSettingValue('link-preview-setting', true); }, + onClickClose: async () => { + await createOrUpdateItem({ id: hasLinkPreviewPopupBeenDisplayed, value: true }); + }, }) ); } diff --git a/ts/components/session/settings/SessionSettings.tsx b/ts/components/session/settings/SessionSettings.tsx index abcff8bb7..72c6c4dc6 100644 --- a/ts/components/session/settings/SessionSettings.tsx +++ b/ts/components/session/settings/SessionSettings.tsx @@ -9,7 +9,7 @@ import { StateType } from '../../../state/reducer'; import { getConversationController } from '../../../session/conversations'; import { getConversationLookup } from '../../../state/selectors/conversations'; import { connect, useSelector } from 'react-redux'; -import { getPasswordHash } from '../../../../ts/data/data'; +import { getPasswordHash, createOrUpdateItem, hasLinkPreviewPopupBeenDisplayed } from '../../../../ts/data/data'; import { SpacerLG, SpacerXS } from '../../basic/Text'; import { shell } from 'electron'; import { SessionConfirmDialogProps } from '../SessionConfirm'; @@ -339,7 +339,13 @@ class SettingsViewInner extends React.Component { hidden: false, type: SessionSettingType.Toggle, category: SessionSettingCategory.Appearance, - setFn: window.toggleLinkPreview, + setFn: () => { + const newValue = !window.getSettingValue('link-preview-setting'); + window.setSettingValue('link-preview-setting', newValue); + if (!newValue) { + createOrUpdateItem({ id: hasLinkPreviewPopupBeenDisplayed, value: false }); + } + }, content: undefined, comparisonValue: undefined, onClick: undefined, diff --git a/ts/data/data.ts b/ts/data/data.ts index 2613be494..77ca3175a 100644 --- a/ts/data/data.ts +++ b/ts/data/data.ts @@ -64,6 +64,7 @@ export type ServerToken = { export const hasSyncedInitialConfigurationItem = 'hasSyncedInitialConfigurationItem'; export const lastAvatarUploadTimestamp = 'lastAvatarUploadTimestamp'; +export const hasLinkPreviewPopupBeenDisplayed = 'hasLinkPreviewPopupBeenDisplayed'; const channelsToMake = { shutdown, diff --git a/ts/window.d.ts b/ts/window.d.ts index d8a86a540..a74ab6c7e 100644 --- a/ts/window.d.ts +++ b/ts/window.d.ts @@ -59,7 +59,6 @@ declare global { showResetSessionIdDialog: any; storage: any; textsecure: LibTextsecure; - toggleLinkPreview: any; toggleMediaPermissions: any; toggleMenuBar: any; toggleSpellCheck: any; From dcd8da87ca9c12664fb9665884376de5104704c3 Mon Sep 17 00:00:00 2001 From: Brice-W Date: Fri, 2 Jul 2021 14:59:09 +1000 Subject: [PATCH 2/2] fix errors --- .../session/conversation/SessionCompositionBox.tsx | 12 +++++++++--- ts/components/session/settings/SessionSettings.tsx | 10 +++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/ts/components/session/conversation/SessionCompositionBox.tsx b/ts/components/session/conversation/SessionCompositionBox.tsx index 3bcce1d94..bbc505ef2 100644 --- a/ts/components/session/conversation/SessionCompositionBox.tsx +++ b/ts/components/session/conversation/SessionCompositionBox.tsx @@ -37,7 +37,11 @@ import { getMentionsInput } from '../../../state/selectors/mentionsInput'; import { updateConfirmModal } from '../../../state/ducks/modalDialog'; import { SessionButtonColor } from '../SessionButton'; import { SessionConfirmDialogProps } from '../SessionConfirm'; -import { createOrUpdateItem, getItemById, hasLinkPreviewPopupBeenDisplayed } from '../../../data/data'; +import { + createOrUpdateItem, + getItemById, + hasLinkPreviewPopupBeenDisplayed, +} from '../../../data/data'; export interface ReplyingToMessageProps { convoId: string; @@ -241,10 +245,12 @@ export class SessionCompositionBox extends React.Component { private async showLinkSharingConfirmationModalDialog(e: any) { const pastedText = e.clipboardData.getData('text'); if (this.isURL(pastedText)) { - const alreadyDisplayedPopup = (await getItemById(hasLinkPreviewPopupBeenDisplayed))?.value || false; + const alreadyDisplayedPopup = + (await getItemById(hasLinkPreviewPopupBeenDisplayed))?.value || false; window.inboxStore?.dispatch( updateConfirmModal({ - shouldShowConfirm: () => !window.getSettingValue('link-preview-setting') && !alreadyDisplayedPopup, + shouldShowConfirm: () => + !window.getSettingValue('link-preview-setting') && !alreadyDisplayedPopup, title: window.i18n('linkPreviewsTitle'), message: window.i18n('linkPreviewsConfirmMessage'), okTheme: SessionButtonColor.Danger, diff --git a/ts/components/session/settings/SessionSettings.tsx b/ts/components/session/settings/SessionSettings.tsx index 72c6c4dc6..2c86f3e8a 100644 --- a/ts/components/session/settings/SessionSettings.tsx +++ b/ts/components/session/settings/SessionSettings.tsx @@ -9,7 +9,11 @@ import { StateType } from '../../../state/reducer'; import { getConversationController } from '../../../session/conversations'; import { getConversationLookup } from '../../../state/selectors/conversations'; import { connect, useSelector } from 'react-redux'; -import { getPasswordHash, createOrUpdateItem, hasLinkPreviewPopupBeenDisplayed } from '../../../../ts/data/data'; +import { + createOrUpdateItem, + getPasswordHash, + hasLinkPreviewPopupBeenDisplayed, +} from '../../../../ts/data/data'; import { SpacerLG, SpacerXS } from '../../basic/Text'; import { shell } from 'electron'; import { SessionConfirmDialogProps } from '../SessionConfirm'; @@ -339,11 +343,11 @@ class SettingsViewInner extends React.Component { hidden: false, type: SessionSettingType.Toggle, category: SessionSettingCategory.Appearance, - setFn: () => { + setFn: async () => { const newValue = !window.getSettingValue('link-preview-setting'); window.setSettingValue('link-preview-setting', newValue); if (!newValue) { - createOrUpdateItem({ id: hasLinkPreviewPopupBeenDisplayed, value: false }); + await createOrUpdateItem({ id: hasLinkPreviewPopupBeenDisplayed, value: false }); } }, content: undefined,