void CFileBrowser::addRecursiveDir(CFileList * re_filelist, std::string rpath, bool bRootCall, CProgressWindow * progress) { neutrino_msg_t msg; neutrino_msg_data_t data; int n; //printf("addRecursiveDir %s\n",rpath.c_str()); if (bRootCall) bCancel=false; g_RCInput->getMsg_us(&msg, &data, 1); if (msg==CRCInput::RC_home) { // home key cancel scan bCancel=true; } else if (msg!=CRCInput::RC_timeout) { // other event, save to low priority queue g_RCInput->postMsg( msg, data, false ); } if(bCancel) return; if ((m_Mode != ModeSC) && ((rpath.empty()) || ((*rpath.rbegin()) != '/'))) { rpath += '/'; } CFileList tmplist; if(!readDir(rpath, &tmplist)) { perror(("Recursive scandir: "+rpath).c_str()); } else { n = tmplist.size(); if(progress) { progress->showStatusMessageUTF(FILESYSTEM_ENCODING_TO_UTF8_STRING(rpath)); } for(int i = 0; i < n;i++) { if(progress) { progress->showGlobalStatus(100/n*i); } std::string basename = tmplist[i].Name.substr(tmplist[i].Name.rfind('/')+1); if( basename != ".." ) { if(Filter != NULL && (!S_ISDIR(tmplist[i].Mode)) && use_filter) { if(!Filter->matchFilter(tmplist[i].Name)) { continue; } } if(!S_ISDIR(tmplist[i].Mode)) re_filelist->push_back(tmplist[i]); else addRecursiveDir(re_filelist,tmplist[i].Name, false, progress); } } } }
void CFileBrowser::addRecursiveDir(CFileList * re_filelist, std::string rpath, bool bRootCall) { neutrino_msg_t msg; neutrino_msg_data_t data; int n; dprintf(DEBUG_INFO, "CFileBrowser::addRecursiveDir %s\n", rpath.c_str()); if (bRootCall) bCancel = false; g_RCInput->getMsg_us(&msg, &data, 1); if (msg == CRCInput::RC_home) { // home key cancel scan bCancel = true; } else if (msg != CRCInput::RC_timeout) { // other event, save to low priority queue g_RCInput->postMsg( msg, data, false ); } if(bCancel) return; if ( ((rpath.empty()) || ((*rpath.rbegin()) != '/'))) { rpath += '/'; } CFileList tmplist; if(!readDir(rpath, &tmplist)) { perror(("Recursive scandir: " + rpath).c_str()); } else { n = tmplist.size(); for(int i = 0; i < n;i++) { std::string basename = tmplist[i].Name.substr(tmplist[i].Name.rfind('/')+1); if( basename != ".." ) { if(Filter != NULL && (!S_ISDIR(tmplist[i].Mode)) && use_filter) { if(!Filter->matchFilter(tmplist[i].Name)) { continue; } } if(!S_ISDIR(tmplist[i].Mode)) re_filelist->push_back(tmplist[i]); else addRecursiveDir(re_filelist,tmplist[i].Name, false); } } } }