Package org.gudy.azureus2.ui.console.commands

Source Code of org.gudy.azureus2.ui.console.commands.Hack$HackTracker

/*
* Written and copyright 2001-2004 Tobias Minich. Distributed under the GNU
* General Public License; see the README file. This code comes with NO
* WARRANTY.
*
* Hack.java
*
* Created on 22.03.2004
*
*/
package org.gudy.azureus2.ui.console.commands;
import java.io.PrintStream;
import java.net.URI;
import java.net.URL;
import java.util.Iterator;
import java.util.List;

import org.gudy.azureus2.core3.disk.DiskManager;
import org.gudy.azureus2.core3.disk.DiskManagerFileInfo;
import org.gudy.azureus2.core3.download.DownloadManager;
import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncer;
import org.gudy.azureus2.ui.console.ConsoleInput;

/**
* @author Tobias Minich
*/
public class Hack extends TorrentCommand
{

  private final CommandCollection subCommands = new CommandCollection();
 
  public Hack()
  {
    super("hack", "#", "Hacking");
    subCommands.add(new HackFile());
    subCommands.add(new HackTracker());
    subCommands.add(new HackDownloadSpeed());
    subCommands.add(new HackUploadSpeed());
    subCommands.add(new HackUploads());
  }
 
  public String getCommandDescriptions()
  {
    return "hack [<various options>]\t#\tModify torrent settings. Use without parameters for further help.";
  }
 
  public void printHelpExtra(PrintStream out, List args) {
    out.println("> -----");
    out.println("'hack' syntax:");
    if( args.size() > 0 ) {
      String command = (String) args.remove(0);
      IConsoleCommand cmd = subCommands.get(command);
      if( cmd != null )
        cmd.printHelp(out, args);
      return;
    }
    out.println("hack <torrent id> <command> <command options>");
    out.println();
    out.println("<torrent id> can be one of the following:");
    out.println("<#>\t\tNumber of a torrent. You have to use 'show torrents' first as the number is taken from there.");
    out.println("hash <hash>\tApplied to torrent with the hash <hash> as given in the xml output or extended torrent info ('show <#>').");
    out.println("help\t\tDetailed help for <command>");
    out.println();
    out.println("Available <command>s:");
    for (Iterator iter = subCommands.iterator(); iter.hasNext();) {
      TorrentSubCommand cmd = (TorrentSubCommand) iter.next();
      out.println(cmd.getCommandDescriptions());
    }
    out.println("> -----");
  }

  /**
   * finds the appropriate subcommand and executes it.
   * the execute() method will have taken care of finding/iterating over the
   * appropriate torrents
   */
  protected boolean performCommand(ConsoleInput ci, DownloadManager dm,
      List args)
  {
    if (args.isEmpty()) {
      ci.out.println("> Not enough parameters for command '" + getCommandName() + "'.");
      return false;
    }
    String subCommandName = (String)args.remove(0);
    TorrentSubCommand cmd = (TorrentSubCommand) subCommands.get(subCommandName);
    if( cmd != null )
      return cmd.performCommand(ci, dm, args);
    else
    {
      ci.out.println("> Command 'hack': Command parameter '" + subCommandName + "' unknown.");
      return false;
    }
  }
 
  private static class HackDownloadSpeed extends TorrentSubCommand
  {
    public HackDownloadSpeed()
    {
      super("downloadspeed", "d");
    }
   
    public String getCommandDescriptions() {
      return "downloadspeed\td\tSet max download speed [in kbps]of a torrent (0 for unlimited).";
    }
   
    /**
     * locate the appropriate subcommand and execute it
     */
    public boolean performCommand(ConsoleInput ci, DownloadManager dm, List args)
    {
      if (args.isEmpty()) {
        ci.out.println("> Command 'hack': Not enough parameters for subcommand '" + getCommandName() + "'");
        return false;
      }
      int newSpeed = Math.max(-1, Integer.parseInt((String) args.get(0)));
      dm.getStats().setDownloadRateLimitBytesPerSecond(newSpeed*1024);
      return true;
    }
  }
 
  private static class HackUploadSpeed extends TorrentSubCommand
  {
    public HackUploadSpeed()
    {
      super("uploadspeed", "u");
    }
   
    public String getCommandDescriptions() {
      return "uploadspeed\tu\tSet max upload speed [in kbps] of a torrent (0 for unlimited).";
    }
   
