settings fix
This commit is contained in:
@@ -101,7 +101,7 @@ export function HomeScreen() {
|
|||||||
const insets = useSafeAreaInsets();
|
const insets = useSafeAreaInsets();
|
||||||
const [page, setPage] = useState(1);
|
const [page, setPage] = useState(1);
|
||||||
const { data, isLoading, error, isFetching, refetch } = useFiles(null, page, PAGE_SIZE);
|
const { data, isLoading, error, isFetching, refetch } = useFiles(null, page, PAGE_SIZE);
|
||||||
const { hasPermission, requestPermission, pickDirectory, pickAndScanRecursive, folders, refreshFolders, discovered } = useLocalFiles();
|
const { hasPermission, requestPermission, pickAndScanRecursive, folders, refreshFolders, discovered } = useLocalFiles();
|
||||||
const freeLocalSpace = useFreeLocalSpace();
|
const freeLocalSpace = useFreeLocalSpace();
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
const [searchQuery, setSearchQuery] = useState('');
|
const [searchQuery, setSearchQuery] = useState('');
|
||||||
@@ -388,11 +388,6 @@ export function HomeScreen() {
|
|||||||
setRemoveFolderConfirmId(null);
|
setRemoveFolderConfirmId(null);
|
||||||
}, [removeFolderConfirmId, refreshFolders]);
|
}, [removeFolderConfirmId, refreshFolders]);
|
||||||
|
|
||||||
const handleAddFolder = useCallback(async () => {
|
|
||||||
setSettingsModalVisible(false);
|
|
||||||
await pickDirectory();
|
|
||||||
}, [pickDirectory]);
|
|
||||||
|
|
||||||
const handleAddFolderRecursive = useCallback(async () => {
|
const handleAddFolderRecursive = useCallback(async () => {
|
||||||
setSettingsModalVisible(false);
|
setSettingsModalVisible(false);
|
||||||
await pickAndScanRecursive();
|
await pickAndScanRecursive();
|
||||||
@@ -673,7 +668,6 @@ export function HomeScreen() {
|
|||||||
folders={folders}
|
folders={folders}
|
||||||
onToggleVisibility={handleToggleFolderVisibility}
|
onToggleVisibility={handleToggleFolderVisibility}
|
||||||
onRemoveFolder={handleRemoveFolder}
|
onRemoveFolder={handleRemoveFolder}
|
||||||
onAddFolder={handleAddFolder}
|
|
||||||
onAddFolderRecursive={handleAddFolderRecursive}
|
onAddFolderRecursive={handleAddFolderRecursive}
|
||||||
onUpdateSyncMode={handleUpdateSyncMode}
|
onUpdateSyncMode={handleUpdateSyncMode}
|
||||||
onUpdateSyncCellular={handleUpdateSyncCellular}
|
onUpdateSyncCellular={handleUpdateSyncCellular}
|
||||||
|
|||||||
@@ -19,8 +19,7 @@ interface SettingsModalProps {
|
|||||||
folders: StoredFolder[];
|
folders: StoredFolder[];
|
||||||
onToggleVisibility: (folderId: string) => void;
|
onToggleVisibility: (folderId: string) => void;
|
||||||
onRemoveFolder: (folderId: string) => void;
|
onRemoveFolder: (folderId: string) => void;
|
||||||
onAddFolder: () => void;
|
onAddFolderRecursive: () => void;
|
||||||
onAddFolderRecursive?: () => void;
|
|
||||||
onUpdateSyncMode: (folderId: string, mode: SyncMode) => void;
|
onUpdateSyncMode: (folderId: string, mode: SyncMode) => void;
|
||||||
onUpdateSyncCellular: (folderId: string, enabled: boolean) => void;
|
onUpdateSyncCellular: (folderId: string, enabled: boolean) => void;
|
||||||
globalSyncMode: SyncGlobalMode;
|
globalSyncMode: SyncGlobalMode;
|
||||||
@@ -47,7 +46,6 @@ export function SettingsModal({
|
|||||||
folders,
|
folders,
|
||||||
onToggleVisibility,
|
onToggleVisibility,
|
||||||
onRemoveFolder,
|
onRemoveFolder,
|
||||||
onAddFolder,
|
|
||||||
onAddFolderRecursive,
|
onAddFolderRecursive,
|
||||||
onUpdateSyncMode,
|
onUpdateSyncMode,
|
||||||
onUpdateSyncCellular,
|
onUpdateSyncCellular,
|
||||||
@@ -106,7 +104,6 @@ export function SettingsModal({
|
|||||||
onBack={() => setView('menu')}
|
onBack={() => setView('menu')}
|
||||||
onToggleVisibility={onToggleVisibility}
|
onToggleVisibility={onToggleVisibility}
|
||||||
onRemoveFolder={handleRemoveFolder}
|
onRemoveFolder={handleRemoveFolder}
|
||||||
onAddFolder={onAddFolder}
|
|
||||||
onAddFolderRecursive={onAddFolderRecursive}
|
onAddFolderRecursive={onAddFolderRecursive}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
@@ -190,15 +187,13 @@ function FoldersView({
|
|||||||
onBack,
|
onBack,
|
||||||
onToggleVisibility,
|
onToggleVisibility,
|
||||||
onRemoveFolder,
|
onRemoveFolder,
|
||||||
onAddFolder,
|
|
||||||
onAddFolderRecursive,
|
onAddFolderRecursive,
|
||||||
}: {
|
}: {
|
||||||
folders: StoredFolder[];
|
folders: StoredFolder[];
|
||||||
onBack: () => void;
|
onBack: () => void;
|
||||||
onToggleVisibility: (id: string) => void;
|
onToggleVisibility: (id: string) => void;
|
||||||
onRemoveFolder: (folder: StoredFolder) => void;
|
onRemoveFolder: (folder: StoredFolder) => void;
|
||||||
onAddFolder: () => void;
|
onAddFolderRecursive: () => void;
|
||||||
onAddFolderRecursive?: () => void;
|
|
||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<ScrollView style={styles.viewContainer} showsVerticalScrollIndicator={false}>
|
<ScrollView style={styles.viewContainer} showsVerticalScrollIndicator={false}>
|
||||||
@@ -241,17 +236,10 @@ function FoldersView({
|
|||||||
})
|
})
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<TouchableOpacity style={styles.addBtn} onPress={onAddFolder}>
|
<TouchableOpacity style={styles.addBtn} onPress={onAddFolderRecursive}>
|
||||||
<MaterialIcons name="add" size={20} color="#fff" />
|
<MaterialIcons name="add" size={20} color="#fff" />
|
||||||
<Text style={styles.addBtnText}>Ajouter un dossier</Text>
|
<Text style={styles.addBtnText}>Ajouter un dossier</Text>
|
||||||
</TouchableOpacity>
|
</TouchableOpacity>
|
||||||
|
|
||||||
{onAddFolderRecursive && (
|
|
||||||
<TouchableOpacity style={styles.scanRootBtn} onPress={onAddFolderRecursive}>
|
|
||||||
<MaterialIcons name="linear-scale" size={20} color="#fff" />
|
|
||||||
<Text style={styles.addBtnText}>Ajouter (scan récursif)</Text>
|
|
||||||
</TouchableOpacity>
|
|
||||||
)}
|
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -538,16 +526,6 @@ const styles = StyleSheet.create({
|
|||||||
marginTop: 16,
|
marginTop: 16,
|
||||||
gap: 8,
|
gap: 8,
|
||||||
},
|
},
|
||||||
scanRootBtn: {
|
|
||||||
flexDirection: 'row',
|
|
||||||
alignItems: 'center',
|
|
||||||
justifyContent: 'center',
|
|
||||||
backgroundColor: '#8E24AA',
|
|
||||||
borderRadius: 10,
|
|
||||||
paddingVertical: 12,
|
|
||||||
marginTop: 10,
|
|
||||||
gap: 8,
|
|
||||||
},
|
|
||||||
addBtnText: {
|
addBtnText: {
|
||||||
fontSize: 15,
|
fontSize: 15,
|
||||||
color: '#fff',
|
color: '#fff',
|
||||||
|
|||||||
@@ -251,31 +251,6 @@ export function useDeviceFiles() {
|
|||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const pickDirectory = useCallback(async () => {
|
|
||||||
try {
|
|
||||||
const result = await FileSystem.StorageAccessFramework.requestDirectoryPermissionsAsync();
|
|
||||||
if (!result.granted) return false;
|
|
||||||
const dirUri = result.directoryUri;
|
|
||||||
const parts = dirUri.split('/');
|
|
||||||
const dirName = decodeURIComponent(parts[parts.length - 1] ?? 'Dossier');
|
|
||||||
safDirectory.addFolder(dirUri, dirName);
|
|
||||||
setFolders(safDirectory.getAll());
|
|
||||||
|
|
||||||
const folderFiles = await scanSafFolder({ id: 'new', uri: dirUri, name: dirName, visible: true, syncMode: 'none', syncCellular: false, source: 'saf' });
|
|
||||||
setFiles((prev) => {
|
|
||||||
const existing = new Set(prev.map((f) => f.id));
|
|
||||||
const merged = [...prev];
|
|
||||||
for (const f of folderFiles) {
|
|
||||||
if (!existing.has(f.id)) merged.push(f);
|
|
||||||
}
|
|
||||||
return merged;
|
|
||||||
});
|
|
||||||
return true;
|
|
||||||
} catch (err) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const pickAndScanRecursive = useCallback(async (): Promise<{ addedFolders: number }> => {
|
const pickAndScanRecursive = useCallback(async (): Promise<{ addedFolders: number }> => {
|
||||||
try {
|
try {
|
||||||
const result = await FileSystem.StorageAccessFramework.requestDirectoryPermissionsAsync();
|
const result = await FileSystem.StorageAccessFramework.requestDirectoryPermissionsAsync();
|
||||||
@@ -371,7 +346,7 @@ export function useDeviceFiles() {
|
|||||||
return {
|
return {
|
||||||
files, isLoading, hasPermission,
|
files, isLoading, hasPermission,
|
||||||
requestPermission, rescan,
|
requestPermission, rescan,
|
||||||
pickDirectory, pickAndScanRecursive,
|
pickAndScanRecursive,
|
||||||
folders, refreshFolders,
|
folders, refreshFolders,
|
||||||
discovered, discoverMediaAlbums,
|
discovered, discoverMediaAlbums,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { fileStore } from '../services/fileStore';
|
|||||||
import { UnifiedFileItem } from '../types';
|
import { UnifiedFileItem } from '../types';
|
||||||
|
|
||||||
export function useLocalFiles() {
|
export function useLocalFiles() {
|
||||||
const { files: deviceFiles, isLoading: deviceLoading, hasPermission, requestPermission, rescan, pickDirectory, pickAndScanRecursive, folders, refreshFolders, discovered, discoverMediaAlbums } = useDeviceFiles();
|
const { files: deviceFiles, isLoading: deviceLoading, hasPermission, requestPermission, rescan, pickAndScanRecursive, folders, refreshFolders, discovered, discoverMediaAlbums } = useDeviceFiles();
|
||||||
const lastDeviceCount = useRef(0);
|
const lastDeviceCount = useRef(0);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -75,7 +75,6 @@ export function useLocalFiles() {
|
|||||||
hasPermission,
|
hasPermission,
|
||||||
requestPermission,
|
requestPermission,
|
||||||
rescan,
|
rescan,
|
||||||
pickDirectory,
|
|
||||||
pickAndScanRecursive,
|
pickAndScanRecursive,
|
||||||
folders,
|
folders,
|
||||||
refreshFolders,
|
refreshFolders,
|
||||||
|
|||||||
Reference in New Issue
Block a user