diff options
| -rw-r--r-- | NEWS | 9 | ||||
| -rw-r--r-- | transmission-remote-cli.1 | 161 | ||||
| -rwxr-xr-x | transmission-remote-cli.py | 21 | 
3 files changed, 86 insertions, 105 deletions
| @@ -1,3 +1,12 @@ +1.2  2012-04-25 +    BUGFIXES: +        - Rewrite of manpage to eliminate warnings and conform to the man +          macro package + +    - Allow filtering of private torrents in main list +    - Don't reset focus/unfocus after deleting a torrent + +  1.1.1  2012-04-02      BUGFIXES:          - ACS characters in pieces view look better but are extremely slow in diff --git a/transmission-remote-cli.1 b/transmission-remote-cli.1 index 3f57ebc..169170c 100644 --- a/transmission-remote-cli.1 +++ b/transmission-remote-cli.1 @@ -1,104 +1,69 @@ -.Dd Oct 25, 2011 -.Dt TRANSMISSION-REMOTE-CLI 1 -.Os -.Sh NAME -.Nm transmission-remote-cli -.Nd a console client for the Transmission BitTorrent client -.Sh SYNOPSIS -.Nm -.Op OPTION -.Op Ar filename-or-URL -.Sh DESCRIPTION -.Nm -is a console client for the Transmission BitTorrent client -.Sh OPTIONS -.Bl -tag -with Ds -.It Fl -version -Show version number and exit -.It Fl h Fl -help -Show this help message and exit -.It Fl "c \fICONNECTION\fR" Fl -connect=\fICONNECTION\fR -Point to the server using pattern: [username:password@]host[:port]/[path] -.It Fl s Fl -ssl -Connect to Transmission via SSL -.It Fl "f \fICONFIGFILE\fR" Fl -config=\fICONFIGFILE\fR -Path to configuration file -.It Fl -create-config -Create configuration file \fICONFIGFILE\fR -.It Fl n Fl -netrc -Get authentication info from your ~/.netrc file -.It Fl - -Forward options after '--' and auth info to transmission-remote -.Sh FILES -Settings can be saved in ~/.config/transmission-remote-cli/settings.cfg, authentication settings in ~/.netrc -.Sh EXAMPLES -Connection information - -.Ed -Authentication and host/port can be set via command line with one of these patterns: -.Bd -literal -offset indent -$ transmission-remote-cli \-c homeserver -$ transmission-remote-cli \-c homeserver:1234 -$ transmission-remote-cli \-c johndoe:secretbirthday@homeserver -$ transmission-remote-cli \-c johndoe:secretbirthday@homeserver:1234 - -.Ed -Configuration file - -.Ed -You can write this (and other settings) to a configuration file: -.Bd -literal -offset indent -$ transmission-remote-cli.py \-c johndoe:secretbirthday@homeserver:1234 \-\-create-config +.\"Created with GNOME Manpages Editor Wizard +.\"http://sourceforge.net/projects/gmanedit2 +.TH transmission-remote-cli 1 "April 22, 2012" "" "transmission-remote-cli" -.Ed -No configuration file is created automatically, you have to do this somehow. However, if the file exists, it is re-written when trcli exits to remember some settings. This means you shouldn't have trcli running when editing your configuration file. +.SH NAME +transmission-remote-cli \- a console client for the Transmission BitTorrent +client -.Ed -If you don't like the default configuration file path ~/.config/transmission-remote-cli/settings.cfg, change it: -.Bd -literal -offset indent -$ transmission-remote-cli.py -f ~/.trclirc --create-config +.SH SYNOPSIS +.B transmission-remote-cli +.RI [ options ] +.RI [ filename-or-URL ]  +.br -.Ed -Calling transmission-remote +.SH DESCRIPTION +.B transmission-remote-cli +is a curses interface for the daemon of the BitTorrent client Transmission. -.Ed -transmission-remote-cli forwards all arguments after '--' to transmission-remote. This is useful if your daemon requires authentication and/or doesn't listen on the default localhost:9091 for instructions. transmission-remote-cli reads HOST:PORT and authentication from the config file and forwards them on to transmission-remote, along with your arguments. - -.Ed -Some examples: -.Bd -literal -offset indent -$ transmission-remote-cli.py -- -l -$ transmission-remote-cli.py -- -t 2 -i -$ transmission-remote-cli.py -- -as - -.Ed -Add torrents +.SH OPTIONS +.B +.IP "--version" +Show version number and exit +.B +.IP "-h --help" +Show usage information and a list of options +.B +.IP "-c \fICONNECTION\fB --connect=\fICONNECTION\fR" +Point to the server. \fICONNECTION\fR must match the following pattern: +.br +[username:password@]host[:port][path] +.br +Default: localhost:9091 +.B +.IP "-s --ssl" +Use SSL to connect to the server. +.br +Default: don't use SSL +.B +.IP "--create-config" +Create configuration file with default values. +.br +\fINOTE:\fR A config file won't be created unless you provide this option at +least once. After that, it is rewritten whenever transmission-remote-cli +exits. +.IP "-f \fICONFIGFILE\fB --config=\fICONFIGFILE\fR" +Set path to configuration file. +.br +Default: ~/.config/transmission-remote-cli/settings.cfg +.B +.IP "-n --netrc" +Get authentication info from ~/.netrc. +.B +.IP "-- \fIOPTIONS\fR" +Use the known server connection to pass \fIOPTIONS\fR on to +\fBtransmission-remote\fR. +.B -.Pp -If you provide only one command line argument and it doesn't start with '-', it's treated like a torrent file/URL and submitted to the daemon via transmission-remote. -This is useful because you can instruct Firefox to open torrent files with transmission-remote-cli.py. -.Bd -literal -offset indent -$ transmission-remote-cli.py http://link/to/file.torrent -$ transmission-remote-cli.py path/to/some/torrent-file -.El -.Sh AUTHOR -.An -nosplit -.An Benjamin (fagga), -.An contributors . -.Sh SEE ALSO -.Xr transmission-create 1 , -.Xr transmission-daemon 1 , -.Xr transmission-edit 1 , -.Xr transmission-gtk 1 , -.Xr transmission-qt 1 , -.Xr transmission-remote 1 , -.Xr transmission-show 1 -.Sh COPYRIGHT -Copyright (C) 2011 Ben Thompson. +.SH FILES +transmission-remote-cli overwrites the configuration file on exit. Keep that +in mind if you edit it manually. -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.3 -or any later version published by the Free Software Foundation; -with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. -A copy of the license is included in the section entitled "GNU -Free Documentation License" <\fBhttp://www.gnu.org/copyleft/fdl.html\fR>. +.SH SEE ALSO +.BR transmission-create (1), +.BR transmission-daemon (1), +.BR transmission-edit (1), +.BR transmission-gtk (1), +.BR transmission-qt (1), +.BR transmission-remote (1), +.BR transmission-show (1). diff --git a/transmission-remote-cli.py b/transmission-remote-cli.py index e7dfb9e..8a2497b 100755 --- a/transmission-remote-cli.py +++ b/transmission-remote-cli.py @@ -16,10 +16,10 @@  # http://www.gnu.org/licenses/gpl-3.0.txt                              #  ######################################################################## -VERSION = '1.1.1' +VERSION = '1.2'  TRNSM_VERSION_MIN = '1.90' -TRNSM_VERSION_MAX = '2.50' +TRNSM_VERSION_MAX = '2.51'  RPC_VERSION_MIN = 8  RPC_VERSION_MAX = 14 @@ -183,7 +183,6 @@ class TransmissionRequest:              if session_id:                  self.http_request.add_header('X-Transmission-Session-Id', session_id)              self.open_request = urllib2.urlopen(self.http_request) -            debug(self.http_request.get_data() + "\n\n")          except AttributeError:              # request data (http_request) isn't specified yet -- data will be available on next call              pass @@ -221,7 +220,6 @@ class TransmissionRequest:              authhandler.retried = 0          try:              data = json.loads(unicode(response)) -            debug(data)          except ValueError:              quit("Cannot parse response: %s\n" % response, JSON_ERROR)          self.open_request = None @@ -253,11 +251,11 @@ class Transmission:                      'peersConnected', 'uploadLimit', 'downloadLimit',                      'uploadLimited', 'downloadLimited', 'bandwidthPriority',                      'peersSendingToUs', 'peersGettingFromUs', -                    'seedRatioLimit', 'seedRatioMode' ] +                    'seedRatioLimit', 'seedRatioMode', 'isPrivate' ]      DETAIL_FIELDS = [ 'files', 'priorities', 'wanted', 'peers', 'trackers',                        'activityDate', 'dateCreated', 'startDate', 'doneDate', -                      'totalSize', 'leftUntilDone', 'comment', 'isPrivate', +                      'totalSize', 'leftUntilDone', 'comment',                        'hashString', 'pieceCount', 'pieceSize', 'pieces',                        'downloadedEver', 'corruptEver', 'peersFrom' ] + LIST_FIELDS @@ -1091,7 +1089,7 @@ class Interface:          if self.selected_torrent == -1:              options = [('uploading','_Uploading'), ('downloading','_Downloading'),                         ('active','Ac_tive'), ('paused','_Paused'), ('seeding','_Seeding'), -                       ('incomplete','In_complete'), ('verifying','Verif_ying'), +                       ('incomplete','In_complete'), ('verifying','Verif_ying'), ('private','P_rivate'),                         ('invert','In_vert'), ('','_All')]              choice = self.dialog_menu(('Show only','Filter all')[self.filter_inverse], options,                                        map(lambda x: x[0]==self.filter_list, options).index(True)+1) @@ -1197,6 +1195,7 @@ class Interface:                      self.selected_torrent = -1                      self.details_category_focus = 0                  server.remove_torrent(self.torrents[self.focus]['id']) +                self.focus_next_after_delete()      def remove_torrent_local_data(self, c):          if self.focus > -1: @@ -1207,6 +1206,12 @@ class Interface:                      self.selected_torrent = -1                      self.details_category_focus = 0                  server.remove_torrent_local_data(self.torrents[self.focus]['id']) +                self.focus_next_after_delete() + +    def focus_next_after_delete(self): +        """ Focus next torrent after user deletes torrent """ +        new_focus = min(self.focus + 1, len(self.torrents) - 2) +        self.focused_id = self.torrents[new_focus]['id']      def add_tracker(self):          if server.get_rpc_version() < 10: @@ -1419,6 +1424,8 @@ class Interface:                                   or t['status'] == Transmission.STATUS_SEED_WAIT]          elif self.filter_list == 'incomplete':              self.torrents = [t for t in self.torrents if t['percentDone'] < 100] +        elif self.filter_list == 'private': +            self.torrents = [t for t in self.torrents if t['isPrivate']]          elif self.filter_list == 'active':              self.torrents = [t for t in self.torrents if t['peersGettingFromUs'] > 0 \                                   or t['peersSendingToUs'] > 0 \ | 
