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;
			}
		}
	}
}
Esempio n. 2
0
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;
		}
	}
}
Esempio n. 6
0
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);
}