Beispiel #1
0
bool Downloader::downloadFiles()
{
	if(files.empty())
		return true;

	setMarquee(true);

	if(getFileSizes() == OPERATION_STOPPED)
	{
		setMarquee(false);
		return false;
	}

	if(!openInternet())
	{
		storeError();
		setMarquee(false);
		return false;
	}

	sizeTimeTimer.start(500);
	updateStatus(msg("Starting download..."));

	if(!(filesSize == FILE_SIZE_UNKNOWN))
		setMarquee(false);

    for(map<tstring, NetFile *>::iterator i = files.begin(); i != files.end(); i++)
    {
        NetFile *file = i->second;

		if(downloadCancelled)
			break;

		if(!file->downloaded)
			if(!downloadFile(file))
			{
				closeInternet();
				return false;
			}
			else
				downloadedFilesSize += file->bytesDownloaded;
    }

	closeInternet();
	return true;
}
Beispiel #2
0
bool Downloader::downloadFiles(bool useComponents)
{
    if(ownMsgLoop)
        downloadCancelled = false;

    if(files.empty() && ftpDirs.empty())
        return true;

    setMarquee(true);

    processFtpDirs();

    if(getFileSizes() == OPERATION_STOPPED)
    {
        TRACE(_T("OPERATION_STOPPED"));
        setMarquee(false);
        return false;
    }

    TRACE(_T("filesSize: %d"), (DWORD)filesSize);

    if(!openInternet())
    {
        storeError();
        setMarquee(false);
        return false;
    }

    sizeTimeTimer.start(500);
    updateStatus(msg("Starting download..."));
    TRACE(_T("Starting file download cycle..."));

    if(!(filesSize == FILE_SIZE_UNKNOWN))
        setMarquee(false);

    processMessages();

    for(map<tstring, NetFile *>::iterator i = files.begin(); i != files.end(); i++)
    {
        NetFile *file = i->second;

        if(downloadCancelled)
            break;

        if(useComponents)
            if(!file->selected(components))
                continue;

        if(!file->downloaded)
        {
            // If mirror was used in getFileSizes() function, check mirror first:
            if(file->mirrorUsed.length())
            {
                NetFile newFile(file->mirrorUsed, file->name, file->size);

                if(downloadFile(&newFile))
                {
                    file->downloaded = newFile.downloaded;
                    file->bytesDownloaded = newFile.bytesDownloaded;
                    downloadedFilesSize += file->bytesDownloaded;
                    continue;
                }
            }

            if(!downloadFile(file))
            {
                TRACE(_T("File was not downloaded."));

                if(checkMirrors(i->first, true))
                    downloadedFilesSize += file->bytesDownloaded;
                else
                {
                    if(stopOnError)
                    {
                        closeInternet();
                        return false;
                    }
                    else
                    {
                        TRACE(_T("Ignoring file %s"), file->name.c_str());
                    }
                }
            }
            else
                downloadedFilesSize += file->bytesDownloaded;
        }

        processMessages();
    }

    closeInternet();
    return filesDownloaded();
}