    /**
     * locate the appropriate subcommand and execute it
     */
    public boolean performCommand(ConsoleInput ci, DownloadManager dm, List args)
    {
      if (args.isEmpty()) {
        ci.out.println("> Command 'hack': Not enough parameters for subcommand '" + getCommandName() + "'");
        return false;
      }
      int newSpeed = Math.max(-1, Integer.parseInt((String) args.get(0)));
      dm.getStats().setUploadRateLimitBytesPerSecond(newSpeed*1024);
      return true;
    }
  }
 
  private static class HackUploads extends TorrentSubCommand
  {
    public HackUploads()
    {
      super("uploads", "v");
    }
   
    public String getCommandDescriptions() {
      return "uploads\tv\tSet max upload slots of a torrent.";
    }
   
    /**
     * locate the appropriate subcommand and execute it
     */
    public boolean performCommand(ConsoleInput ci, DownloadManager dm, List args)
    {
      if (args.isEmpty()) {
        ci.out.println("> Command 'hack': Not enough parameters for subcommand '" + getCommandName() + "'");
        return false;
      }
      int newSlots = Math.max(-1, Integer.parseInt((String) args.get(0)));
      dm.setMaxUploads(newSlots);
      return true;
    }
  }
 
  private static class HackTracker extends TorrentSubCommand
  {
    private final CommandCollection subCommands = new CommandCollection();
   
    public HackTracker()
    {
      super("tracker", "t");
      subCommands.add(new HackHost());
      subCommands.add(new HackPort());
      subCommands.add(new HackURL());
    }

    public void printHelpExtra(PrintStream out, List args)
    {
      out.println("hack <torrent id> tracker [command] <new value>");
      out.println();
      out.println("[command] can be one of the following:");
      for (Iterator iter = subCommands.iterator(); iter.hasNext();) {
        TorrentSubCommand cmd = (TorrentSubCommand) iter.next();
        out.println(cmd.getCommandDescriptions());
      }
      out.println();
      out.println("You can also omit [command] and only give a new full URL (just like the [command] 'url').");
      out.println("> -----");
    }
   
    /**
     * locate the appropriate subcommand and execute it
     */
    public boolean performCommand(ConsoleInput ci, DownloadManager dm, List args)
    {
      if (args.isEmpty()) {
        ci.out.println("> Command 'hack': Not enough parameters for subcommand '" + getCommandName() + "'");
        return false;
      }
      String trackercommand = (String) args.remove(0);
      TRTrackerAnnouncer client = dm.getTrackerClient();
      //ci.out.println("> Command 'hack': Debug: '"+trackercommand+"'");
      if (client == null) {
        ci.out.println("> Command 'hack': Tracker interface not available.");
        return false;
      }
      TorrentSubCommand cmd = (TorrentSubCommand) subCommands.get(trackercommand);
      if( cmd == null )
      {
        args.add(trackercommand);
        cmd = (TorrentSubCommand) subCommands.get("url");
      }
     
      return cmd.performCommand(ci, dm, args);
    }

    public String getCommandDescriptions() {
      return "tracker\t\tt\tModify Tracker URL of a torrent.";
    }
  }
 
  private static class HackFile extends TorrentSubCommand
  {
    public HackFile()
    {
      super("file", "f");
    }
    public void printHelpExtra(PrintStream out, List args)
    {
      out.println("hack <torrent id> file <#> <priority>");
      out.println();
      out.println("<#> Number of the file.");
      out.println();
      out.println("<priority> can be one of the following:");
      out.println("normal\t\tn\tNormal Priority");
      out.println("high\t\th|+\tHigh Priority");
      out.println("nodownload\t!|-\tDon't download this file.");
      out.println("> -----");
    }
    public boolean performCommand(ConsoleInput ci, DownloadManager dm, List args)
    {
      if (args.size() < 2) {
        ci.out.println("> Command 'hack': Not enough parameters for subcommand 'file'.");
        return false;
      }
      try {
        DiskManager disk = dm.getDiskManager();
        DiskManagerFileInfo files[] = disk.getFiles();
        int file = Integer.parseInt((String) args.get(0));
        String c = (String) args.get(1);
        if (c.equalsIgnoreCase("normal") || c.equalsIgnoreCase("n")) {
          files[file - 1].setSkipped(false);
          files[file - 1].setPriority(0);
          ci.out.println("> Set file '"+files[file - 1].getFile(true).getName()+"' to normal priority.");
        } else if (c.equalsIgnoreCase("high") || c.equalsIgnoreCase("h") || c.equalsIgnoreCase("+")) {
          files[file - 1].setSkipped(false);
          files[file - 1].setPriority(1);
          ci.out.println("> Set file '"+files[file - 1].getFile(true).getName()+"' to high priority.");
        } else if (c.equalsIgnoreCase("nodownload") || c.equalsIgnoreCase("!") || c.equalsIgnoreCase("-")) {
          files[file - 1].setSkipped(true);
          files[file - 1].setPriority(0);
          ci.out.println("> Stopped to download file '"+files[file - 1].getFile(true).getName()+"'.");
        } else {
          ci.out.println("> Command 'hack': Unknown priority '" + c + "' for command parameter 'file'.");
          return false;
        }
        return true;
      } catch (Exception e) {
        ci.out.println("> Command 'hack': Exception while executing subcommand 'file': " + e.getMessage());
        return false;
      }
    }

