Add root flag to CardReader (#15275)

This commit is contained in:
Robby Candra 2019-09-17 05:49:55 +07:00 committed by Scott Lahteine
parent eb1a368277
commit 98233b1de0
4 changed files with 11 additions and 18 deletions

View File

@ -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

View File

@ -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

View File

@ -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
;
}

View File

@ -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);