allow cancel linking

pull/1220/head
Vincent 5 years ago
parent 0386259fce
commit 600653d3d6

@ -1373,15 +1373,20 @@
Whisper.events.on('devicePairingRequestReceivedNoListener', async () => { Whisper.events.on('devicePairingRequestReceivedNoListener', async () => {
// If linking limit has been reached, let master know. // If linking limit has been reached, let master know.
const ourKey = textsecure.storage.user.getNumber(); const ourKey = textsecure.storage.user.getNumber();
const ourPubKey = window.libsession.Types.PubKey.cast(ourKey); const ourPubKey = window.libsession.Types.PubKey.cast(ourKey);
const authorisations = await window.libsession.Protocols.MultiDeviceProtocol.fetchPairingAuthorisations(ourPubKey); const authorisations = await window.libsession.Protocols.MultiDeviceProtocol.fetchPairingAuthorisations(
ourPubKey
);
const title = authorisations.length const title = authorisations.length
? window.i18n('devicePairingRequestReceivedLimitTitle') ? window.i18n('devicePairingRequestReceivedLimitTitle')
: window.i18n('devicePairingRequestReceivedNoListenerTitle'); : window.i18n('devicePairingRequestReceivedNoListenerTitle');
const description = authorisations.length const description = authorisations.length
? window.i18n('devicePairingRequestReceivedLimitDescription', window.CONSTANTS.MAX_LINKED_DEVICES) ? window.i18n(
'devicePairingRequestReceivedLimitDescription',
window.CONSTANTS.MAX_LINKED_DEVICES
)
: window.i18n('devicePairingRequestReceivedNoListenerDescription'); : window.i18n('devicePairingRequestReceivedNoListenerDescription');
const type = authorisations.length ? 'info' : 'warning'; const type = authorisations.length ? 'info' : 'warning';

@ -83,7 +83,7 @@
background-color: $session-shade-6; background-color: $session-shade-6;
padding: $session-margin-sm $session-margin-lg; padding: $session-margin-sm $session-margin-lg;
border-radius: 8px; border-radius: 8px;
margin-bottom: $session-margin-md; margin-bottom: 0px;
label { label {
margin-bottom: 5px; margin-bottom: 5px;

@ -420,21 +420,29 @@ export class RegistrationTabs extends React.Component<{}, State> {
return ( return (
<div className="registration-content-centered"> <div className="registration-content-centered">
<div className="session-signin-device-pairing-header"> <div className="session-signin-device-pairing-header">
{this.state.loading ? ( {!!this.state.secretWords ? (
<p>{window.i18n('devicePairingHeaderReassure')}</p> <p>{window.i18n('devicePairingHeaderReassure')}</p>
) : ( ) : (
<ol> <ol>
<li> <li>
<SessionHtmlRenderer html={window.i18n('devicePairingHeader_Step1')} /> <SessionHtmlRenderer
html={window.i18n('devicePairingHeader_Step1')}
/>
</li> </li>
<li> <li>
<SessionHtmlRenderer html={window.i18n('devicePairingHeader_Step2')} /> <SessionHtmlRenderer
html={window.i18n('devicePairingHeader_Step2')}
/>
</li> </li>
<li> <li>
<SessionHtmlRenderer html={window.i18n('devicePairingHeader_Step3')} /> <SessionHtmlRenderer
html={window.i18n('devicePairingHeader_Step3')}
/>
</li> </li>
<li> <li>
<SessionHtmlRenderer html={window.i18n('devicePairingHeader_Step4')} /> <SessionHtmlRenderer
html={window.i18n('devicePairingHeader_Step4')}
/>
</li> </li>
</ol> </ol>
)} )}
@ -446,7 +454,6 @@ export class RegistrationTabs extends React.Component<{}, State> {
<div className="subtle">{this.state.secretWords}</div> <div className="subtle">{this.state.secretWords}</div>
</div> </div>
)} )}
<SessionSpinner loading={!!this.state.secretWords} /> <SessionSpinner loading={!!this.state.secretWords} />
</div> </div>
); );
@ -560,10 +567,14 @@ export class RegistrationTabs extends React.Component<{}, State> {
return ( return (
<div> <div>
{this.renderContinueYourSessionButton()} {this.renderContinueYourSessionButton()}
<h4>{or}</h4> {!this.state.secretWords && (
{this.renderRestoreUsingSeedButton( <>
SessionButtonType.BrandOutline, <h4>{or}</h4>
SessionButtonColor.White {this.renderRestoreUsingSeedButton(
SessionButtonType.BrandOutline,
SessionButtonColor.White
)}
</>
)} )}
</div> </div>
); );
@ -602,14 +613,11 @@ export class RegistrationTabs extends React.Component<{}, State> {
passwordFieldsMatch, passwordFieldsMatch,
displayNameError, displayNameError,
mnemonicError, mnemonicError,
primaryDevicePubKey,
displayName, displayName,
mnemonicSeed, mnemonicSeed,
password, password,
} = this.state; } = this.state;
const shouldRenderCancel = this.state.signInMode === SignInMode.LinkingDevice && this.state.loading && !!this.state.secretWords;
let enableContinue = true; let enableContinue = true;
let text = window.i18n('continueYourSession'); let text = window.i18n('continueYourSession');
const displayNameOK = !displayNameError && !!displayName; // Display name required const displayNameOK = !displayNameError && !!displayName; // Display name required
@ -620,23 +628,32 @@ export class RegistrationTabs extends React.Component<{}, State> {
enableContinue = displayNameOK && mnemonicOK && passwordsOK; enableContinue = displayNameOK && mnemonicOK && passwordsOK;
} else if (signInMode === SignInMode.LinkingDevice) { } else if (signInMode === SignInMode.LinkingDevice) {
enableContinue = true; enableContinue = true;
text = window.i18n(shouldRenderCancel ? 'cancel' : 'linkDevice'); text = window.i18n('linkDevice');
} else if (signUpMode === SignUpMode.EnterDetails) { } else if (signUpMode === SignUpMode.EnterDetails) {
enableContinue = displayNameOK && passwordsOK; enableContinue = displayNameOK && passwordsOK;
} }
const shouldRenderCancel =
this.state.signInMode === SignInMode.LinkingDevice &&
!!this.state.secretWords;
text = shouldRenderCancel ? window.i18n('cancel') : text;
const buttonColor = shouldRenderCancel
? SessionButtonColor.White
: SessionButtonColor.Green;
const buttonType = shouldRenderCancel
? SessionButtonType.BrandOutline
: SessionButtonType.Brand;
const onClick = () => { const onClick = () => {
shouldRenderCancel shouldRenderCancel
? this.cancelSecondaryDevice() ? this.cancelSecondaryDevice()
: this.handleContinueYourSessionClick(); : this.handleContinueYourSessionClick();
}; };
const buttonColor = shouldRenderCancel ? SessionButtonColor.White : SessionButtonColor.Green;
return ( return (
<SessionButton <SessionButton
onClick={onClick} onClick={onClick}
buttonType={SessionButtonType.Brand} buttonType={buttonType}
buttonColor={buttonColor} buttonColor={buttonColor}
text={text} text={text}
disabled={!enableContinue} disabled={!enableContinue}
@ -932,7 +949,7 @@ export class RegistrationTabs extends React.Component<{}, State> {
await this.accountManager.requestPairing(primaryPubKey); await this.accountManager.requestPairing(primaryPubKey);
const pubkey = window.textsecure.storage.user.getNumber(); const pubkey = window.textsecure.storage.user.getNumber();
const secretWords = window.mnemonic.pubkey_to_secret_words(pubkey); const secretWords = window.mnemonic.pubkey_to_secret_words(pubkey);
this.setState({secretWords}); this.setState({ secretWords });
} catch (e) { } catch (e) {
window.console.log(e); window.console.log(e);
await this.resetRegistration(); await this.resetRegistration();

@ -120,6 +120,15 @@ export const _getLeftPaneLists = (
}; };
} }
// Remove all invalid conversations and conversatons of devices associated with cancelled attempted links
if (!conversation.timestamp) {
continue;
}
if (!conversation.activeAt) {
continue;
}
if (conversation.activeAt !== undefined) { if (conversation.activeAt !== undefined) {
allContacts.push(conversation); allContacts.push(conversation);
} }
@ -128,10 +137,6 @@ export const _getLeftPaneLists = (
unreadCount += conversation.unreadCount; unreadCount += conversation.unreadCount;
} }
if (!conversation.activeAt) {
continue;
}
if (conversation.isArchived) { if (conversation.isArchived) {
archivedConversations.push(conversation); archivedConversations.push(conversation);
} else { } else {

Loading…
Cancel
Save