/*************************************************************************** * Browse subdirectories **************************************************************************/ int CustomBrowser::ParseDirectory(bool filteringList UNUSED) { gettingList = true; ResetBrowser(); std::string fulldir(browserRootDir); fulldir += browserDir; //! open the directory dir = opendir(fulldir.c_str()); if(dir == NULL) { //! if we can't open the dir, try opening the root dir browserDir.clear(); fulldir = browserRootDir; dir = opendir(fulldir.c_str()); if(dir == NULL) { gettingList = false; return -1; } } currentpath = fulldir; ParseDirEntries(); gettingList = false; return browserList.size(); }
static void * parsecallback (void *arg) { while(1) { while(ParseDirEntries()) usleep(THREAD_SLEEP); LWP_SuspendThread(parsethread); } return NULL; }
/*************************************************************************** * Browse subdirectories **************************************************************************/ int ParseDirectory(bool waitParse, bool filter) { int retry = 1; bool mounted = false; parseFilter = filter; ResetBrowser(); // reset browser // add trailing slash if(browser.dir[strlen(browser.dir)-1] != '/') strcat(browser.dir, "/"); // open the directory while(dir == NULL && retry == 1) { mounted = ChangeInterface(browser.dir, NOTSILENT); if(mounted) dir = opendir(browser.dir); else return -1; if(dir == NULL) retry = ErrorPromptRetry("Error opening directory!"); } // if we can't open the dir, try higher levels if (dir == NULL) { char * devEnd = strrchr(browser.dir, '/'); while(!IsDeviceRoot(browser.dir)) { devEnd[0] = 0; // strip slash devEnd = strrchr(browser.dir, '/'); if(devEnd == NULL) break; devEnd[1] = 0; // strip remaining file listing dir = opendir(browser.dir); if (dir) break; } } if(dir == NULL) return -1; if(IsDeviceRoot(browser.dir)) { AddBrowserEntry(); sprintf(browserList[0].filename, ".."); sprintf(browserList[0].displayname, "Up One Level"); browserList[0].length = 0; browserList[0].isdir = 1; // flag this as a dir browserList[0].icon = ICON_FOLDER; browser.numEntries++; } parseHalt = false; ParseDirEntries(); // index first 20 entries LWP_ResumeThread(parsethread); // index remaining entries if(waitParse) // wait for complete parsing { ShowAction("Loading..."); while(!LWP_ThreadIsSuspended(parsethread)) usleep(THREAD_SLEEP); CancelAction(); } return browser.numEntries; }