From c2c9bb700d5992b272019b62763dd7e917d40f53 Mon Sep 17 00:00:00 2001 From: Dionisio Date: Fri, 13 Feb 2026 19:46:38 +0100 Subject: [PATCH] Fix: Hide system directories (.blobs, .trash, .dedup_temp) from all users - Added directory name filtering in folder_fs_repository.rs - Filters out directories starting with '.' in list_folders, list_folders_paginated, and count_directory_items - Matches existing file listing behavior - Also added Italian language to popular languages list Fixes #87 --- .../repositories/folder_fs_repository.rs | 21 +++++++++++++++++-- static/js/auth.js | 2 +- static/js/languageSelector.js | 3 ++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/infrastructure/repositories/folder_fs_repository.rs b/src/infrastructure/repositories/folder_fs_repository.rs index 52510ad4..a272accd 100644 --- a/src/infrastructure/repositories/folder_fs_repository.rs +++ b/src/infrastructure/repositories/folder_fs_repository.rs @@ -90,8 +90,12 @@ impl FolderFsRepository { let mut entries = result.map_err(|e| FolderRepositoryError::StorageError(e.to_string()))?; let mut count = 0; - // Count entries manually - while let Ok(Some(_)) = entries.next_entry().await { + // Count entries manually, skipping hidden/system directories + while let Ok(Some(entry)) = entries.next_entry().await { + let name = entry.file_name().to_string_lossy().to_string(); + if name.starts_with('.') { + continue; + } count += 1; } @@ -474,6 +478,12 @@ impl FolderRepository for FolderFsRepository { } let folder_name = entry.file_name().to_string_lossy().to_string(); + + // Skip hidden/system directories (e.g. .blobs, .trash, .dedup_temp) + if folder_name.starts_with('.') { + continue; + } + let folder_storage_path = parent_storage_path.join(&folder_name); let get_folder_timeout = Duration::from_secs(5); @@ -602,6 +612,13 @@ impl FolderRepository for FolderFsRepository { continue; } + // Skip hidden/system directories (e.g. .blobs, .trash, .dedup_temp) + let dir_name = entry.file_name().to_string_lossy().to_string(); + if dir_name.starts_with('.') { + current_idx += 1; + continue; + } + let path = entry.path(); let rel_path = match path.strip_prefix(&self.root_path) { Ok(rel) => StoragePath::from(rel.to_path_buf()), diff --git a/static/js/auth.js b/static/js/auth.js index 41a437c8..79f1c2a2 100644 --- a/static/js/auth.js +++ b/static/js/auth.js @@ -68,7 +68,7 @@ const ALL_LANGUAGES = [ { code: 'fr', name: 'French', nativeName: 'Français', flag: '🇫🇷', popular: true }, { code: 'de', name: 'German', nativeName: 'Deutsch', flag: '🇩🇪', popular: true }, { code: 'pt', name: 'Portuguese', nativeName: 'Português', flag: '🇧🇷', popular: true }, - { code: 'it', name: 'Italian', nativeName: 'Italiano', flag: '🇮🇹', popular: false }, + { code: 'it', name: 'Italian', nativeName: 'Italiano', flag: '🇮🇹', popular: true }, { code: 'ru', name: 'Russian', nativeName: 'Русский', flag: '🇷🇺', popular: false }, { code: 'ja', name: 'Japanese', nativeName: '日本語', flag: '🇯🇵', popular: false }, { code: 'ko', name: 'Korean', nativeName: '한국어', flag: '🇰🇷', popular: false }, diff --git a/static/js/languageSelector.js b/static/js/languageSelector.js index 1c94a503..320cc3ac 100644 --- a/static/js/languageSelector.js +++ b/static/js/languageSelector.js @@ -16,7 +16,8 @@ function getAvailableLanguages() { { code: 'fa', name: 'فارسی', flag: '🇮🇷' }, { code: 'fr', name: 'Français', flag: '🇫🇷' }, { code: 'de', name: 'Deutsch', flag: '🇩🇪' }, - { code: 'pt', name: 'Português', flag: '🇧🇷' } + { code: 'pt', name: 'Português', flag: '🇧🇷' }, + { code: 'it', name: 'Italiano', flag: '🇮🇹' } ]; }