    public String getCommandDescriptions() {
      return "file\t\tf\tModify priority of a single file of a batch torrent.";
    }
  }
 
  private static class HackPort extends TorrentSubCommand
  {
    public HackPort()
    {
      super("port", "p");
    }
    public boolean performCommand(ConsoleInput ci, DownloadManager dm, List args)
    {
      if (args.isEmpty()) {
        ci.out.println("> Command 'hack': Not enough parameters for subcommand parameter 'port'.");
        return false;
      }
      TRTrackerAnnouncer client = dm.getTrackerClient();
      try {
        URI uold = new URI(client.getTrackerURL().toString());
        String portStr = (String) args.get(0);
        URI unew = new URI(uold.getScheme(), uold.getUserInfo(), uold.getHost(), Integer.parseInt(portStr), uold.getPath(), uold.getQuery(), uold.getFragment());
        client.setTrackerURL(new URL(unew.toString()));
        ci.out.println("> Set Tracker URL for '"+dm.getSaveLocation()+"' to '"+unew.toString()+"'");
      } catch (Exception e) {
        ci.out.println("> Command 'hack': Assembling new tracker url failed: "+e.getMessage());
        return false;
      }
      return true;
    }
    public String getCommandDescriptions() {
      return "port\t\tp\tChange the port.";
    }
  }
  private static class HackHost extends TorrentSubCommand
  {
    public HackHost()
    {
      super("host", "h");
    }
    public boolean performCommand(ConsoleInput ci, DownloadManager dm, List args)
    {
      if (args.isEmpty()) {
        ci.out.println("> Command 'hack': Not enough parameters for subcommand parameter 'host'.");
        return false;
      }
      TRTrackerAnnouncer client = dm.getTrackerClient();
      try {
        URI uold = new URI(client.getTrackerURL().toString());
        URI unew = new URI(uold.getScheme(), uold.getUserInfo(), (String)args.get(0), uold.getPort(), uold.getPath(), uold.getQuery(), uold.getFragment());
        client.setTrackerURL(new URL(unew.toString()));
        ci.out.println("> Set Tracker URL for '"+dm.getSaveLocation()+"' to '"+unew.toString()+"'");
      } catch (Exception e) {
        ci.out.println("> Command 'hack': Assembling new tracker url failed: "+e.getMessage());
        return false;
      }
      return true;
    }
    public String getCommandDescriptions() {
      return "host\t\th\tChange the host.";
    }
  }
  private static class HackURL extends TorrentSubCommand
  {
    public HackURL()
    {
      super("url", "u");
    }
    public boolean performCommand(ConsoleInput ci, DownloadManager dm, List args)
    {
      if (args.isEmpty()) {
        ci.out.println("> Command 'hack': Not enough parameters for subcommand parameter 'url'.");
        return false;
      }
      TRTrackerAnnouncer client = dm.getTrackerClient();
     
      try {
        String uriStr = (String) args.get(0);
        URI uri = new URI(uriStr);
        client.setTrackerURL(new URL(uri.toString()));
        ci.out.println("> Set Tracker URL for '"+dm.getSaveLocation()+"' to '"+uri+"'");
      } catch (Exception e) {
        ci.out.println("> Command 'hack': Parsing tracker url failed: "+e.getMessage());
        return false;
      }
      return true;
    }
    public String getCommandDescriptions() {
      return "url\t\tu\tChange the full URL (Note: you have to include the '/announce' part).";
    }
  } 
}
TOP

Related Classes of org.gudy.azureus2.ui.console.commands.Hack$HackTracker

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.