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; }
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); }