refactor(settings): drop three orphan settings with no UI and strip them via a one-shot migration

This commit is contained in:
heaven 2026-06-03 11:53:30 +03:00
parent 8fcb94e956
commit 06afe034c5
4 changed files with 29 additions and 13 deletions

View file

@ -564,9 +564,12 @@ export function RoomTimeline({
const [hideNickAvatarEvents] = useSetting(settingsAtom, 'hideNickAvatarEvents'); const [hideNickAvatarEvents] = useSetting(settingsAtom, 'hideNickAvatarEvents');
const [mediaAutoLoad] = useSetting(settingsAtom, 'mediaAutoLoad'); const [mediaAutoLoad] = useSetting(settingsAtom, 'mediaAutoLoad');
const [urlPreview] = useSetting(settingsAtom, 'urlPreview'); const [urlPreview] = useSetting(settingsAtom, 'urlPreview');
const [encUrlPreview] = useSetting(settingsAtom, 'encUrlPreview'); // Encrypted rooms never auto-preview URLs (privacy-safe default; the
const showUrlPreview = room.hasEncryptionStateEvent() ? encUrlPreview : urlPreview; // `encUrlPreview` opt-in setting was removed). Plaintext rooms honour urlPreview.
const [showHiddenEvents] = useSetting(settingsAtom, 'showHiddenEvents'); const showUrlPreview = room.hasEncryptionStateEvent() ? false : urlPreview;
// Hidden/redacted "dev view" of events — was an orphan setting with no UI,
// permanently off. Pinned false; the hidden-event renderers below stay inert.
const showHiddenEvents = false;
const [showDeveloperTools] = useSetting(settingsAtom, 'developerTools'); const [showDeveloperTools] = useSetting(settingsAtom, 'developerTools');
const ignoredUsersList = useIgnoredUsers(); const ignoredUsersList = useIgnoredUsers();

View file

@ -306,9 +306,9 @@ export function ThreadDrawer({
const useAuthentication = useMediaAuthentication(); const useAuthentication = useMediaAuthentication();
const [mediaAutoLoad] = useSetting(settingsAtom, 'mediaAutoLoad'); const [mediaAutoLoad] = useSetting(settingsAtom, 'mediaAutoLoad');
const [urlPreview] = useSetting(settingsAtom, 'urlPreview'); const [urlPreview] = useSetting(settingsAtom, 'urlPreview');
const [encUrlPreview] = useSetting(settingsAtom, 'encUrlPreview');
const [hideActivity] = useSetting(settingsAtom, 'hideActivity'); const [hideActivity] = useSetting(settingsAtom, 'hideActivity');
const showUrlPreview = room.hasEncryptionStateEvent() ? encUrlPreview : urlPreview; // Encrypted rooms never auto-preview URLs (the `encUrlPreview` opt-in was removed).
const showUrlPreview = room.hasEncryptionStateEvent() ? false : urlPreview;
const unreadThreadingEnabled = useUnreadThreadingEnabled(); const unreadThreadingEnabled = useUnreadThreadingEnabled();

View file

@ -68,9 +68,10 @@ export const MessageEditor = as<'div', MessageEditorProps>(
const mx = useMatrixClient(); const mx = useMatrixClient();
const editor = useEditor(); const editor = useEditor();
const [enterForNewline] = useSetting(settingsAtom, 'enterForNewline'); const [enterForNewline] = useSetting(settingsAtom, 'enterForNewline');
const [globalToolbar] = useSetting(settingsAtom, 'editorToolbar');
const [isMarkdown] = useSetting(settingsAtom, 'isMarkdown'); const [isMarkdown] = useSetting(settingsAtom, 'isMarkdown');
const [toolbar, setToolbar] = useState(globalToolbar); // The edit toolbar starts collapsed (the `editorToolbar` opt-in setting was
// removed — it only ever gated this one initial-open flag).
const [toolbar, setToolbar] = useState(false);
const isComposing = useComposingCheck(); const isComposing = useComposingCheck();
const [autocompleteQuery, setAutocompleteQuery] = const [autocompleteQuery, setAutocompleteQuery] =

View file

@ -8,7 +8,6 @@ export interface Settings {
themeId?: ThemeId; themeId?: ThemeId;
useSystemTheme: boolean; useSystemTheme: boolean;
isMarkdown: boolean; isMarkdown: boolean;
editorToolbar: boolean;
twitterEmoji: boolean; twitterEmoji: boolean;
pageZoom: number; pageZoom: number;
hideActivity: boolean; hideActivity: boolean;
@ -20,8 +19,6 @@ export interface Settings {
hideNickAvatarEvents: boolean; hideNickAvatarEvents: boolean;
mediaAutoLoad: boolean; mediaAutoLoad: boolean;
urlPreview: boolean; urlPreview: boolean;
encUrlPreview: boolean;
showHiddenEvents: boolean;
isNotificationSounds: boolean; isNotificationSounds: boolean;
inviteSpamFilter: boolean; inviteSpamFilter: boolean;
@ -34,12 +31,12 @@ export interface Settings {
const DAWN_MIGRATION_KEY = 'dawn-redesign-v1'; const DAWN_MIGRATION_KEY = 'dawn-redesign-v1';
const P3C_CLEANUP_KEY = 'dawn-p3c-cleanup'; const P3C_CLEANUP_KEY = 'dawn-p3c-cleanup';
const SYSTEM_TIME_FORMAT_CLEANUP_KEY = 'system-time-format-cleanup'; const SYSTEM_TIME_FORMAT_CLEANUP_KEY = 'system-time-format-cleanup';
const ORPHAN_SETTINGS_CLEANUP_KEY = 'dawn-orphan-settings-cleanup';
const defaultSettings: Settings = { const defaultSettings: Settings = {
themeId: undefined, themeId: undefined,
useSystemTheme: true, useSystemTheme: true,
isMarkdown: true, isMarkdown: true,
editorToolbar: false,
twitterEmoji: false, twitterEmoji: false,
pageZoom: 100, pageZoom: 100,
hideActivity: false, hideActivity: false,
@ -51,8 +48,6 @@ const defaultSettings: Settings = {
hideNickAvatarEvents: true, hideNickAvatarEvents: true,
mediaAutoLoad: true, mediaAutoLoad: true,
urlPreview: true, urlPreview: true,
encUrlPreview: false,
showHiddenEvents: false,
isNotificationSounds: true, isNotificationSounds: true,
inviteSpamFilter: true, inviteSpamFilter: true,
@ -125,6 +120,23 @@ export const getSettings = (): Settings => {
setSettings(merged); setSettings(merged);
} }
// Dawn remnant sweep: strip the three orphan settings that had no UI toggle
// and were frozen at their defaults forever — `editorToolbar` (only ever
// pre-opened the edit overlay's toolbar), `encUrlPreview` (encrypted rooms now
// never auto-preview, privacy-safe) and `showHiddenEvents` (the dev-only hidden
// -event view, permanently off). One-shot strip of the stale persisted keys.
if (!merged.migrationsApplied?.[ORPHAN_SETTINGS_CLEANUP_KEY]) {
const orphan = merged as unknown as Record<string, unknown>;
delete orphan.editorToolbar;
delete orphan.encUrlPreview;
delete orphan.showHiddenEvents;
merged.migrationsApplied = {
...(merged.migrationsApplied ?? {}),
[ORPHAN_SETTINGS_CLEANUP_KEY]: true,
};
setSettings(merged);
}
return merged; return merged;
}; };