diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-02-26 15:37:08 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-02-26 15:37:08 +0000 |
| commit | 2a6775e80b1a9ff1b5ccb5e65cb7e8f8d6e5adb9 (patch) | |
| tree | 1f3c74f121ba9c635b42964259838343bb68747e /src/MetalinkHelper.cc | |
| parent | 5032394c6ad8ae85b65183009afadf4e9ba5a178 (diff) | |
2010-02-27 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Supported name attribute of metalink::metaurl element and
multi-file torrent with Metalink4. Files with same metaurl are
grouped and downloaded in one RequestGroup.
* src/BtDependency.cc
* src/FileEntry.h
* src/Metalink2RequestGroup.cc
* src/Metalink2RequestGroup.h
* src/MetalinkEntry.cc
* src/MetalinkEntry.h
* src/MetalinkHelper.cc
* src/MetalinkHelper.h
* src/MetalinkMetaurl.cc
* src/MetalinkMetaurl.h
* src/MetalinkParserController.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/bittorrent_helper.cc
* test/BittorrentHelperTest.cc
* test/BtDependencyTest.cc
* test/MetalinkHelperTest.cc
Diffstat (limited to 'src/MetalinkHelper.cc')
| -rw-r--r-- | src/MetalinkHelper.cc | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/MetalinkHelper.cc b/src/MetalinkHelper.cc index c26d1d03..abfbc99a 100644 --- a/src/MetalinkHelper.cc +++ b/src/MetalinkHelper.cc @@ -41,6 +41,7 @@ #include "prefs.h" #include "DlAbortEx.h" #include "BinaryStream.h" +#include "MetalinkMetaurl.h" namespace aria2 { @@ -79,4 +80,41 @@ void MetalinkHelper::query option->get(PREF_METALINK_OS)); } +void MetalinkHelper::groupEntryByMetaurlName +(std::vector< + std::pair<std::string, std::vector<SharedHandle<MetalinkEntry> > > >& result, + const std::vector<SharedHandle<MetalinkEntry> >& entries) +{ + for(std::vector<SharedHandle<MetalinkEntry> >::const_iterator eiter = + entries.begin(); eiter != entries.end(); ++eiter) { + if((*eiter)->metaurls.empty()) { + std::pair<std::string, std::vector<SharedHandle<MetalinkEntry> > > p; + p.second.push_back(*eiter); + result.push_back(p); + } else { + std::vector< + std::pair<std::string, + std::vector<SharedHandle<MetalinkEntry> > > >::iterator i = + result.begin(); + if((*eiter)->metaurls[0]->name.empty() || + !(*eiter)->sizeKnown) { + i = result.end(); + } + for(; i != result.end(); ++i) { + if((*i).first == (*eiter)->metaurls[0]->url && + !(*i).second[0]->metaurls[0]->name.empty()) { + (*i).second.push_back(*eiter); + break; + } + } + if(i == result.end()) { + std::pair<std::string, std::vector<SharedHandle<MetalinkEntry> > > p; + p.first = (*eiter)->metaurls[0]->url; + p.second.push_back(*eiter); + result.push_back(p); + } + } + } +} + } // namespace aria2 |
