void FileChunkWalker::findNextFile() { for ( int i=0; i<numIrrelevantPerFind_; i++ ) { this->advanceFileHandle(); if (fileHandle_ != INVALID_HANDLE_VALUE) { if ( searchingFiles_ ) { if ( this->isRelevant( findFileData_ ) ) { int16 x,z; if (::gridFromThumbnailFileName((unsigned char*)&findFileData_.cFileName[0],x,z)) { xs_.push_back( x ); zs_.push_back( z ); } return; } } else { if ( isValidFolder( findFileData_ ) ) { folders_.push_back( folder_ + std::string(findFileData_.cFileName) + "/sep/" ); } return; } } } }
int FindFiles::openFolder(bool includeSubFolders, bool skipSystemFolders) { char searchPattern[MAX_PATH]; strcpy(searchPattern, m_currentFolder); strcat(searchPattern, "*"); SetLastError(0); m_h = FindFirstFileA(searchPattern, &fd); int e = GetLastError(); if (e != ERROR_SUCCESS) { FindClose(m_h); m_insearch = false; return e; } bool keep_looking = true; do { if (isValidFolder(skipSystemFolders)) { if (includeSubFolders) storeFolder(); keep_looking = false; } else if (isValidFile()) { keep_looking = false; } else { FindNextFileA(m_h, &fd); e = GetLastError(); } } while (keep_looking && e == ERROR_SUCCESS); return e; } //int FindFiles::openFolder(WIN32_FIND_DATAA& fd, bool recursive)
NS_IMETHODIMP FileSystemDataSource::HasArcOut(nsIRDFResource *aSource, nsIRDFResource *aArc, bool *result) { *result = false; if (aSource == mNC_FileSystemRoot) { *result = (aArc == mNC_Child || aArc == mNC_pulse); } else if (isFileURI(aSource)) { if (aArc == mNC_pulse) { *result = true; } else if (isDirURI(aSource)) { #ifdef XP_WIN *result = isValidFolder(aSource); #else *result = true; #endif } else if (aArc == mNC_pulse || aArc == mNC_Name || aArc == mNC_Icon || aArc == mNC_URL || aArc == mNC_Length || aArc == mWEB_LastMod || aArc == mNC_FileSystemObject || aArc == mRDF_InstanceOf || aArc == mRDF_type) { *result = true; } } return NS_OK; }
NS_IMETHODIMP FileSystemDataSource::ArcLabelsOut(nsIRDFResource *source, nsISimpleEnumerator **labels /* out */) { NS_PRECONDITION(source != nullptr, "null ptr"); if (! source) return NS_ERROR_NULL_POINTER; NS_PRECONDITION(labels != nullptr, "null ptr"); if (! labels) return NS_ERROR_NULL_POINTER; if (source == mNC_FileSystemRoot) { nsCOMArray<nsIRDFResource> resources; resources.SetCapacity(2); resources.AppendObject(mNC_Child); resources.AppendObject(mNC_pulse); return NS_NewArrayEnumerator(labels, resources); } else if (isFileURI(source)) { nsCOMArray<nsIRDFResource> resources; resources.SetCapacity(2); if (isDirURI(source)) { #ifdef XP_WIN if (isValidFolder(source)) { resources.AppendObject(mNC_Child); } #else resources.AppendObject(mNC_Child); #endif resources.AppendObject(mNC_pulse); } return NS_NewArrayEnumerator(labels, resources); } return NS_NewEmptyEnumerator(labels); }
/** * This method adds all of the folders contained in the given * directory to the folders_ vector. */ void FileChunkWalker::findFolders( const std::string& folder ) { //Now add all sub-folders to our list of folders to search. std::string fullName = root_ + folder + "*."; fileHandle_ = FindFirstFile( fullName.c_str(), &findFileData_ ); while (fileHandle_ != INVALID_HANDLE_VALUE) { if ( isValidFolder( findFileData_ ) ) { folders_.push_back( folder + std::string(findFileData_.cFileName) + "/" ); } if ( !FindNextFile(fileHandle_,&findFileData_) ) { this->releaseFileHandle(); break; } } }
bool FindFiles::FindItem(bool includeSubFolders, bool skipSystemFolders) { if (m_insearch) { FindNextFileA(m_h, &fd); if (GetLastError() == ERROR_SUCCESS) { if (isValidFolder(skipSystemFolders)) { storeFolder(); } return true; } else { FindClose(m_h); m_h = 0; } while (folders.size()>0) { strcpy(m_currentFolder, folders.front()); folders.pop_front(); if (openFolder(includeSubFolders, skipSystemFolders) == 0) return true; } // NO_MORE_FILES; m_insearch = false; if (m_h) FindClose(m_h); return false; } else { m_insearch = true; strcpy(m_currentFolder, m_root); return openFolder(includeSubFolders, skipSystemFolders) == 0; } } // void FindFiles::SetRoot(const char* root)
nsresult FileSystemDataSource::getIEFavoriteURL(nsIRDFResource *source, nsString aFileURL, nsIRDFLiteral **urlLiteral) { nsresult rv = NS_OK; *urlLiteral = nullptr; nsCOMPtr<nsIFile> f; NS_GetFileFromURLSpec(NS_ConvertUTF16toUTF8(aFileURL), getter_AddRefs(f)); bool value; if (NS_SUCCEEDED(f->IsDirectory(&value)) && value) { if (isValidFolder(source)) return(NS_RDF_NO_VALUE); aFileURL.AppendLiteral("desktop.ini"); } else if (aFileURL.Length() > 4) { nsAutoString extension; aFileURL.Right(extension, 4); if (!extension.LowerCaseEqualsLiteral(".url")) { return(NS_RDF_NO_VALUE); } } nsCOMPtr<nsIInputStream> strm; NS_NewLocalFileInputStream(getter_AddRefs(strm),f); nsCOMPtr<nsILineInputStream> linereader = do_QueryInterface(strm, &rv); nsAutoString line; nsAutoCString cLine; while(NS_SUCCEEDED(rv)) { bool isEOF; rv = linereader->ReadLine(cLine, &isEOF); CopyASCIItoUTF16(cLine, line); if (isEOF) { if (line.Find("URL=", true) == 0) { line.Cut(0, 4); rv = mRDFService->GetLiteral(line.get(), urlLiteral); break; } else if (line.Find("CDFURL=", true) == 0) { line.Cut(0, 7); rv = mRDFService->GetLiteral(line.get(), urlLiteral); break; } line.Truncate(); } } return(rv); }