SImplify some code and update code for platforms

This commit is contained in:
Wojtek Figat
2025-11-25 00:20:14 -08:00
parent 2a55cda583
commit 92254eefcc
6 changed files with 50 additions and 63 deletions

View File

@@ -79,10 +79,11 @@ namespace FlaxEngine.Interop
NativeLibrary.SetDllImportResolver(Assembly.GetExecutingAssembly(), NativeLibraryImportResolver); NativeLibrary.SetDllImportResolver(Assembly.GetExecutingAssembly(), NativeLibraryImportResolver);
// Change default culture to match with Mono runtime default culture // Change default culture to match with Mono runtime default culture
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture; var culture = CultureInfo.InvariantCulture;
CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.InvariantCulture; CultureInfo.DefaultThreadCurrentCulture = culture;
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; CultureInfo.DefaultThreadCurrentUICulture = culture;
System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; System.Threading.Thread.CurrentThread.CurrentCulture = culture;
System.Threading.Thread.CurrentThread.CurrentUICulture = culture;
} }

View File

@@ -422,24 +422,8 @@ bool AndroidFileSystem::getFilesFromDirectoryTop(Array<String>& results, const c
if (S_ISREG(statEntry.st_mode) != 0) if (S_ISREG(statEntry.st_mode) != 0)
{ {
// Validate with filter // Validate with filter
const int32 fullPathLength = StringUtils::Length(fullPath); if (FileSystem::PathFilterHelper(fullPath, searchPattern))
const int32 searchPatternLength = StringUtils::Length(searchPattern); results.Add(String(fullPath));
if (searchPatternLength == 0 || StringUtils::Compare(searchPattern, "*") == 0)
{
// All files
}
else if (searchPattern[0] == '*' && searchPatternLength < fullPathLength && StringUtils::Compare(fullPath + fullPathLength - searchPatternLength + 1, searchPattern + 1) == 0)
{
// Path ending
}
else
{
// TODO: implement all cases in a generic way
continue;
}
// Add file
results.Add(String(fullPath));
} }
} }

View File

@@ -7,6 +7,7 @@
#include "Engine/Core/Types/StringView.h" #include "Engine/Core/Types/StringView.h"
#include "Engine/Core/Collections/Array.h" #include "Engine/Core/Collections/Array.h"
#include "Engine/Core/Math/Math.h" #include "Engine/Core/Math/Math.h"
#include "Engine/Core/Log.h"
#include "Engine/Engine/Globals.h" #include "Engine/Engine/Globals.h"
bool FileSystemBase::ShowOpenFileDialog(Window* parentWindow, const StringView& initialDirectory, const StringView& filter, bool multiSelect, const StringView& title, Array<String, HeapAllocation>& filenames) bool FileSystemBase::ShowOpenFileDialog(Window* parentWindow, const StringView& initialDirectory, const StringView& filter, bool multiSelect, const StringView& title, Array<String, HeapAllocation>& filenames)
@@ -313,3 +314,39 @@ bool FileSystemBase::DirectoryCopyHelper(const String& dst, const String& src, b
return false; return false;
} }
bool FileSystemBase::PathFilterHelper(const char* path, const char* searchPattern)
{
// Validate with filter
const int32 pathLength = StringUtils::Length(path);
const int32 searchPatternLength = StringUtils::Length(searchPattern);
if (searchPatternLength == 0 ||
StringUtils::Compare(searchPattern, "*") == 0 ||
StringUtils::Compare(searchPattern, "*.*") == 0)
{
// All files
return true;
}
else if (searchPattern[0] == '*' && searchPatternLength < pathLength && StringUtils::Compare(path + pathLength - searchPatternLength + 1, searchPattern + 1, searchPatternLength - 1) == 0)
{
// Path ending
return true;
}
else if (searchPattern[0] == '*' && searchPatternLength > 2 && searchPattern[searchPatternLength - 1] == '*')
{
// Contains pattern
bool match = false;
for (int32 i = 0; i < pathLength - searchPatternLength - 1; i++)
{
int32 len = Math::Min(searchPatternLength - 2, pathLength - i);
if (StringUtils::Compare(&path[i], &searchPattern[1], len) == 0)
return true;
}
}
else
{
// TODO: implement all cases in a generic way
LOG(Warning, "DirectoryGetFiles: Wildcard filter is not implemented");
}
return false;
}

View File

@@ -284,6 +284,6 @@ public:
/// <returns>Relative path</returns> /// <returns>Relative path</returns>
static String ConvertAbsolutePathToRelative(const String& basePath, const String& path); static String ConvertAbsolutePathToRelative(const String& basePath, const String& path);
private:
static bool DirectoryCopyHelper(const String& dst, const String& src, bool withSubDirectories); static bool DirectoryCopyHelper(const String& dst, const String& src, bool withSubDirectories);
static bool PathFilterHelper(const char* path, const char* searchPattern);
}; };

View File

@@ -367,43 +367,8 @@ bool UnixFileSystem::getFilesFromDirectoryTop(Array<String>& results, const char
if (S_ISREG(statEntry.st_mode) != 0) if (S_ISREG(statEntry.st_mode) != 0)
{ {
// Validate with filter // Validate with filter
const int32 fullPathLength = StringUtils::Length(fullPath); if (FileSystem::PathFilterHelper(fullPath, searchPattern))
const int32 searchPatternLength = StringUtils::Length(searchPattern); results.Add(String(fullPath));
if (searchPatternLength == 0 ||
StringUtils::Compare(searchPattern, "*") == 0 ||
StringUtils::Compare(searchPattern, "*.*") == 0)
{
// All files
}
else if (searchPattern[0] == '*' && searchPatternLength < fullPathLength && StringUtils::Compare(fullPath + fullPathLength - searchPatternLength + 1, searchPattern + 1, searchPatternLength - 1) == 0)
{
// Path ending
}
else if (searchPattern[0] == '*' && searchPatternLength > 2 && searchPattern[searchPatternLength-1] == '*')
{
// Contains pattern
bool match = false;
for (int32 i = 0; i < pathLength - searchPatternLength - 1; i++)
{
int32 len = Math::Min(searchPatternLength - 2, pathLength - i);
if (StringUtils::Compare(&entry->d_name[i], &searchPattern[1], len) == 0)
{
match = true;
break;
}
}
if (!match)
continue;
}
else
{
// TODO: implement all cases in a generic way
LOG(Warning, "DirectoryGetFiles: Wildcard filter is not implemented");
continue;
}
// Add file
results.Add(String(fullPath));
} }
} }

View File

@@ -2155,9 +2155,9 @@ bool InitHostfxr()
#endif #endif
// Platform-specific setup // Platform-specific setup
#if PLATFORM_IOS || PLATFORM_SWITCH #if PLATFORM_IOS || PLATFORM_SWITCH || PLATFORM_PS4 || PLATFORM_PS5
setenv("MONO_AOT_MODE", "aot", 1); Platform::SetEnvironmentVariable(TEXT("MONO_AOT_MODE"), TEXT("aot"));
setenv("DOTNET_SYSTEM_GLOBALIZATION_INVARIANT", "1", 1); Platform::SetEnvironmentVariable(TEXT("DOTNET_SYSTEM_GLOBALIZATION_INVARIANT"), TEXT("1"));
#endif #endif
#ifdef USE_MONO_AOT_MODULE #ifdef USE_MONO_AOT_MODULE