diff --git a/Marlin/src/lcd/extensible_ui/ui_api.cpp b/Marlin/src/lcd/extensible_ui/ui_api.cpp index 7b166250a8..4f9f075d83 100644 --- a/Marlin/src/lcd/extensible_ui/ui_api.cpp +++ b/Marlin/src/lcd/extensible_ui/ui_api.cpp @@ -975,8 +975,7 @@ namespace ExtUI { bool FileList::isAtRootDir() { #if ENABLED(SDSUPPORT) - card.getWorkDirName(); - return card.filename[0] == '/'; + card.flag.workDirIsRoot; #else return true; #endif diff --git a/Marlin/src/lcd/menu/menu_media.cpp b/Marlin/src/lcd/menu/menu_media.cpp index cb83807fb6..c909606f6a 100644 --- a/Marlin/src/lcd/menu/menu_media.cpp +++ b/Marlin/src/lcd/menu/menu_media.cpp @@ -127,21 +127,14 @@ void menu_media() { #if HAS_GRAPHICAL_LCD static uint16_t fileCnt; - static bool at_root; - if (ui.first_page) { - fileCnt = card.get_num_Files(); - card.getWorkDirName(); - at_root = card.filename[0] == '/'; - } + if (ui.first_page) fileCnt = card.get_num_Files(); #else const uint16_t fileCnt = card.get_num_Files(); - card.getWorkDirName(); - const bool at_root = card.filename[0] == '/'; #endif START_MENU(); MENU_BACK(MSG_MAIN); - if (at_root) { + if (card.flag.workDirIsRoot) { #if !PIN_EXISTS(SD_DETECT) MENU_ITEM(function, LCD_STR_REFRESH MSG_REFRESH, lcd_sd_refresh); #endif diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index 77bc84d594..41cc167394 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -629,7 +629,7 @@ void CardReader::getfilename(uint16_t nr, const char * const match/*=nullptr*/) lsDive(nullptr, workDir, match); } -uint16_t CardReader::getnrfilenames() { +uint16_t CardReader::countFilesInWorkDir() { lsAction = LS_Count; nrFiles = 0; workDir.rewind(); @@ -707,6 +707,7 @@ void CardReader::chdir(const char * relpath) { if (newDir.open(parent, relpath, O_READ)) { workDir = newDir; + flag.workDirIsRoot = false; if (workDirDepth < MAX_DIR_DEPTH) workDirParents[workDirDepth++] = workDir; #if ENABLED(SDCARD_SORT_ALPHA) @@ -726,14 +727,13 @@ int8_t CardReader::updir() { presort(); #endif } + if (!workDirDepth) flag.workDirIsRoot = true; return workDirDepth; } void CardReader::setroot() { - /*if (!workDir.openRoot(&volume)) { - SERIAL_ECHOLNPGM(MSG_SD_WORKDIR_FAIL); - }*/ workDir = root; + flag.workDirIsRoot = true; #if ENABLED(SDCARD_SORT_ALPHA) presort(); #endif @@ -801,7 +801,7 @@ void CardReader::setroot() { #endif // If there are files, sort up to the limit - uint16_t fileCnt = getnrfilenames(); + uint16_t fileCnt = countFilesInWorkDir(); if (fileCnt > 0) { // Never sort more than the max allowed @@ -981,7 +981,7 @@ uint16_t CardReader::get_num_Files() { #if ENABLED(SDCARD_SORT_ALPHA) && SDSORT_USES_RAM && SDSORT_CACHE_NAMES nrFiles // no need to access the SD card for filenames #else - getnrfilenames() + countFilesInWorkDir() #endif ; } diff --git a/Marlin/src/sd/cardreader.h b/Marlin/src/sd/cardreader.h index 94e2a9821c..38b6004e83 100644 --- a/Marlin/src/sd/cardreader.h +++ b/Marlin/src/sd/cardreader.h @@ -41,6 +41,7 @@ typedef struct { sdprinting:1, mounted:1, filenameIsDir:1, + workDirIsRoot:1, abort_sd_printing:1 #if ENABLED(BINARY_FILE_TRANSFER) , binary_mode:1 @@ -79,7 +80,7 @@ public: #endif static void getfilename(uint16_t nr, const char* const match=nullptr); - static uint16_t getnrfilenames(); + static uint16_t countFilesInWorkDir(); static void getAbsFilename(char *t);