Merge pull request #1757 from Brice-W/link-preview-popup

Display link preview popup only once
pull/1747/head v1.6.7
Audric Ackermann 4 years ago committed by GitHub
commit 55330d927a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -340,11 +340,6 @@
window.libsession.Utils.ToastUtils.pushSpellCheckDirty(); window.libsession.Utils.ToastUtils.pushSpellCheckDirty();
}; };
window.toggleLinkPreview = () => {
const newValue = !window.getSettingValue('link-preview-setting');
window.setSettingValue('link-preview-setting', newValue);
};
window.toggleMediaPermissions = () => { window.toggleMediaPermissions = () => {
const value = window.getMediaPermissions(); const value = window.getMediaPermissions();
window.setMediaPermissions(!value); window.setMediaPermissions(!value);

@ -37,6 +37,11 @@ import { getMentionsInput } from '../../../state/selectors/mentionsInput';
import { updateConfirmModal } from '../../../state/ducks/modalDialog'; import { updateConfirmModal } from '../../../state/ducks/modalDialog';
import { SessionButtonColor } from '../SessionButton'; import { SessionButtonColor } from '../SessionButton';
import { SessionConfirmDialogProps } from '../SessionConfirm'; import { SessionConfirmDialogProps } from '../SessionConfirm';
import {
createOrUpdateItem,
getItemById,
hasLinkPreviewPopupBeenDisplayed,
} from '../../../data/data';
export interface ReplyingToMessageProps { export interface ReplyingToMessageProps {
convoId: string; convoId: string;
@ -218,7 +223,7 @@ export class SessionCompositionBox extends React.Component<Props, State> {
imgBlob = item.getAsFile(); imgBlob = item.getAsFile();
break; break;
case 'text': case 'text':
this.showLinkSharingConfirmationModalDialog(e); void this.showLinkSharingConfirmationModalDialog(e);
break; break;
default: default:
} }
@ -237,18 +242,24 @@ export class SessionCompositionBox extends React.Component<Props, State> {
* Check if what is pasted is a URL and prompt confirmation for a setting change * Check if what is pasted is a URL and prompt confirmation for a setting change
* @param e paste event * @param e paste event
*/ */
private showLinkSharingConfirmationModalDialog(e: any) { private async showLinkSharingConfirmationModalDialog(e: any) {
const pastedText = e.clipboardData.getData('text'); const pastedText = e.clipboardData.getData('text');
if (this.isURL(pastedText)) { if (this.isURL(pastedText)) {
const alreadyDisplayedPopup =
(await getItemById(hasLinkPreviewPopupBeenDisplayed))?.value || false;
window.inboxStore?.dispatch( window.inboxStore?.dispatch(
updateConfirmModal({ updateConfirmModal({
shouldShowConfirm: () => !window.getSettingValue('link-preview-setting'), shouldShowConfirm: () =>
!window.getSettingValue('link-preview-setting') && !alreadyDisplayedPopup,
title: window.i18n('linkPreviewsTitle'), title: window.i18n('linkPreviewsTitle'),
message: window.i18n('linkPreviewsConfirmMessage'), message: window.i18n('linkPreviewsConfirmMessage'),
okTheme: SessionButtonColor.Danger, okTheme: SessionButtonColor.Danger,
onClickOk: () => { onClickOk: () => {
window.setSettingValue('link-preview-setting', true); window.setSettingValue('link-preview-setting', true);
}, },
onClickClose: async () => {
await createOrUpdateItem({ id: hasLinkPreviewPopupBeenDisplayed, value: true });
},
}) })
); );
} }

@ -9,7 +9,11 @@ import { StateType } from '../../../state/reducer';
import { getConversationController } from '../../../session/conversations'; import { getConversationController } from '../../../session/conversations';
import { getConversationLookup } from '../../../state/selectors/conversations'; import { getConversationLookup } from '../../../state/selectors/conversations';
import { connect, useSelector } from 'react-redux'; import { connect, useSelector } from 'react-redux';
import { getPasswordHash } from '../../../../ts/data/data'; import {
createOrUpdateItem,
getPasswordHash,
hasLinkPreviewPopupBeenDisplayed,
} from '../../../../ts/data/data';
import { SpacerLG, SpacerXS } from '../../basic/Text'; import { SpacerLG, SpacerXS } from '../../basic/Text';
import { shell } from 'electron'; import { shell } from 'electron';
import { SessionConfirmDialogProps } from '../SessionConfirm'; import { SessionConfirmDialogProps } from '../SessionConfirm';
@ -339,7 +343,13 @@ class SettingsViewInner extends React.Component<SettingsViewProps, State> {
hidden: false, hidden: false,
type: SessionSettingType.Toggle, type: SessionSettingType.Toggle,
category: SessionSettingCategory.Appearance, category: SessionSettingCategory.Appearance,
setFn: window.toggleLinkPreview, setFn: async () => {
const newValue = !window.getSettingValue('link-preview-setting');
window.setSettingValue('link-preview-setting', newValue);
if (!newValue) {
await createOrUpdateItem({ id: hasLinkPreviewPopupBeenDisplayed, value: false });
}
},
content: undefined, content: undefined,
comparisonValue: undefined, comparisonValue: undefined,
onClick: undefined, onClick: undefined,

@ -64,6 +64,7 @@ export type ServerToken = {
export const hasSyncedInitialConfigurationItem = 'hasSyncedInitialConfigurationItem'; export const hasSyncedInitialConfigurationItem = 'hasSyncedInitialConfigurationItem';
export const lastAvatarUploadTimestamp = 'lastAvatarUploadTimestamp'; export const lastAvatarUploadTimestamp = 'lastAvatarUploadTimestamp';
export const hasLinkPreviewPopupBeenDisplayed = 'hasLinkPreviewPopupBeenDisplayed';
const channelsToMake = { const channelsToMake = {
shutdown, shutdown,

1
ts/window.d.ts vendored

@ -59,7 +59,6 @@ declare global {
showResetSessionIdDialog: any; showResetSessionIdDialog: any;
storage: any; storage: any;
textsecure: LibTextsecure; textsecure: LibTextsecure;
toggleLinkPreview: any;
toggleMediaPermissions: any; toggleMediaPermissions: any;
toggleMenuBar: any; toggleMenuBar: any;
toggleSpellCheck: any; toggleSpellCheck: any;

Loading…
Cancel
Save