Update fslib for range based Directory loops.

This commit is contained in:
J-D-K 2025-08-20 12:39:29 -04:00
parent 951707b372
commit 6bc3305340
10 changed files with 51 additions and 52 deletions

BIN
JKSV.zip Normal file

Binary file not shown.

@ -1 +1 @@
Subproject commit a98a7f579e5ec78b315ad84832f708abca7ebf39
Subproject commit 6e9443be6456f109b940da33a4ee10949ff6aa0e

View File

@ -39,7 +39,7 @@ INCLUDES := include ./Libraries/FsLib/Switch/FsLib/include ./Libraries/SDLLib/SD
EXEFS_SRC := exefs_src
APP_TITLE := JKSV
APP_AUTHOR := JK
APP_VERSION := 08.18.2025
APP_VERSION := 08.19.2025
ROMFS := romfs
ICON := icon.jpg

View File

@ -30,7 +30,7 @@ namespace
/// @brief Build month.
constexpr uint8_t BUILD_MON = 8;
/// @brief Build day.
constexpr uint8_t BUILD_DAY = 18;
constexpr uint8_t BUILD_DAY = 19;
/// @brief Year.
constexpr uint16_t BUILD_YEAR = 2025;
} // namespace

View File

@ -126,11 +126,11 @@ void BackupMenuState::refresh()
}
}
const int64_t listingCount = m_directoryListing.get_count();
for (int64_t i = 0; i < listingCount; i++)
int index{};
for (const fslib::DirectoryEntry &entry : m_directoryListing)
{
sm_backupMenu->add_option(m_directoryListing[i]);
m_menuEntries.push_back({MenuEntryType::Local, static_cast<int>(i)});
sm_backupMenu->add_option(entry.get_filename());
m_menuEntries.push_back({MenuEntryType::Local, index});
}
}
@ -268,7 +268,7 @@ void BackupMenuState::confirm_overwrite()
else if (entry.type == MenuEntryType::Local)
{
m_dataStruct->path = m_directoryPath / m_directoryListing[entry.index];
const char *targetName = m_directoryListing[entry.index];
const char *targetName = m_directoryListing[entry.index].get_filename();
const std::string query = stringutil::get_formatted_string(confirmTemplate, targetName);
ProgressConfirm::create_push_fade(query, holdRequired, tasks::backup::overwrite_backup_local, m_dataStruct);
}
@ -305,8 +305,10 @@ void BackupMenuState::confirm_restore()
ui::PopMessageManager::push_message(popTicks, popBackupEmpty);
return;
}
m_dataStruct->path = target;
const std::string query = stringutil::get_formatted_string(confirmTemplate, m_directoryListing[entry.index]);
m_dataStruct->path = target;
const char *targetName = m_directoryListing[entry.index].get_filename();
const std::string query = stringutil::get_formatted_string(confirmTemplate, targetName);
ProgressConfirm::create_push_fade(query, holdRequired, tasks::backup::restore_backup_local, m_dataStruct);
}
@ -332,7 +334,7 @@ void BackupMenuState::confirm_delete()
if (entry.type == MenuEntryType::Local)
{
m_dataStruct->path = m_directoryPath / m_directoryListing[entry.index];
const char *targetName = m_directoryListing[entry.index];
const char *targetName = m_directoryListing[entry.index].get_filename();
const std::string query = stringutil::get_formatted_string(confirmTemplate, targetName);
TaskConfirm::create_and_push(query, holdRequired, tasks::backup::delete_backup_local, m_dataStruct);
@ -357,7 +359,7 @@ void BackupMenuState::upload_backup()
const MenuEntry &entry = m_menuEntries[selected];
if (entry.type != BackupMenuState::MenuEntryType::Local) { return; }
const char *targetName = m_directoryListing[entry.index];
const char *targetName = m_directoryListing[entry.index].get_filename();
fslib::Path target = m_directoryPath / targetName;
const bool isDir = fslib::directory_exists(target);
if (isDir)

View File

@ -161,19 +161,17 @@ void data::DataContext::import_svi_files(sys::Task *task)
const char *statusLoadingSvi = strings::get_by_name(strings::names::DATA_LOADING_STATUS, 3);
const fslib::Path sviPath{config::get_working_directory() / "svi"};
const fslib::Directory sviDir{sviPath};
fslib::Directory sviDir{sviPath};
if (error::fslib(sviDir.is_open())) { return; }
task->set_status(statusLoadingSvi);
const int64_t sviCount = sviDir.get_count();
for (int64_t i = 0; i < sviCount; i++)
for (const fslib::DirectoryEntry &entry : sviDir)
{
const fslib::Path target = sviPath / sviDir[i];
const fslib::Path target{sviPath / entry};
fslib::File sviFile{target, FsOpenMode_Read};
const bool goodSvi = sviFile.is_open() && sviFile.get_size() == SIZE_SVI;
if (!goodSvi) { continue; }
const bool validSvi = sviFile.is_open() && sviFile.get_size() == SIZE_SVI;
if (!validSvi) { continue; }
uint32_t magic{};
uint64_t applicationID{};

View File

@ -5,32 +5,31 @@
uint64_t fs::get_directory_total_size(const fslib::Path &targetPath)
{
fslib::Directory targetDir{targetPath};
if (!targetDir) { return 0; }
if (!targetDir.is_open()) { return 0; }
const int64_t itemCount = targetDir.get_count();
uint64_t directorySize = 0;
for (int64_t i = 0; i < itemCount; i++)
uint64_t directorySize = 0;
for (const fslib::DirectoryEntry &entry : targetDir)
{
if (targetDir.is_directory(i))
if (entry.is_directory())
{
fslib::Path newTarget = targetPath / targetDir[i];
directorySize += get_directory_total_size(newTarget);
const fslib::Path newTarget{targetPath / entry};
directorySize += fs::get_directory_total_size(newTarget);
}
else { directorySize += targetDir.get_entry_size(i); }
else { directorySize += entry.get_size(); }
}
return directorySize;
}
bool fs::directory_has_contents(const fslib::Path &directoryPath)
{
fslib::Directory testDir{directoryPath};
if (!testDir) { return false; }
if (!testDir.is_open()) { return false; }
// We don't want the save meta to throw this off.
const int64_t itemCount = testDir.get_count();
for (int64_t i = 0; i < itemCount; i++)
for (const fslib::DirectoryEntry &entry : testDir)
{
if (testDir[i] != fs::NAME_SAVE_META) { return true; }
if (entry.get_filename() != fs::NAME_SAVE_META) { return true; }
}
return false;
}

View File

@ -189,18 +189,19 @@ void fs::copy_directory(const fslib::Path &source, const fslib::Path &destinatio
fslib::Directory sourceDir{source};
if (error::fslib(sourceDir.is_open())) { return; }
const int64_t dirCount = sourceDir.get_count();
for (int64_t i = 0; i < dirCount; i++)
for (const fslib::DirectoryEntry &entry : sourceDir)
{
if (sourceDir[i] == fs::NAME_SAVE_META) { continue; }
const char *filename = entry.get_filename();
if (filename == fs::NAME_SAVE_META) { continue; }
const fslib::Path fullSource{source / sourceDir[i]};
const fslib::Path fullDest{destination / sourceDir[i]};
if (sourceDir.is_directory(i))
const fslib::Path fullSource{source / filename};
const fslib::Path fullDest{destination / filename};
if (entry.is_directory())
{
const bool destExists = fslib::directory_exists(fullDest);
const bool createError = !destExists && fslib::create_directory(fullDest);
const bool createError = !destExists && error::fslib(fslib::create_directory(fullDest));
if (!destExists && createError) { continue; }
fs::copy_directory(fullSource, fullDest, task);
}
else { fs::copy_file(fullSource, fullDest, task); }
@ -216,14 +217,14 @@ void fs::copy_directory_commit(const fslib::Path &source,
fslib::Directory sourceDir{source};
if (error::fslib(sourceDir.is_open())) { return; }
const int64_t dirCount = sourceDir.get_count();
for (int64_t i = 0; i < dirCount; i++)
for (const fslib::DirectoryEntry &entry : sourceDir)
{
if (sourceDir[i] == fs::NAME_SAVE_META) { continue; } // We don't want or need to copy this to the save.
const char *filename = entry.get_filename();
if (filename == fs::NAME_SAVE_META) { continue; }
const fslib::Path fullSource{source / sourceDir[i]};
const fslib::Path fullDest{destination / sourceDir[i]};
if (sourceDir.is_directory(i))
const fslib::Path fullSource{source / filename};
const fslib::Path fullDest{destination / filename};
if (entry.is_directory())
{
const bool destExists = fslib::directory_exists(fullDest);
const bool createError = !destExists && error::fslib(fslib::create_directory(fullDest));

View File

@ -100,11 +100,10 @@ void fs::copy_directory_to_zip(const fslib::Path &source, fs::MiniZip &dest, sys
fslib::Directory sourceDir{source};
if (error::fslib(sourceDir.is_open())) { return; }
const int64_t dirCount = sourceDir.get_count();
for (int64_t i = 0; i < dirCount; i++)
for (const fslib::DirectoryEntry &entry : sourceDir)
{
const fslib::Path fullSource{source / sourceDir[i]};
if (sourceDir.is_directory(i)) { fs::copy_directory_to_zip(fullSource, dest, task); }
const fslib::Path fullSource{source / entry};
if (entry.is_directory()) { fs::copy_directory_to_zip(fullSource, dest, task); }
else
{
fslib::File sourceFile{fullSource, FsOpenMode_Read};

View File

@ -22,9 +22,9 @@ ui::Menu::Menu(int x, int y, int width, int fontSize, int renderTargetHeight)
ui::TextScroll::create("", 16, 0, m_width, m_optionHeight, m_fontSize, colors::BLUE_GREEN, colors::TRANSPARENT))
{
// Create render target for options
static int MENU_ID = 0;
std::string menuTargetName = "MENU_" + std::to_string(MENU_ID++);
m_optionTarget = sdl::TextureManager::load(menuTargetName, m_width, m_optionHeight, SDL_TEXTUREACCESS_TARGET);
static int MENU_ID = 0;
const std::string menuTargetName = "MENU_" + std::to_string(MENU_ID++);
m_optionTarget = sdl::TextureManager::load(menuTargetName, m_width, m_optionHeight, SDL_TEXTUREACCESS_TARGET);
// Outside the initializer list because I'm tired and don't wanna deal with the headache.
m_boundingBox = ui::BoundingBox::create(0, 0, m_width + 12, m_optionHeight + 12);