diff options
Diffstat (limited to 'deluge/ui/console/cmdline/commands/connect.py')
-rw-r--r-- | deluge/ui/console/cmdline/commands/connect.py | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/deluge/ui/console/cmdline/commands/connect.py b/deluge/ui/console/cmdline/commands/connect.py new file mode 100644 index 0000000..4c76de3 --- /dev/null +++ b/deluge/ui/console/cmdline/commands/connect.py @@ -0,0 +1,78 @@ +# +# Copyright (C) 2008-2009 Ido Abramovich <ido.deluge@gmail.com> +# Copyright (C) 2009 Andrew Resch <andrewresch@gmail.com> +# +# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with +# the additional special exception to link portions of this program with the OpenSSL library. +# See LICENSE for more details. +# + +import logging + +import deluge.component as component +from deluge.ui.client import client + +from . import BaseCommand + +log = logging.getLogger(__name__) + + +class Command(BaseCommand): + """Connect to a new deluge server""" + + usage = _('Usage: connect <host[:port]> [<username>] [<password>]') + + def add_arguments(self, parser): + parser.add_argument( + 'host', help=_('Daemon host and port'), metavar='<host[:port]>' + ) + parser.add_argument( + 'username', help=_('Username'), metavar='<username>', nargs='?', default='' + ) + parser.add_argument( + 'password', help=_('Password'), metavar='<password>', nargs='?', default='' + ) + + def add_parser(self, subparsers): + parser = subparsers.add_parser( + self.name, help=self.__doc__, description=self.__doc__, prog='connect' + ) + self.add_arguments(parser) + + def handle(self, options): + self.console = component.get('ConsoleUI') + + host = options.host + try: + host, port = host.split(':') + port = int(port) + except ValueError: + port = 58846 + + def do_connect(): + d = client.connect(host, port, options.username, options.password) + + def on_connect(result): + if self.console.interactive: + self.console.write(f'{{!success!}}Connected to {host}:{port}!') + return component.start() + + def on_connect_fail(result): + self.console.write( + f'{{!error!}}Failed to connect to {host}:{port} with reason: {result.value.message}' + ) + return result + + d.addCallbacks(on_connect, on_connect_fail) + return d + + if client.connected(): + + def on_disconnect(result): + if self.console.statusbars: + self.console.statusbars.update_statusbars() + return do_connect() + + return client.disconnect().addCallback(on_disconnect) + else: + return do_connect() |