SD Card Alpha Sorting

First iteration of alphabetical sorting for SD cards, both
slow+efficient and fast+rammy. Option for folders to sort first, last,
or not at all.
This commit is contained in:
Scott Lahteine 2014-11-24 14:03:20 -08:00
parent cf749dbeda
commit 8196b36ad9
2 changed files with 22 additions and 3 deletions

View File

@ -54,7 +54,7 @@ void CardReader::lsDive(const char *prepend,SdFile parent)
dir_t p; dir_t p;
uint8_t cnt=0; uint8_t cnt=0;
while (parent.readDir(p, longFilename) > 0) while (parent.readDir(p, diveFilename) > 0)
{ {
if( DIR_IS_SUBDIR(&p) && lsAction!=LS_Count && lsAction!=LS_GetFilename) // hence LS_SerialPrint if( DIR_IS_SUBDIR(&p) && lsAction!=LS_Count && lsAction!=LS_GetFilename) // hence LS_SerialPrint
{ {
@ -91,8 +91,8 @@ void CardReader::lsDive(const char *prepend,SdFile parent)
{ {
if (p.name[0] == DIR_NAME_FREE) break; if (p.name[0] == DIR_NAME_FREE) break;
if (p.name[0] == DIR_NAME_DELETED || p.name[0] == '.'|| p.name[0] == '_') continue; if (p.name[0] == DIR_NAME_DELETED || p.name[0] == '.'|| p.name[0] == '_') continue;
if (longFilename[0] != '\0' && if (diveFilename[0] != '\0' &&
(longFilename[0] == '.' || longFilename[0] == '_')) continue; (diveFilename[0] == '.' || diveFilename[0] == '_')) continue;
if ( p.name[0] == '.') if ( p.name[0] == '.')
{ {
if ( p.name[1] != '.') if ( p.name[1] != '.')

View File

@ -46,7 +46,11 @@ public:
#ifdef SDCARD_SORT_ALPHA #ifdef SDCARD_SORT_ALPHA
void presort(); void presort();
void flush_presort(); void flush_presort();
<<<<<<< HEAD
void getfilename_sorted(const uint16_t nr); void getfilename_sorted(const uint16_t nr);
=======
void getfilename_sorted(const uint8_t nr);
>>>>>>> SD Card Alpha Sorting
#endif #endif
@ -60,22 +64,37 @@ public:
public: public:
bool saving; bool saving;
bool logging; bool logging;
<<<<<<< HEAD
bool sdprinting; bool sdprinting;
bool cardOK; bool cardOK;
char filename[FILENAME_LENGTH]; char filename[FILENAME_LENGTH];
char longFilename[LONG_FILENAME_LENGTH]; char longFilename[LONG_FILENAME_LENGTH];
=======
bool sdprinting ;
bool cardOK;
char filename[FILENAME_LENGTH];
char diveFilename[LONG_FILENAME_LENGTH];
>>>>>>> SD Card Alpha Sorting
bool filenameIsDir; bool filenameIsDir;
int lastnr; //last number of the autostart; int lastnr; //last number of the autostart;
private: private:
SdFile root,*curDir,workDir,workDirParents[MAX_DIR_DEPTH]; SdFile root,*curDir,workDir,workDirParents[MAX_DIR_DEPTH];
uint16_t workDirDepth; uint16_t workDirDepth;
#ifdef SDCARD_SORT_ALPHA #ifdef SDCARD_SORT_ALPHA
<<<<<<< HEAD
uint16_t sort_count; uint16_t sort_count;
uint8_t *sort_order; uint8_t *sort_order;
#if SORT_USES_MORE_RAM #if SORT_USES_MORE_RAM
char **sortshort; char **sortshort;
char **sortnames; char **sortnames;
uint8_t *isDir; uint8_t *isDir;
=======
#if SORT_USES_MORE_RAM
uint16_t sort_count;
char **sortnames;
#else
uint8_t sort_order[SORT_LIMIT];
>>>>>>> SD Card Alpha Sorting
#endif #endif
#endif #endif
Sd2Card card; Sd2Card card;