Skip to content

Commit

Permalink
fix: create custom error for display name retrieval errors
Browse files Browse the repository at this point in the history
  • Loading branch information
yougotwill committed Jan 15, 2025
1 parent f9ccc31 commit fd24a47
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 21 deletions.
13 changes: 4 additions & 9 deletions ts/components/registration/stages/CreateAccount.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import { ContinueButton, OnboardDescription, OnboardHeading } from '../component
import { BackButtonWithinContainer } from '../components/BackButton';
import { displayNameIsValid, sanitizeDisplayNameOrToast } from '../utils';
import { localize } from '../../../util/i18n/localizedString';
import { RetrieveDisplayNameError } from '../../../session/utils/errors';

export type AccountDetails = {
recoveryPassword: string;
Expand Down Expand Up @@ -108,15 +109,9 @@ export const CreateAccount = () => {
);
dispatch(setAccountCreationStep(AccountCreation.DisplayName));

switch (err.message) {
case 'failed to retrieve display name after setting it':
dispatch(setDisplayNameError(localize('displayNameErrorDescription').toString()));
return;
case 'failed to get truncated displayName after setting it':
dispatch(setDisplayNameError(localize('displayNameErrorDescription').toString()));
return;
default:
// we can't guarantee that an error has a message so we handle the final case outside of the switch
if (err instanceof RetrieveDisplayNameError) {
dispatch(setDisplayNameError(localize('displayNameErrorDescription').toString()));
return;
}

// Note: we have to assume here that libsession threw an error because the name was too long since we covered the other cases.
Expand Down
14 changes: 4 additions & 10 deletions ts/components/registration/stages/RestoreAccount.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { InvalidWordsError, NotEnoughWordsError } from '../../../session/crypto/
import { ProfileManager } from '../../../session/profile_manager/ProfileManager';
import { PromiseUtils } from '../../../session/utils';
import { TaskTimedOutError } from '../../../session/utils/Promise';
import { NotFoundError } from '../../../session/utils/errors';
import { NotFoundError, RetrieveDisplayNameError } from '../../../session/utils/errors';
import { trigger } from '../../../shims/events';
import {
AccountRestoration,
Expand Down Expand Up @@ -198,15 +198,9 @@ export const RestoreAccount = () => {
);
dispatch(setAccountRestorationStep(AccountRestoration.DisplayName));

switch (err.message) {
case 'failed to retrieve display name after setting it':
dispatch(setDisplayNameError(localize('displayNameErrorDescription').toString()));
return;
case 'failed to get truncated displayName after setting it':
dispatch(setDisplayNameError(localize('displayNameErrorDescription').toString()));
return;
default:
// we can't guarantee that an error has a message so we handle the final case outside of the switch
if (err instanceof RetrieveDisplayNameError) {
dispatch(setDisplayNameError(localize('displayNameErrorDescription').toString()));
return;
}

// Note: we have to assume here that libsession threw an error because the name was too long since we covered the other cases.
Expand Down
5 changes: 3 additions & 2 deletions ts/session/profile_manager/ProfileManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { SyncUtils, UserUtils } from '../utils';
import { fromHexToArray, sanitizeSessionUsername, toHex } from '../utils/String';
import { AvatarDownload } from '../utils/job_runners/jobs/AvatarDownloadJob';
import { CONVERSATION_PRIORITIES, ConversationTypeEnum } from '../../models/types';
import { RetrieveDisplayNameError } from '../utils/errors';

export type Profile = {
displayName: string | undefined;
Expand Down Expand Up @@ -115,7 +116,7 @@ async function updateOurProfileDisplayNameOnboarding(newName: string) {
const appliedName = await UserConfigWrapperActions.getName();

if (isNil(appliedName)) {
throw new Error('failed to retrieve display name after setting it');
throw new RetrieveDisplayNameError();
}

return appliedName;
Expand All @@ -141,7 +142,7 @@ async function updateOurProfileDisplayName(newName: string) {
await UserConfigWrapperActions.setNameTruncated(sanitizeSessionUsername(newName).trim());
const truncatedName = await UserConfigWrapperActions.getName();
if (isNil(truncatedName)) {
throw new Error('failed to get truncated displayName after setting it');
throw new RetrieveDisplayNameError();
}
await UserConfigWrapperActions.setPriority(dbPriority);
if (dbProfileUrl && !isEmpty(dbProfileKey)) {
Expand Down
8 changes: 8 additions & 0 deletions ts/session/utils/errors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,11 @@ export class SnodeResponseError extends Error {
Object.setPrototypeOf(this, SnodeResponseError.prototype);
}
}

export class RetrieveDisplayNameError extends Error {
constructor(message = 'failed to retrieve display name after setting it') {
super(message);
// restore prototype chain
Object.setPrototypeOf(this, SnodeResponseError.prototype);
}
}

0 comments on commit fd24a47

Please sign in to comment.