Hide files/dirs with hidden attribute and files/dirs starting with a period. Fixes #13, fixes #23

This commit is contained in:
Gericom
2026-03-29 09:55:45 +02:00
parent 2c142caa98
commit 7c06abf224
6 changed files with 19 additions and 11 deletions

View File

@@ -4,15 +4,15 @@
#include "FileInfo.h" #include "FileInfo.h"
FileInfo::FileInfo(const FileInfo& fileInfo) 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; u32 bufferLength = strlen(fileInfo.GetFileName()) + 1;
_name = std::make_unique_for_overwrite<TCHAR[]>(bufferLength); _name = std::make_unique_for_overwrite<TCHAR[]>(bufferLength);
StringUtil::Copy(_name.get(), fileInfo.GetFileName(), bufferLength); StringUtil::Copy(_name.get(), fileInfo.GetFileName(), bufferLength);
} }
FileInfo::FileInfo(const TCHAR* fileName, const FileType* type, const FastFileRef& fastFileRef) FileInfo::FileInfo(const TCHAR* fileName, const FileType* type, const FastFileRef& fastFileRef, u8 attributes)
: _type(type), _fastFileRef(fastFileRef) : _type(type), _fastFileRef(fastFileRef), _attributes(attributes)
{ {
u32 bufferLength = strlen(fileName) + 1; u32 bufferLength = strlen(fileName) + 1;
_name = std::make_unique_for_overwrite<TCHAR[]>(bufferLength); _name = std::make_unique_for_overwrite<TCHAR[]>(bufferLength);

View File

@@ -10,7 +10,7 @@ class FileInfo
public: public:
FileInfo() { } FileInfo() { }
FileInfo(const FileInfo& 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) FileInfo &operator=(FileInfo&& rhs)
{ {
@@ -35,8 +35,13 @@ public:
const FastFileRef& GetFastFileRef() const { return _fastFileRef; } 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: private:
std::unique_ptr<TCHAR[]> _name; std::unique_ptr<TCHAR[]> _name;
const FileType* _type; const FileType* _type;
FastFileRef _fastFileRef; FastFileRef _fastFileRef;
u8 _attributes;
}; };

View File

@@ -21,8 +21,10 @@ std::unique_ptr<const FileInfo*[]> SdFolder::FilterAndSort(
for (int i = 0; i < _fileCount; i++) for (int i = 0; i < _fileCount; i++)
{ {
const FileInfo* file = _files[i]; const FileInfo* file = _files[i];
bool isHidden = file->GetFileName()[0] == '.' || file->IsHidden();
auto classification = file->GetFileType()->GetClassification(); auto classification = file->GetFileType()->GetClassification();
if (classification != FileTypeClassification::Unknown) if (classification != FileTypeClassification::Unknown &&
(!isHidden || filterSortParams.includeHiddenFiles))
{ {
sortedFilteredFiles[filteredCount++] = file; sortedFilteredFiles[filteredCount++] = file;
} }

View File

@@ -32,7 +32,7 @@ std::unique_ptr<SdFolder> SdFolderFactory::CreateFromPath(const char* path) cons
? &FolderFileType::sInstance ? &FolderFileType::sInstance
: _fileTypeProvider->GetFileType(sdFileInfo->fname); : _fileTypeProvider->GetFileType(sdFileInfo->fname);
fileInfos[count++] = new FileInfo(sdFileInfo->fname, fileType, fileInfos[count++] = new FileInfo(sdFileInfo->fname, fileType,
FastFileRef(directory.GetFatFsDirectory(), sdFileInfo.get())); FastFileRef(directory.GetFatFsDirectory(), sdFileInfo.get()), sdFileInfo->fattrib);
} }
return std::make_unique<SdFolder>(fileInfos, count); return std::make_unique<SdFolder>(fileInfos, count);

View File

@@ -7,9 +7,10 @@ class SdFolderFilterSortParams
public: public:
SdFolderSortType sortType = SdFolderSortType::Name; SdFolderSortType sortType = SdFolderSortType::Name;
SdFolderSortDirection sortDirection = SdFolderSortDirection::Ascending; SdFolderSortDirection sortDirection = SdFolderSortDirection::Ascending;
bool includeHiddenFiles = false;
SdFolderFilterSortParams() { } SdFolderFilterSortParams() { }
SdFolderFilterSortParams(SdFolderSortType sortType, SdFolderSortDirection sortDirection) SdFolderFilterSortParams(SdFolderSortType sortType, SdFolderSortDirection sortDirection, bool includeHiddenFiles)
: sortType(sortType), sortDirection(sortDirection) { } : sortType(sortType), sortDirection(sortDirection), includeHiddenFiles(includeHiddenFiles) { }
}; };

View File

@@ -13,19 +13,19 @@ RomBrowserViewModel::RomBrowserViewModel(IRomBrowserController* romBrowserContro
default: default:
{ {
filterSortParams = SdFolderFilterSortParams( filterSortParams = SdFolderFilterSortParams(
SdFolderSortType::Name, SdFolderSortDirection::Ascending); SdFolderSortType::Name, SdFolderSortDirection::Ascending, false);
break; break;
} }
case RomBrowserSortMode::NameDescending: case RomBrowserSortMode::NameDescending:
{ {
filterSortParams = SdFolderFilterSortParams( filterSortParams = SdFolderFilterSortParams(
SdFolderSortType::Name, SdFolderSortDirection::Descending); SdFolderSortType::Name, SdFolderSortDirection::Descending, false);
break; break;
} }
case RomBrowserSortMode::LastModified: case RomBrowserSortMode::LastModified:
{ {
filterSortParams = SdFolderFilterSortParams( filterSortParams = SdFolderFilterSortParams(
SdFolderSortType::LastModified, SdFolderSortDirection::Descending); SdFolderSortType::LastModified, SdFolderSortDirection::Descending, false);
break; break;
} }
} }