feat(settings): add mobile camera upload preference

This commit is contained in:
Hampus authored and GitHub committed 2026-08-26 15:31:53 +02:00
1 parent f98a40062a
commit 14a935db81
5 files changed
+17 -12

No files matched your search

@@ -10,17 +10,15 @@ import {
selectSyncedFieldMachineModel,
transitionSyncedFieldMachineSnapshot,
} from '@app/features/user/state/SyncedFieldStateMachine';
import type {SyncedPreferences, SyncedPreferencesField} from '@app/features/user/state/SyncedPreferencesEngine';
import {create, equals, type Message, type MessageInitShape, toBinary} from '@bufbuild/protobuf';
import type {GenMessage} from '@bufbuild/protobuf/codegenv2';
import type {SyncedPreferences} from '@fluxer/schema/src/domains/user/SyncedPreferencesCodec';
import {comparer, reaction, runInAction} from 'mobx';
export {verifyRoundtripStability};
const logger = new Logger('SyncedField');
export type SyncedPreferencesField = Exclude<keyof SyncedPreferences, '$typeName' | '$unknown' | 'sanitizeUrls'>;
function isMessageSchema(value: unknown): value is GenMessage<Message> {
return (
value != null &&
@@ -10,8 +10,6 @@ export type SyncedPreferencesField = Exclude<keyof SyncedPreferences, '$typeName
export type {SyncedPreferences};
export type SyncedPreferencesSubField = Exclude<SyncedPreferencesField, 'sanitizeUrls'>;
interface TopLevelFieldChunk {
field: number;
bytes: Uint8Array;
@@ -225,6 +223,10 @@ export function changedSyncedPreferenceFields(
return toFieldNames(changedFieldNumbers(preferencesToBytes(left), preferencesToBytes(right)));
}
export function syncedPreferencesEqual(left: SyncedPreferences, right: SyncedPreferences): boolean {
return changedFieldNumbers(preferencesToBytes(left), preferencesToBytes(right)).length === 0;
}
export function copySyncedPreferenceField(
target: SyncedPreferences,
source: SyncedPreferences,
@@ -34,6 +34,7 @@ import {
SYNCED_PREFERENCES_FIELDS,
type SyncedPreferences,
type SyncedPreferencesField,
syncedPreferencesEqual,
} from '@app/features/user/state/SyncedPreferencesEngine';
import type {StatusType} from '@fluxer/constants/src/StatusConstants';
import {normalizeStatus, StatusTypes} from '@fluxer/constants/src/StatusConstants';
@@ -54,8 +55,6 @@ import isPlainObject from 'lodash/isPlainObject';
import snakeCase from 'lodash/snakeCase';
import {action, makeAutoObservable, reaction, runInAction} from 'mobx';
type SyncedPreferencesSubField = Exclude<SyncedPreferencesField, 'sanitizeUrls'>;
function restoreSettingValue<K extends keyof UserSettings>(target: UserSettings, source: UserSettings, key: K): void {
target[key] = source[key];
}
@@ -781,12 +780,12 @@ class UserSettingsState {
);
}
getSubPreference<F extends SyncedPreferencesSubField>(field: F): SyncedPreferences[F] | undefined {
getSubPreference<F extends SyncedPreferencesField>(field: F): SyncedPreferences[F] | undefined {
const value = this.syncedPreferences[field];
return value === undefined ? undefined : value;
}
async setSubPreference<F extends SyncedPreferencesSubField>(
async setSubPreference<F extends SyncedPreferencesField>(
field: F,
value: NonNullable<SyncedPreferences[F]>,
): Promise<void> {
@@ -876,8 +875,8 @@ class UserSettingsState {
for (const field of dirtyFields) {
this.markSyncedPreferenceFieldDirty(field);
}
const wireChanged = changedSyncedPreferenceFields(nextWire, this.wireSyncedPreferences).length > 0;
const localChanged = changedSyncedPreferenceFields(merged, this.syncedPreferences).length > 0;
const wireChanged = !syncedPreferencesEqual(nextWire, this.wireSyncedPreferences);
const localChanged = !syncedPreferencesEqual(merged, this.syncedPreferences);
if (!wireChanged && !localChanged) {
if (shouldSyncMigratedMessageGroupSpacing) {
this.markSyncedPreferenceFieldDirty('accessibility');