version_usage.cc 7.19 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
/* <!-- copyright */
/*
 * aria2 - The high speed download utility
 *
 * Copyright (C) 2006 Tatsuhiro Tsujikawa
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 *
 * In addition, as a special exception, the copyright holders give
 * permission to link the code of portions of this program with the
 * OpenSSL library under certain conditions as described in each
 * individual source file, and distribute linked combinations
 * including the two.
 * You must obey the GNU General Public License in all respects
 * for all of the code used other than OpenSSL.  If you modify
 * file(s) with this exception, you may extend this exception to your
 * version of the file(s), but you are not obligated to do so.  If you
 * do not wish to do so, delete this exception statement from your
 * version.  If you delete this exception statement from all source
 * files in the program, then also delete it here.
 */
/* copyright --> */
#include "common.h"

#include <iostream>
#include <iterator>
#include <algorithm>

#include "a2io.h"
#include "FeatureConfig.h"
43
#include "MessageDigest.h"
44 45 46 47 48 49 50 51 52
#include "help_tags.h"
#include "prefs.h"
#include "fmt.h"
#include "OptionParser.h"
#include "OptionHandler.h"
#include "util.h"

namespace aria2 {

53 54 55 56
void showVersion()
{
  std::cout
      << PACKAGE << _(" version ") << PACKAGE_VERSION << "\n"
57
      << "Copyright (C) 2006, 2017 Tatsuhiro Tsujikawa"
58 59 60 61 62 63 64 65 66 67 68 69
      << "\n"
      << "\n"
      << _("This program is free software; you can redistribute it and/or "
           "modify\n"
           "it under the terms of the GNU General Public License as published "
           "by\n"
           "the Free Software Foundation; either version 2 of the License, or\n"
           "(at your option) any later version.\n"
           "\n"
           "This program is distributed in the hope that it will be useful,\n"
           "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
           "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
70 71 72 73 74 75 76 77 78 79 80
           "GNU General Public License for more details.\n")
      << "\n"
      << _("** Configuration **") << "\n"
      << _("Enabled Features") << ": " << featureSummary() << "\n"
      << _("Hash Algorithms") << ": "
      << MessageDigest::getSupportedHashTypeString() << "\n"
      << _("Libraries") << ": " << usedLibs() << "\n"
      << _("Compiler") << ": " << usedCompilerAndPlatform() << "\n"
      << _("System") << ": " << getOperatingSystemInfo() << "\n"
      << "\n"
      << fmt(_("Report bugs to %s"), PACKAGE_BUGREPORT) << "\n"
81
      << _("Visit") << " " << PACKAGE_URL << std::endl;
82 83
}

84 85 86
void showUsage(const std::string& keyword,
               const std::shared_ptr<OptionParser>& oparser, const Console& out)
{
87 88 89
  out->printf(_("Usage: aria2c [OPTIONS] [URI | MAGNET | TORRENT_FILE |"
                " METALINK_FILE]..."));
  out->printf("\n");
90
  if (keyword.empty()) {
91 92 93 94
    // Very short version of usage.
    out->printf(_("See 'aria2c -h'."));
    out->printf("\n");
    return;
95 96
  }
  else if (keyword[0] == '#') {
97
    std::vector<const OptionHandler*> handlers =
98 99 100
        keyword == STR_TAG_ALL ? oparser->findAll()
                               : oparser->findByTag(idHelpTag(keyword.c_str()));
    if (keyword == STR_TAG_ALL) {
101
      out->printf(_("Printing all options."));
102 103 104
    }
    else {
      out->printf(_("Printing options tagged with '%s'."), keyword.c_str());
105 106 107 108 109 110
      out->printf("\n");
      out->printf(_("See 'aria2c -h#help' to know all available tags."));
    }
    out->printf("\n");
    out->printf(_("Options:"));
    out->printf("\n");
111 112
    for (std::vector<const OptionHandler*>::const_iterator i = handlers.begin(),
                                                           eoi = handlers.end();
113
         i != eoi; ++i) {
114 115 116
      write(out, *(*i));
      out->printf("\n");
    }
117 118
  }
  else {
119
    std::vector<const OptionHandler*> handlers =
120 121
        oparser->findByNameSubstring(keyword);
    if (!handlers.empty()) {
122 123 124 125 126
      out->printf(_("Printing options whose name includes '%s'."),
                  keyword.c_str());
      out->printf("\n");
      out->printf(_("Options:"));
      out->printf("\n");
127
      for (std::vector<const OptionHandler*>::const_iterator
128 129 130
               i = handlers.begin(),
               eoi = handlers.end();
           i != eoi; ++i) {
131 132 133
        write(out, *(*i));
        out->printf("\n");
      }
134 135 136
    }
    else {
      out->printf(_("No option matching with '%s'."), keyword.c_str());
137 138 139 140
      out->printf("\n");
      write(out, *oparser->find(PREF_HELP));
    }
  }
141
  if (keyword == strHelpTag(TAG_BASIC)) {
142
    out->printf("URI, MAGNET, TORRENT_FILE, METALINK_FILE:\n");
143 144 145 146
    out->printf(
        _(" You can specify multiple HTTP(S)/FTP URIs. Unless you specify -Z "
          "option, all\n"
          " URIs must point to the same file or downloading will fail."));
147
    out->printf("\n");
148 149 150 151
    out->printf(_(" You can also specify arbitrary number of BitTorrent Magnet "
                  "URIs, torrent/\n"
                  " metalink files stored in a local drive. Please note that "
                  "they are always\n"
152 153
                  " treated as a separate download."));
    out->printf("\n\n");
154 155 156 157 158 159 160 161 162 163
    out->printf(_(" You can specify both torrent file with -T option and URIs. "
                  "By doing this,\n"
                  " download a file from both torrent swarm and HTTP/FTP "
                  "server at the same time,\n"
                  " while the data from HTTP/FTP are uploaded to the torrent "
                  "swarm. For single file\n"
                  " torrents, URI can be a complete URI pointing to the "
                  "resource or if URI ends\n"
                  " with '/', 'name' in torrent file is added. For multi-file "
                  "torrents, 'name' and\n"
164 165
                  " 'path' in torrent are added to form a URI for each file."));
    out->printf("\n\n");
166 167 168 169
    out->printf(_(" Make sure that URI is quoted with single(\') or double(\") "
                  "quotation if it\n"
                  " contains \"&\" or any characters that have special meaning "
                  "in shell."));
170
    out->printf("\n\n");
171 172 173 174 175 176 177 178 179
    out->printf(
        _("About the number of connections\n"
          " Since 1.10.0 release, aria2 uses 1 connection per host by default "
          "and has 20MiB\n"
          " segment size restriction. So whatever value you specify using -s "
          "option, it\n"
          " uses 1 connection per host. To make it behave like 1.9.x, use\n"
          " --max-connection-per-server=4 --min-split-size=1M.\n"
          "\n"));
180 181 182 183 184 185
  }
  out->printf(_("Refer to man page for more information."));
  out->printf("\n");
}

} // namespace aria2