diff --git a/src/BtPostDownloadHandler.cc b/src/BtPostDownloadHandler.cc index 62d56413..87d1db32 100644 --- a/src/BtPostDownloadHandler.cc +++ b/src/BtPostDownloadHandler.cc @@ -77,9 +77,12 @@ void BtPostDownloadHandler::getNextRequestGroups requestGroup->getPieceStorage()->getDiskAdaptor()->closeFile(); throw; } - createRequestGroupForBitTorrent(groups, requestGroup->getOption(), + std::deque > newRgs; + createRequestGroupForBitTorrent(newRgs, requestGroup->getOption(), std::deque(), content); + requestGroup->followedBy(newRgs.begin(), newRgs.end()); + groups.insert(groups.end(), newRgs.begin(), newRgs.end()); } } // namespace aria2 diff --git a/src/DownloadResult.h b/src/DownloadResult.h index 093154da..fb564775 100644 --- a/src/DownloadResult.h +++ b/src/DownloadResult.h @@ -65,18 +65,30 @@ public: downloadresultcode::RESULT result; + // This field contains GIDs. See comment in + // RequestGroup.cc::_followedByGIDs. + std::vector followedBy; + + // This field contains GID. See comment in + // RequestGroup.cc::_belongsToGID. + int32_t belongsTo; + DownloadResult(int32_t gid, const std::vector >& fileEntries, bool inMemoryDownload, uint64_t sessionDownloadLength, int64_t sessionTime, - downloadresultcode::RESULT result): + downloadresultcode::RESULT result, + const std::vector followedBy, + int32_t belongsTo): gid(gid), fileEntries(fileEntries), inMemoryDownload(inMemoryDownload), sessionDownloadLength(sessionDownloadLength), sessionTime(sessionTime), - result(result) {} + result(result), + followedBy(followedBy), + belongsTo(belongsTo) {} }; typedef SharedHandle DownloadResultHandle; diff --git a/src/Metalink2RequestGroup.cc b/src/Metalink2RequestGroup.cc index a43800d2..ae930749 100644 --- a/src/Metalink2RequestGroup.cc +++ b/src/Metalink2RequestGroup.cc @@ -252,6 +252,8 @@ Metalink2RequestGroup::createRequestGroup if(!torrentRg.isNull()) { SharedHandle dep(new BtDependency(rg, torrentRg)); rg->dependsOn(dep); + + torrentRg->belongsTo(rg->getGID()); } #endif // ENABLE_BITTORRENT groups.push_back(rg); diff --git a/src/MetalinkPostDownloadHandler.cc b/src/MetalinkPostDownloadHandler.cc index eda93afd..3d185f79 100644 --- a/src/MetalinkPostDownloadHandler.cc +++ b/src/MetalinkPostDownloadHandler.cc @@ -71,9 +71,11 @@ void MetalinkPostDownloadHandler::getNextRequestGroups try { diskAdaptor->openExistingFile(); //requestOption.put(PREF_DIR, requestGroup->getDownloadContext()->getDir()); - - Metalink2RequestGroup().generate(groups, diskAdaptor, + std::deque > newRgs; + Metalink2RequestGroup().generate(newRgs, diskAdaptor, requestGroup->getOption()); + requestGroup->followedBy(newRgs.begin(), newRgs.end()); + groups.insert(groups.end(), newRgs.begin(), newRgs.end()); diskAdaptor->closeFile(); } catch(Exception& e) { diskAdaptor->closeFile(); diff --git a/src/RequestGroup.cc b/src/RequestGroup.cc index 8ad06cef..e2d49d48 100644 --- a/src/RequestGroup.cc +++ b/src/RequestGroup.cc @@ -133,6 +133,7 @@ RequestGroup::RequestGroup(const SharedHandle