DjLegolas 2bd095e5bf
[Core] Stopped using libtorrent deprecated functions
As part of the process of adding support to LT 2.0, we should stop using
all deprecated function, as some (if not all) were removed.
For this process, we should use the LT 1.2 upgrade (guide)[1].

The change includes:
* stop using file entries directly
* start using the torrent handle's set/unset flags
* stop using url key in add_torrent_params (for magnet)
* stop accessing resume_data from save_resume_data_alert
* stop using deprecated session status keys in UI

[1] https://libtorrent.org/upgrade_to_1.2-ref.html
Closes: https://dev.deluge-torrent.org/ticket/3499
Closes: https://github.com/deluge-torrent/deluge/pull/342
2022-02-13 11:36:04 +00:00

117 lines
3.7 KiB
Python

#
# Copyright (C) 2011 Nick Lanham <nick@afternight.org>
#
# 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
from twisted.internet import defer
import deluge.component as component
from deluge.common import TORRENT_STATE, fspeed
from deluge.ui.client import client
from . import BaseCommand
log = logging.getLogger(__name__)
class Command(BaseCommand):
"""Shows various status information from the daemon"""
def add_arguments(self, parser):
parser.add_argument(
'-r',
'--raw',
action='store_true',
default=False,
dest='raw',
help=_(
'Raw values for upload/download rates (without KiB/s suffix)'
'(useful for scripts that want to do their own parsing)'
),
)
parser.add_argument(
'-n',
'--no-torrents',
action='store_false',
default=True,
dest='show_torrents',
help=_('Do not show torrent status (Improves command speed)'),
)
def handle(self, options):
self.console = component.get('ConsoleUI')
self.status = None
self.torrents = 1 if options.show_torrents else 0
self.raw = options.raw
def on_session_status(status):
self.status = status
def on_torrents_status(status):
self.torrents = status
def on_torrents_status_fail(reason):
log.warning('Failed to retrieve session status: %s', reason)
self.torrents = -2
deferreds = []
ds = client.core.get_session_status(
[
'peer.num_peers_connected',
'payload_upload_rate',
'payload_download_rate',
'dht.dht_nodes',
]
)
ds.addCallback(on_session_status)
deferreds.append(ds)
if options.show_torrents:
dt = client.core.get_torrents_status({}, ['state'])
dt.addCallback(on_torrents_status)
dt.addErrback(on_torrents_status_fail)
deferreds.append(dt)
return defer.DeferredList(deferreds).addCallback(self.print_status)
def print_status(self, *args):
self.console.set_batch_write(True)
if self.raw:
self.console.write(
'{!info!}Total upload: %f' % self.status['payload_upload_rate']
)
self.console.write(
'{!info!}Total download: %f' % self.status['payload_download_rate']
)
else:
self.console.write(
'{!info!}Total upload: %s' % fspeed(self.status['payload_upload_rate'])
)
self.console.write(
'{!info!}Total download: %s'
% fspeed(self.status['payload_download_rate'])
)
self.console.write('{!info!}DHT Nodes: %i' % self.status['dht.dht_nodes'])
if isinstance(self.torrents, int):
if self.torrents == -2:
self.console.write('{!error!}Error getting torrent info')
else:
self.console.write('{!info!}Total torrents: %i' % len(self.torrents))
state_counts = {}
for state in TORRENT_STATE:
state_counts[state] = 0
for t in self.torrents:
s = self.torrents[t]
state_counts[s['state']] += 1
for state in TORRENT_STATE:
self.console.write('{!info!} %s: %i' % (state, state_counts[state]))
self.console.set_batch_write(False)