From 7c06abf224fbf48da7c6c436f62f5cf43f4179ed Mon Sep 17 00:00:00 2001 From: Gericom Date: Sun, 29 Mar 2026 09:55:45 +0200 Subject: [PATCH] Hide files/dirs with hidden attribute and files/dirs starting with a period. Fixes #13, fixes #23 --- arm9/source/romBrowser/FileInfo.cpp | 6 +++--- arm9/source/romBrowser/FileInfo.h | 7 ++++++- arm9/source/romBrowser/SdFolder.cpp | 4 +++- arm9/source/romBrowser/SdFolderFactory.cpp | 2 +- arm9/source/romBrowser/SdFolderFilterSortParams.h | 5 +++-- arm9/source/romBrowser/viewModels/RomBrowserViewModel.cpp | 6 +++--- 6 files changed, 19 insertions(+), 11 deletions(-) diff --git a/arm9/source/romBrowser/FileInfo.cpp b/arm9/source/romBrowser/FileInfo.cpp index 02b5bca..434764f 100644 --- a/arm9/source/romBrowser/FileInfo.cpp +++ b/arm9/source/romBrowser/FileInfo.cpp @@ -4,15 +4,15 @@ #include "FileInfo.h" FileInfo::FileInfo(const FileInfo& fileInfo) - : _type(fileInfo._type), _fastFileRef(fileInfo._fastFileRef) + : _type(fileInfo._type), _fastFileRef(fileInfo._fastFileRef), _attributes(fileInfo._attributes) { u32 bufferLength = strlen(fileInfo.GetFileName()) + 1; _name = std::make_unique_for_overwrite(bufferLength); StringUtil::Copy(_name.get(), fileInfo.GetFileName(), bufferLength); } -FileInfo::FileInfo(const TCHAR* fileName, const FileType* type, const FastFileRef& fastFileRef) - : _type(type), _fastFileRef(fastFileRef) +FileInfo::FileInfo(const TCHAR* fileName, const FileType* type, const FastFileRef& fastFileRef, u8 attributes) + : _type(type), _fastFileRef(fastFileRef), _attributes(attributes) { u32 bufferLength = strlen(fileName) + 1; _name = std::make_unique_for_overwrite(bufferLength); diff --git a/arm9/source/romBrowser/FileInfo.h b/arm9/source/romBrowser/FileInfo.h index 47e2214..1edc817 100644 --- a/arm9/source/romBrowser/FileInfo.h +++ b/arm9/source/romBrowser/FileInfo.h @@ -10,7 +10,7 @@ class FileInfo public: FileInfo() { } FileInfo(const FileInfo& fileInfo); - FileInfo(const TCHAR* fileName, const FileType* type, const FastFileRef& fastFileRef); + FileInfo(const TCHAR* fileName, const FileType* type, const FastFileRef& fastFileRef, u8 attributes); FileInfo &operator=(FileInfo&& rhs) { @@ -35,8 +35,13 @@ public: const FastFileRef& GetFastFileRef() const { return _fastFileRef; } + bool IsReadOnly() const { return _attributes & AM_RDO; } + bool IsHidden() const { return _attributes & AM_HID; } + bool IsSystem() const { return _attributes & AM_SYS; } + private: std::unique_ptr _name; const FileType* _type; FastFileRef _fastFileRef; + u8 _attributes; }; diff --git a/arm9/source/romBrowser/SdFolder.cpp b/arm9/source/romBrowser/SdFolder.cpp index 213ccd8..a52dca1 100644 --- a/arm9/source/romBrowser/SdFolder.cpp +++ b/arm9/source/romBrowser/SdFolder.cpp @@ -21,8 +21,10 @@ std::unique_ptr SdFolder::FilterAndSort( for (int i = 0; i < _fileCount; i++) { const FileInfo* file = _files[i]; + bool isHidden = file->GetFileName()[0] == '.' || file->IsHidden(); auto classification = file->GetFileType()->GetClassification(); - if (classification != FileTypeClassification::Unknown) + if (classification != FileTypeClassification::Unknown && + (!isHidden || filterSortParams.includeHiddenFiles)) { sortedFilteredFiles[filteredCount++] = file; } diff --git a/arm9/source/romBrowser/SdFolderFactory.cpp b/arm9/source/romBrowser/SdFolderFactory.cpp index bf3f9ff..22b4992 100644 --- a/arm9/source/romBrowser/SdFolderFactory.cpp +++ b/arm9/source/romBrowser/SdFolderFactory.cpp @@ -32,7 +32,7 @@ std::unique_ptr SdFolderFactory::CreateFromPath(const char* path) cons ? &FolderFileType::sInstance : _fileTypeProvider->GetFileType(sdFileInfo->fname); fileInfos[count++] = new FileInfo(sdFileInfo->fname, fileType, - FastFileRef(directory.GetFatFsDirectory(), sdFileInfo.get())); + FastFileRef(directory.GetFatFsDirectory(), sdFileInfo.get()), sdFileInfo->fattrib); } return std::make_unique(fileInfos, count); diff --git a/arm9/source/romBrowser/SdFolderFilterSortParams.h b/arm9/source/romBrowser/SdFolderFilterSortParams.h index f7e0fb0..6b6074b 100644 --- a/arm9/source/romBrowser/SdFolderFilterSortParams.h +++ b/arm9/source/romBrowser/SdFolderFilterSortParams.h @@ -7,9 +7,10 @@ class SdFolderFilterSortParams public: SdFolderSortType sortType = SdFolderSortType::Name; SdFolderSortDirection sortDirection = SdFolderSortDirection::Ascending; + bool includeHiddenFiles = false; SdFolderFilterSortParams() { } - SdFolderFilterSortParams(SdFolderSortType sortType, SdFolderSortDirection sortDirection) - : sortType(sortType), sortDirection(sortDirection) { } + SdFolderFilterSortParams(SdFolderSortType sortType, SdFolderSortDirection sortDirection, bool includeHiddenFiles) + : sortType(sortType), sortDirection(sortDirection), includeHiddenFiles(includeHiddenFiles) { } }; diff --git a/arm9/source/romBrowser/viewModels/RomBrowserViewModel.cpp b/arm9/source/romBrowser/viewModels/RomBrowserViewModel.cpp index 975ed08..9412adb 100644 --- a/arm9/source/romBrowser/viewModels/RomBrowserViewModel.cpp +++ b/arm9/source/romBrowser/viewModels/RomBrowserViewModel.cpp @@ -13,19 +13,19 @@ RomBrowserViewModel::RomBrowserViewModel(IRomBrowserController* romBrowserContro default: { filterSortParams = SdFolderFilterSortParams( - SdFolderSortType::Name, SdFolderSortDirection::Ascending); + SdFolderSortType::Name, SdFolderSortDirection::Ascending, false); break; } case RomBrowserSortMode::NameDescending: { filterSortParams = SdFolderFilterSortParams( - SdFolderSortType::Name, SdFolderSortDirection::Descending); + SdFolderSortType::Name, SdFolderSortDirection::Descending, false); break; } case RomBrowserSortMode::LastModified: { filterSortParams = SdFolderFilterSortParams( - SdFolderSortType::LastModified, SdFolderSortDirection::Descending); + SdFolderSortType::LastModified, SdFolderSortDirection::Descending, false); break; } }