Example #1
0
bool CRapidDownloader::download_name(IDownload* download, int reccounter,
				     std::string name)
{
	LOG_DEBUG("%s %s", name.c_str(), download->name.c_str());
	if (reccounter > 10)
		return false;
	LOG_DEBUG("Using rapid to download %s", download->name.c_str());
	std::set<std::string> downloaded;

	for (CSdp& sdp : sdps) {
		if (!match_download_name(sdp.getName(),
					 name.empty() ? download->name : name))
			continue;

		if (downloaded.find(sdp.getMD5()) !=
		    downloaded.end()) // already downloaded, skip (i.e. stable entries are
				      // twice in versions.gz)
			continue;
		downloaded.insert(sdp.getMD5());

		LOG_INFO ("[Download] %s", sdp.getName().c_str());

		if (!sdp.download(download)) {
			return false;
		}
		if (sdp.getDepends().empty())
			continue;
		if (!download_name(download, reccounter + 1, sdp.getDepends())) {
			return false;
		}
	}
	return true;
}
Example #2
0
bool CRapidDownloader::download(IDownload* download, int /*max_parallel*/)
{
	LOG_DEBUG("%s", download->name.c_str());
	if (download->dltype != IDownload::TYP_RAPID) { // skip non-rapid downloads
		LOG_DEBUG("skipping non rapid-dl");
		return true;
	}
	updateRepos(download->origin_name);
	return download_name(download, 0);
}
/**
	download by name, for example "Complete Annihilation revision 1234"
*/
bool CRapidDownloader::download_name(const std::string& longname, int reccounter){
	DEBUG_LINE("%s",longname.c_str());
	std::list<CSdp*>::iterator it;
	if (reccounter>10)
		return false;
	for (it=sdps.begin();it!=sdps.end();++it){
		if (match_download_name((*it)->getName(),longname)){
			printf("Found Depends, downloading %s\n", (*it)->getName().c_str());
			if (!(*it)->download())
				return false;
			if ((*it)->getDepends().length()>0){
				if (!download_name((*it)->getDepends(),reccounter+1))
					return false;
			}
			return true;
		}
	}
	return false;
}
bool CRapidDownloader::download_name(const std::string& longname, int reccounter)
{
	LOG_DEBUG("%s",longname.c_str());
	std::list<CSdp>::iterator it;
	if (reccounter>10)
		return false;
	LOG_DEBUG("Using rapid");
	for (it=sdps.begin(); it!=sdps.end(); ++it) {
		if (match_download_name((*it).getName(),longname)) {

			LOG_DOWNLOAD((it)->getName().c_str() );
			if (!(*it).download())
				return false;
			if ((*it).getDepends().length()>0) {
				if (!download_name((*it).getDepends(),reccounter+1))
					return false;
			}
			return true;
		}
	}
	return false;
}
bool CRapidDownloader::download_name(IDownload* download, int reccounter,std::string name)
{
	LOG_DEBUG("%s %s",name.c_str(),download->name.c_str());
	std::list<CSdp>::iterator it;
	if (reccounter>10)
		return false;
	LOG_DEBUG("Using rapid");
	for (it=sdps.begin(); it!=sdps.end(); ++it) {
		if (match_download_name((*it).getName(),name.length() == 0 ? download->name : name )) {

			LOG_DOWNLOAD((it)->getName().c_str() );
			if (!(*it).download(download))
				return false;
			if ((*it).getDepends().length()>0) {
				if (!download_name(download,reccounter+1,(*it).getDepends()))
					return false;
			}
			return true;
		}
	}
	return false;
}
bool CRapidDownloader::download(IDownload* download)
{
	LOG_DEBUG("%s",download->name.c_str());
	reloadRepos();
	return download_name(download->name,0);
}
/**
	start a download
*/
bool CRapidDownloader::download(IDownload& download){
	DEBUG_LINE("%s",download.name.c_str());
	reloadRepos();
	return download_name(download.name,0);
}