diff --git a/main.js b/main.js index 40e6aa2c8..fda3e90d8 100644 --- a/main.js +++ b/main.js @@ -662,6 +662,7 @@ function getDefaultSQLKey() { } async function removeDB() { + // this don't remove attachments and stuff like that... const userDir = await getRealPath(app.getPath('userData')); await sql.removeDB(userDir); diff --git a/password_preload.js b/password_preload.js index e0fd3e13d..2c064ba98 100644 --- a/password_preload.js +++ b/password_preload.js @@ -21,9 +21,6 @@ window.getEnvironment = () => config.environment; window.getVersion = () => config.version; window.getAppInstance = () => config.appInstance; -const electron = require('electron'); - -const ipc = electron.ipcRenderer; const { SessionPasswordPrompt } = require('./ts/components/session/SessionPasswordPrompt'); window.Signal = { @@ -34,21 +31,11 @@ window.Signal = { window.Signal.Logs = require('./js/modules/logs'); -window.resetDatabase = () => { +window.clearLocalData = async () => { window.log.info('reset database'); ipcRenderer.send('resetDatabase'); }; -window.restart = () => { - window.log.info('restart'); - ipc.send('restart'); -}; - -window.clearLocalData = async () => { - window.resetDatabase(); - window.restart(); -}; - window.onLogin = passPhrase => new Promise((resolve, reject) => { ipcRenderer.once('password-window-login-response', (event, error) => { diff --git a/preload.js b/preload.js index 1c4a95d77..6fceb96ae 100644 --- a/preload.js +++ b/preload.js @@ -156,11 +156,6 @@ window.restart = () => { ipc.send('restart'); }; -window.resetDatabase = () => { - window.log.info('reset database'); - ipc.send('resetDatabase'); -}; - ipc.on('mediaPermissionsChanged', () => { Whisper.events.trigger('mediaPermissionsChanged'); }); diff --git a/ts/components/dialog/DeleteAccountModal.tsx b/ts/components/dialog/DeleteAccountModal.tsx index 67d2ab55f..90bf1c12b 100644 --- a/ts/components/dialog/DeleteAccountModal.tsx +++ b/ts/components/dialog/DeleteAccountModal.tsx @@ -11,7 +11,7 @@ import { SessionSpinner } from '../session/SessionSpinner'; import { SessionWrapperModal } from '../session/SessionWrapperModal'; const deleteDbLocally = async () => { - window?.log?.info('configuration message sent successfully. Deleting everything'); + window?.log?.info('last message sent successfully. Deleting everything'); window.persistStore?.purge(); await window.Signal.Logs.deleteAll(); await window.Signal.Data.removeAll(); @@ -128,61 +128,44 @@ async function deleteEverythingAndNetworkData() { export const DeleteAccountModal = () => { const [isLoading, setIsLoading] = useState(false); + const [deleteDeviceOnly, setDeleteDeviceOnly] = useState(false); + const [deleteEverythingWithNetwork, setDeleteEverythingWithNetwork] = useState(false); + const dispatch = useDispatch(); - const onDeleteEverythingLocallyOnly = () => { - dispatch( - updateConfirmModal({ - message: window.i18n('areYouSureDeleteDeviceOnly'), - okText: window.i18n('iAmSure'), - okTheme: SessionButtonColor.Danger, - onClickOk: async () => { - setIsLoading(true); - try { - window.log.warn('Deleting everything on device but keeping network data'); - - await sendConfigMessageAndDeleteEverything(); - } catch (e) { - window.log.warn(e); - } finally { - setIsLoading(false); - } - }, - onClickClose: () => { - window.inboxStore?.dispatch(updateConfirmModal(null)); - }, - }) - ); + const onDeleteEverythingLocallyOnly = async () => { + if (!isLoading) { + setIsLoading(true); + try { + window.log.warn('Deleting everything on device but keeping network data'); + + await sendConfigMessageAndDeleteEverything(); + } catch (e) { + window.log.warn(e); + } finally { + setIsLoading(false); + } + } }; - const onDeleteEverythingAndNetworkData = () => { - dispatch( - updateConfirmModal({ - message: window.i18n('areYouSureDeleteEntireAccount'), - okText: window.i18n('iAmSure'), - okTheme: SessionButtonColor.Danger, - onClickOk: async () => { - setIsLoading(true); - try { - window.log.warn('Deleting everything including network data'); - await deleteEverythingAndNetworkData(); - } catch (e) { - window.log.warn(e); - } finally { - setIsLoading(false); - } - }, - onClickClose: () => { - window.inboxStore?.dispatch(updateConfirmModal(null)); - }, - }) - ); + const onDeleteEverythingAndNetworkData = async () => { + if (!isLoading) { + setIsLoading(true); + try { + window.log.warn('Deleting everything including network data'); + await deleteEverythingAndNetworkData(); + } catch (e) { + window.log.warn(e); + } finally { + setIsLoading(false); + } + } }; /** * Performs specified on close action then removes the modal. */ const onClickCancelHandler = useCallback(() => { - window.inboxStore?.dispatch(updateDeleteAccountModal(null)); + dispatch(updateDeleteAccountModal(null)); }, []); return ( @@ -209,17 +192,65 @@ export const DeleteAccountModal = () => { <SessionButton text={window.i18n('entireAccount')} buttonColor={SessionButtonColor.Danger} - onClick={onDeleteEverythingAndNetworkData} - disabled={isLoading} + onClick={() => { + setDeleteEverythingWithNetwork(true); + }} + disabled={deleteEverythingWithNetwork || deleteDeviceOnly} /> <SessionButton text={window.i18n('deviceOnly')} buttonColor={SessionButtonColor.Primary} - onClick={onDeleteEverythingLocallyOnly} - disabled={isLoading} + onClick={() => { + setDeleteDeviceOnly(true); + }} + disabled={deleteEverythingWithNetwork || deleteDeviceOnly} /> </div> + <SpacerLG /> + + {deleteEverythingWithNetwork && ( + <SessionHtmlRenderer + tag="span" + className="session-confirm-main-message" + html={window.i18n('areYouSureDeleteEntireAccount')} + /> + )} + + {deleteDeviceOnly && ( + <SessionHtmlRenderer + tag="span" + className="session-confirm-main-message" + html={window.i18n('areYouSureDeleteDeviceOnly')} + /> + )} + <SpacerLG /> + + {(deleteDeviceOnly || deleteEverythingWithNetwork) && ( + <div className="session-modal__button-group"> + <SessionButton + text={window.i18n('iAmSure')} + buttonColor={SessionButtonColor.Danger} + onClick={() => { + if (deleteDeviceOnly) { + void onDeleteEverythingLocallyOnly(); + } else if (deleteEverythingWithNetwork) { + void onDeleteEverythingAndNetworkData(); + } + }} + disabled={isLoading} + /> + + <SessionButton + text={window.i18n('cancel')} + buttonColor={SessionButtonColor.Primary} + onClick={() => { + dispatch(updateDeleteAccountModal(null)); + }} + disabled={isLoading} + /> + </div> + )} <SessionSpinner loading={isLoading} /> </div> diff --git a/ts/components/session/registration/SignUpTab.tsx b/ts/components/session/registration/SignUpTab.tsx index 7c4947e16..e6a5c08f4 100644 --- a/ts/components/session/registration/SignUpTab.tsx +++ b/ts/components/session/registration/SignUpTab.tsx @@ -71,7 +71,7 @@ const SignUpSessionIDShown = (props: { continueSignUp: () => void }) => { </div> </Flex> <SessionIdEditable editable={false} placeholder={undefined} /> - <div className="session-description-long">{window.i18n('signupSessionIDBlurb')}</div> + <div className="session-description-long">{window.i18n('allUsersAreRandomly...')}</div> <ContinueSignUpButton continueSignUp={props.continueSignUp} /> <TermsAndConditions /> </div> diff --git a/ts/window.d.ts b/ts/window.d.ts index 86b3ddda1..cc453483d 100644 --- a/ts/window.d.ts +++ b/ts/window.d.ts @@ -51,7 +51,6 @@ declare global { lokiSnodeAPI: LokiSnodeAPI; onLogin: any; persistStore?: Persistor; - resetDatabase: any; restart: any; getSeedNodeList: () => Array<any> | undefined; setPassword: any;