sse implémentaton

This commit is contained in:
m
2026-07-29 19:08:22 +02:00
parent 397803fb96
commit 3d63dc1987
13 changed files with 533 additions and 87 deletions
+65 -1
View File
@@ -2,6 +2,7 @@ import { createMMKV } from 'react-native-mmkv';
export type SyncMode = 'none' | 'manual' | 'auto';
export type SyncGlobalMode = 'off' | 'auto' | 'manual';
export type FolderSource = 'saf' | 'media-library' | 'recursive';
export type StoredFolder = {
id: string;
@@ -10,6 +11,9 @@ export type StoredFolder = {
visible: boolean;
syncMode: SyncMode;
syncCellular: boolean;
source: FolderSource;
albumId?: string;
parentUri?: string;
};
const storage = createMMKV({ id: 'vaultdrop-saf' });
@@ -17,6 +21,7 @@ const storage = createMMKV({ id: 'vaultdrop-saf' });
const FOLDERS_KEY = 'saf_folders';
const SYNC_GLOBAL_MODE_KEY = 'sync_global_mode';
const SYNC_GLOBAL_CELLULAR_KEY = 'sync_global_cellular';
const DISCOVERED_KEY = 'folders_discovered';
function generateId(): string {
return `folder_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
@@ -36,6 +41,10 @@ function getAllRaw(): StoredFolder[] {
(f as any).syncCellular = false;
migrated = true;
}
if (f.source === undefined) {
(f as any).source = 'saf';
migrated = true;
}
}
if (migrated) saveAll(parsed);
return parsed;
@@ -59,12 +68,67 @@ export const safDirectory = {
if (folders.some((f) => f.uri === uri)) {
return folders.find((f) => f.uri === uri)!;
}
const folder: StoredFolder = { id: generateId(), uri, name, visible: true, syncMode: 'none', syncCellular: false };
const folder: StoredFolder = { id: generateId(), uri, name, visible: true, syncMode: 'none', syncCellular: false, source: 'saf' };
folders.push(folder);
saveAll(folders);
return folder;
},
addMediaFolder(albumId: string, name: string, uri: string): StoredFolder {
const folders = getAllRaw();
const key = `media://${albumId}`;
if (folders.some((f) => f.uri === key)) {
return folders.find((f) => f.uri === key)!;
}
const folder: StoredFolder = {
id: generateId(),
uri: key,
name,
visible: true,
syncMode: 'none',
syncCellular: false,
source: 'media-library',
albumId,
};
folders.push(folder);
saveAll(folders);
return folder;
},
addBatchFolders(folders: Array<{ uri: string; name: string; source?: FolderSource; parentUri?: string }>): StoredFolder[] {
const current = getAllRaw();
const added: StoredFolder[] = [];
for (const f of folders) {
if (current.some((existing) => existing.uri === f.uri)) continue;
const folder: StoredFolder = {
id: generateId(),
uri: f.uri,
name: f.name,
visible: true,
syncMode: 'none',
syncCellular: false,
source: f.source ?? 'recursive',
parentUri: f.parentUri,
};
current.push(folder);
added.push(folder);
}
saveAll(current);
return added;
},
getDiscovered(): boolean {
return storage.getString(DISCOVERED_KEY) === 'true';
},
setDiscovered() {
storage.set(DISCOVERED_KEY, 'true');
},
resetDiscovered() {
storage.remove(DISCOVERED_KEY);
},
removeFolder(id: string) {
const folders = getAllRaw().filter((f) => f.id !== id);
saveAll(folders);