mirror of
https://github.com/aria2/aria2.git
synced 2024-11-27 16:10:30 +00:00
Update libaria2ex.cc to use latest API
This commit is contained in:
parent
a4b29ac2f7
commit
f3876ad9ab
@ -43,33 +43,45 @@
|
||||
int downloadEventCallback(aria2::Session* session, aria2::DownloadEvent event,
|
||||
const aria2::A2Gid& gid, void* userData)
|
||||
{
|
||||
std::cout << "Download Event: ";
|
||||
switch(event) {
|
||||
case aria2::EVENT_ON_DOWNLOAD_START:
|
||||
std::cout << "START";
|
||||
break;
|
||||
case aria2::EVENT_ON_DOWNLOAD_PAUSE:
|
||||
std::cout << "PAUSE";
|
||||
break;
|
||||
case aria2::EVENT_ON_DOWNLOAD_STOP:
|
||||
std::cout << "STOP";
|
||||
break;
|
||||
case aria2::EVENT_ON_DOWNLOAD_COMPLETE:
|
||||
std::cout << "COMPLETE";
|
||||
std::cerr << "COMPLETE";
|
||||
break;
|
||||
case aria2::EVENT_ON_DOWNLOAD_ERROR:
|
||||
std::cout << "ERROR";
|
||||
break;
|
||||
case aria2::EVENT_ON_BT_DOWNLOAD_COMPLETE:
|
||||
std::cout << "COMPLETE";
|
||||
std::cerr << "ERROR";
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
std::cout << " for [" << aria2::gidToHex(gid) << "]" << std::endl;
|
||||
std::cerr << " [" << aria2::gidToHex(gid) << "] ";
|
||||
aria2::DownloadHandle* dh = aria2::getDownloadHandle(session, gid);
|
||||
if(!dh) return 0;
|
||||
if(dh->getNumFiles() > 0) {
|
||||
aria2::FileData f = dh->getFile(1);
|
||||
// Path may be empty if the file name has not been determined yet.
|
||||
if(f.path.empty()) {
|
||||
if(!f.uris.empty()) {
|
||||
std::cerr << f.uris[0].uri;
|
||||
}
|
||||
} else {
|
||||
std::cerr << f.path;
|
||||
}
|
||||
}
|
||||
aria2::deleteDownloadHandle(dh);
|
||||
std::cerr << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main()
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
int rv;
|
||||
if(argc < 2) {
|
||||
std::cerr << "Usage: libaria2ex URI [URI...]\n"
|
||||
<< "\n"
|
||||
<< " Download given URIs in parallel in the current directory."
|
||||
<< std::endl;
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
aria2::libraryInit();
|
||||
// session is actually singleton: 1 session per process
|
||||
aria2::Session* session;
|
||||
@ -78,16 +90,18 @@ int main()
|
||||
// Add event callback
|
||||
config.downloadEventCallback = downloadEventCallback;
|
||||
session = aria2::sessionNew(aria2::KeyVals(), config);
|
||||
std::vector<std::string> uris = {
|
||||
"http://localhost/"
|
||||
};
|
||||
// Download files are stored in the current directory
|
||||
aria2::KeyVals options = { std::make_pair("dir", ".") };
|
||||
// Add URI
|
||||
aria2::addUri(session, 0, uris, options);
|
||||
// Add download item to session
|
||||
for(int i = 1; i < argc; ++i) {
|
||||
std::vector<std::string> uris = {argv[i]};
|
||||
aria2::KeyVals options;
|
||||
rv = aria2::addUri(session, 0, uris, options);
|
||||
if(rv < 0) {
|
||||
std::cerr << "Failed to add download " << uris[0] << std::endl;
|
||||
}
|
||||
}
|
||||
auto start = std::chrono::steady_clock::now();
|
||||
for(;;) {
|
||||
int rv = aria2::run(session, aria2::RUN_ONCE);
|
||||
rv = aria2::run(session, aria2::RUN_ONCE);
|
||||
if(rv != 1) {
|
||||
break;
|
||||
}
|
||||
@ -96,16 +110,25 @@ int main()
|
||||
auto now = std::chrono::steady_clock::now();
|
||||
auto count = std::chrono::duration_cast<std::chrono::milliseconds>
|
||||
(now - start).count();
|
||||
// Print progress information once per 500ms
|
||||
if(count >= 500) {
|
||||
start = now;
|
||||
aria2::GlobalStat gstat = aria2::getGlobalStat(session);
|
||||
std::cerr << "Overall #Active:" << gstat.numActive
|
||||
<< " #waiting:" << gstat.numWaiting
|
||||
<< " D:" << gstat.downloadSpeed/1024 << "KiB/s"
|
||||
<< " U:"<< gstat.uploadSpeed/1024 << "KiB/s " << std::endl;
|
||||
std::vector<aria2::A2Gid> gids = aria2::getActiveDownload(session);
|
||||
std::cout << "== Active Download(s) ==" << std::endl;
|
||||
for(auto gid : gids) {
|
||||
for(const auto& gid : gids) {
|
||||
aria2::DownloadHandle* dh = aria2::getDownloadHandle(session, gid);
|
||||
if(dh) {
|
||||
std::cout << "[" << aria2::gidToHex(gid) << "] "
|
||||
std::cerr << " [" << aria2::gidToHex(gid) << "] "
|
||||
<< dh->getCompletedLength() << "/"
|
||||
<< dh->getTotalLength() << " D:"
|
||||
<< dh->getTotalLength() << "("
|
||||
<< (dh->getTotalLength() > 0 ?
|
||||
(100*dh->getCompletedLength()/dh->getTotalLength())
|
||||
: 0) << "%)"
|
||||
<< " D:"
|
||||
<< dh->getDownloadSpeed()/1024 << "KiB/s, U:"
|
||||
<< dh->getUploadSpeed()/1024 << "KiB/s"
|
||||
<< std::endl;
|
||||
@ -114,7 +137,7 @@ int main()
|
||||
}
|
||||
}
|
||||
}
|
||||
int rv = aria2::sessionFinal(session);
|
||||
rv = aria2::sessionFinal(session);
|
||||
aria2::libraryDeinit();
|
||||
return rv;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user