diff --git a/src/pages/Settings.tsx b/src/pages/Settings.tsx
index e85d4364..1b1987d5 100644
--- a/src/pages/Settings.tsx
+++ b/src/pages/Settings.tsx
@@ -490,8 +490,14 @@ export function SettingsPage() {
const updateNickname = useAuthStore((s) => s.setAccountNickname);
const decryptedName = useMemo(() => {
if (!account) return "";
- return decryptData(account.deviceName, base64ToBuffer(account.seed));
- }, [account]);
+ try {
+ return decryptData(account.deviceName, base64ToBuffer(account.seed));
+ } catch (error) {
+ console.warn("Failed to decrypt device name, using fallback:", error);
+ // Return a fallback device name if decryption fails
+ return t("settings.account.devices.unknownDevice");
+ }
+ }, [account, t]);
const backendUrl = useBackendUrl();
diff --git a/src/pages/parts/settings/DeviceListPart.tsx b/src/pages/parts/settings/DeviceListPart.tsx
index 6f12d66e..1917ae69 100644
--- a/src/pages/parts/settings/DeviceListPart.tsx
+++ b/src/pages/parts/settings/DeviceListPart.tsx
@@ -75,7 +75,16 @@ export function DeviceListPart(props: {
const deviceListSorted = useMemo(() => {
if (!seed) return [];
let list = sessions.map((session) => {
- const decryptedName = decryptData(session.device, base64ToBuffer(seed));
+ let decryptedName: string;
+ try {
+ decryptedName = decryptData(session.device, base64ToBuffer(seed));
+ } catch (error) {
+ console.warn(
+ `Failed to decrypt device name for session ${session.id}:`,
+ error,
+ );
+ decryptedName = t("settings.account.devices.unknownDevice");
+ }
return {
current: session.id === currentSessionId,
id: session.id,
@@ -88,7 +97,7 @@ export function DeviceListPart(props: {
return a.name.localeCompare(b.name);
});
return list;
- }, [seed, sessions, currentSessionId]);
+ }, [seed, sessions, currentSessionId, t]);
if (!seed) return null;
return (
@@ -96,10 +105,10 @@ export function DeviceListPart(props: {
{t("settings.account.devices.title")}
- {props.error ? (
- {t("settings.account.devices.failed")}
- ) : props.loading ? (
+ {props.loading ? (
+ ) : props.error && deviceListSorted.length === 0 ? (
+ {t("settings.account.devices.failed")}
) : (
{deviceListSorted.map((session) => (