diff --git a/ChangeLog b/ChangeLog index 1fc22e94..90e79619 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-12-20 Tatsuhiro Tsujikawa + + Print the contents of Torrent/Metalink files are printed without + -T/-M options. + * src/main.cc + 2008-12-17 Tatsuhiro Tsujikawa Escaped '--' with '\--' diff --git a/src/main.cc b/src/main.cc index 714db62d..fa480ff9 100644 --- a/src/main.cc +++ b/src/main.cc @@ -66,6 +66,7 @@ #include "NullStatCalc.h" #include "download_helper.h" #include "Exception.h" +#include "ProtocolDetector.h" #ifdef ENABLE_METALINK # include "MetalinkHelper.h" # include "MetalinkEntry.h" @@ -102,6 +103,41 @@ std::ostream& getSummaryOut(const Option* op) } } +static void showTorrentFile(const std::string& uri) +{ + SharedHandle btContext(new DefaultBtContext()); + btContext->load(uri); + std::cout << btContext << std::endl; +} + +static void showMetalinkFile(const std::string& uri, const Option* op) +{ + std::deque > metalinkEntries; + MetalinkHelper::parseAndQuery(metalinkEntries, uri, op); + std::deque > fileEntries; + MetalinkEntry::toFileEntry(fileEntries, metalinkEntries); + Util::toStream(std::cout, fileEntries); + std::cout << std::endl; +} + +static void showFiles(const std::deque& uris, const Option* op) +{ + ProtocolDetector dt; + for(std::deque::const_iterator i = uris.begin(); + i != uris.end(); ++i) { + printf("Printing the contents of file '%s'...", (*i).c_str()); + printf("\n"); + if(dt.guessTorrentFile(*i)) { + showTorrentFile(*i); + } else if(dt.guessMetalinkFile(*i)) { + showMetalinkFile(*i, op); + } else { + printf("This file is not Torrent/Metalink file. Skipping."); + printf("\n\n"); + } + } +} + extern Option* option_processing(int argc, char* const argv[]); int main(int argc, char* argv[]) @@ -143,9 +179,7 @@ int main(int argc, char* argv[]) #ifdef ENABLE_BITTORRENT if(!op->blank(PREF_TORRENT_FILE)) { if(op->get(PREF_SHOW_FILES) == V_TRUE) { - DefaultBtContextHandle btContext(new DefaultBtContext()); - btContext->load(op->get(PREF_TORRENT_FILE)); - std::cout << btContext << std::endl; + showTorrentFile(op->get(PREF_TORRENT_FILE)); return EXIT_SUCCESS; } else { createRequestGroupForBitTorrent(requestGroups, op, args); @@ -156,12 +190,7 @@ int main(int argc, char* argv[]) #ifdef ENABLE_METALINK if(!op->blank(PREF_METALINK_FILE)) { if(op->get(PREF_SHOW_FILES) == V_TRUE) { - std::deque > metalinkEntries; - MetalinkHelper::parseAndQuery(metalinkEntries, - op->get(PREF_METALINK_FILE), op); - std::deque > fileEntries; - MetalinkEntry::toFileEntry(fileEntries, metalinkEntries); - Util::toStream(std::cout, fileEntries); + showMetalinkFile(op->get(PREF_METALINK_FILE), op); return EXIT_SUCCESS; } else { createRequestGroupForMetalink(requestGroups, op); @@ -171,6 +200,8 @@ int main(int argc, char* argv[]) #endif // ENABLE_METALINK if(!op->blank(PREF_INPUT_FILE)) { createRequestGroupForUriList(requestGroups, op); + } else if(op->get(PREF_SHOW_FILES) == V_TRUE) { + showFiles(args, op); } else { createRequestGroupForUri(requestGroups, op, args); }