diff --git a/i3pystatus/deluge.py b/i3pystatus/deluge.py index c3634e5..4a40460 100644 --- a/i3pystatus/deluge.py +++ b/i3pystatus/deluge.py @@ -1,6 +1,6 @@ import time -from deluge_client import DelugeRPCClient +from deluge_client import DelugeRPCClient, FailedToReconnectException from i3pystatus import IntervalModule, logger from i3pystatus.core.util import bytes_info_dict @@ -31,6 +31,7 @@ class Deluge(IntervalModule): ('username', 'username to authenticate with deluge'), ('password', 'password to authenticate to deluge'), ('path', 'override "download path" server-side when checking space used/free'), + ('offline_string', 'string to output while unable to connect to deluge daemon') ) required = ('username', 'password') @@ -39,6 +40,7 @@ class Deluge(IntervalModule): path = None libtorrent_stats = False rounding = 2 + offline_string = 'offline' format = '⛆{num_torrents} ✇{free_space_bytes}' @@ -50,18 +52,27 @@ class Deluge(IntervalModule): def run(self): if not self.client.connected: - self.client.connect() + try: + self.client.connect() + except OSError: + self.output = { + 'full_text': self.offline_string + } + return - self.data = self.get_session_statistics() + try: + self.data = self.get_session_statistics() - torrents = self.get_torrents_status() - if torrents: - self.data['num_torrents'] = len(torrents) + torrents = self.get_torrents_status() + if torrents: + self.data['num_torrents'] = len(torrents) - if 'free_space_bytes' in self.format: - self.data['free_space_bytes'] = self.get_free_space(self.path) - if 'used_space_bytes' in self.format: - self.data['used_space_bytes'] = self.get_path_size(self.path) + if 'free_space_bytes' in self.format: + self.data['free_space_bytes'] = self.get_free_space(self.path) + if 'used_space_bytes' in self.format: + self.data['used_space_bytes'] = self.get_path_size(self.path) + except FailedToReconnectException: + return self.parse_values(self.data)