Implement Error status.

This commit is contained in:
Andrew Resch 2008-03-31 06:17:55 +00:00
parent 4ff17ee367
commit db13c2e3f3
7 changed files with 375 additions and 326 deletions

2
TODO
View File

@ -5,8 +5,6 @@ For 0.6 release:
* Add a 'move storage' on completion option * Add a 'move storage' on completion option
* Address issue where torrents will redownload if the storage is moved outside * Address issue where torrents will redownload if the storage is moved outside
of deluge. of deluge.
* Use the alert icon for file alerts from libtorrent
* Add a torrent status message to the details tab to indicate errors (with alert icon)
* Implement prioritize first/last pieces * Implement prioritize first/last pieces
* Anonymous stats * Anonymous stats
* Update checking * Update checking

View File

@ -69,6 +69,8 @@ class Torrent:
self.compact = compact self.compact = compact
# Where the torrent is being saved to # Where the torrent is being saved to
self.save_path = save_path self.save_path = save_path
# Status message holds error info about the torrent
self.statusmsg = "OK"
# Holds status info so that we don't need to keep getting it from lt # Holds status info so that we don't need to keep getting it from lt
self.status = self.handle.status() self.status = self.handle.status()
@ -162,6 +164,9 @@ class Torrent:
# Update the torrentqueue on any state changes # Update the torrentqueue on any state changes
self.torrentqueue.update_queue() self.torrentqueue.update_queue()
def set_status_message(self, message):
self.statusmsg = message
def get_eta(self): def get_eta(self):
"""Returns the ETA in seconds for this torrent""" """Returns the ETA in seconds for this torrent"""
if self.status == None: if self.status == None:
@ -291,7 +296,8 @@ class Torrent:
"max_upload_speed": self.max_upload_speed, "max_upload_speed": self.max_upload_speed,
"max_download_speed": self.max_download_speed, "max_download_speed": self.max_download_speed,
"prioritize_first_last": self.prioritize_first_last, "prioritize_first_last": self.prioritize_first_last,
"private": self.private "private": self.private,
"message": self.statusmsg
} }
fns = { fns = {
@ -343,7 +349,9 @@ class Torrent:
def resume(self): def resume(self):
"""Resumes this torrent""" """Resumes this torrent"""
if self.state == "Paused": if self.state == "Paused" or self.state == "Error":
# Reset the status message just in case of resuming an Error'd torrent
self.set_status_message("OK")
if self.handle.is_seed(): if self.handle.is_seed():
# If the torrent has already reached it's 'stop_seed_ratio' then do not do anything # If the torrent has already reached it's 'stop_seed_ratio' then do not do anything

View File

@ -138,6 +138,7 @@ class TorrentManager(component.Component):
self.on_alert_tracker_warning) self.on_alert_tracker_warning)
self.alerts.register_handler("storage_moved_alert", self.alerts.register_handler("storage_moved_alert",
self.on_alert_storage_moved) self.on_alert_storage_moved)
self.alerts.register_handler("file_error_alert", self.on_alert_file_error)
# Create the AutoAdd component # Create the AutoAdd component
self.autoadd = AutoAdd() self.autoadd = AutoAdd()
@ -302,7 +303,7 @@ class TorrentManager(component.Component):
# Resume the torrent if needed # Resume the torrent if needed
if state == "Queued": if state == "Queued":
torrent.state = "Queued" torrent.state = "Queued"
elif state == "Paused": elif state == "Paused" or state == "Error":
torrent.state = "Paused" torrent.state = "Paused"
if state == None and not options["add_paused"]: if state == None and not options["add_paused"]:
torrent.handle.resume() torrent.handle.resume()
@ -498,7 +499,7 @@ class TorrentManager(component.Component):
"file_priorities": torrent_state.file_priorities "file_priorities": torrent_state.file_priorities
} }
# We need to resume all non-add_paused torrents after plugin hook # We need to resume all non-add_paused torrents after plugin hook
if torrent_state.state == "Paused" or torrent_state.state == "Queued": if torrent_state.state == "Paused" or torrent_state.state == "Queued" or torrent_state.state == "Error":
log.debug("torrent state: %s", torrent_state.state) log.debug("torrent state: %s", torrent_state.state)
add_paused[torrent_state.torrent_id] = True add_paused[torrent_state.torrent_id] = True
else: else:
@ -698,3 +699,9 @@ class TorrentManager(component.Component):
except KeyError: except KeyError:
log.debug("torrent_id doesn't exist.") log.debug("torrent_id doesn't exist.")
def on_alert_file_error(self, alert):
log.debug("on_alert_file_error")
torrent_id = str(alert.handle.info_hash())
self.torrents[torrent_id].set_state("Error")
self.torrents[torrent_id].set_status_message(str(alert.msg()))
self.not_state_paused.append(torrent_id)

View File

@ -49,7 +49,8 @@ class DetailsTab:
(glade.get_widget("summary_num_files"), str, ("num_files",)), (glade.get_widget("summary_num_files"), str, ("num_files",)),
(glade.get_widget("summary_tracker"), None, ("tracker",)), (glade.get_widget("summary_tracker"), None, ("tracker",)),
(glade.get_widget("summary_torrent_path"), None, ("save_path",)), (glade.get_widget("summary_torrent_path"), None, ("save_path",)),
(glade.get_widget("summary_private"), str, ("private",)) (glade.get_widget("summary_private"), str, ("private",)),
(glade.get_widget("summary_message"), str, ("message",))
] ]
def update(self): def update(self):
@ -65,7 +66,7 @@ class DetailsTab:
# Get the torrent status # Get the torrent status
status_keys = ["name", "total_size", "num_files", status_keys = ["name", "total_size", "num_files",
"tracker", "save_path", "private"] "tracker", "save_path", "private", "message"]
client.get_torrent_status( client.get_torrent_status(
self._on_get_torrent_status, selected, status_keys) self._on_get_torrent_status, selected, status_keys)

View File

@ -533,183 +533,137 @@
<placeholder/> <placeholder/>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="summary_next_announce"> <widget class="GtkLabel" id="summary_total_downloaded">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="wrap">True</property>
<property name="selectable">True</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="summary_pieces"> <widget class="GtkLabel" id="summary_download_speed">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="xalign">0</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">3</property> <property name="left_attach">3</property>
<property name="right_attach">4</property> <property name="right_attach">4</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="summary_tracker_status"> <widget class="GtkLabel" id="summary_total_uploaded">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="wrap">True</property>
<property name="wrap_mode">PANGO_WRAP_CHAR</property>
<property name="selectable">True</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">4</property> <property name="top_attach">1</property>
<property name="bottom_attach">5</property> <property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="label52"> <widget class="GtkLabel" id="summary_upload_speed">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;b&gt;Tracker Status:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="summary_availability">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="wrap">True</property>
<property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
</widget>
<packing>
<property name="left_attach">5</property>
<property name="right_attach">6</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label47">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">1</property>
<property name="label" translatable="yes">&lt;b&gt;Availability:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="left_attach">4</property>
<property name="right_attach">5</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="summary_eta">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="xalign">0</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">3</property> <property name="left_attach">3</property>
<property name="right_attach">4</property> <property name="right_attach">4</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="summary_share_ratio">
<property name="visible">True</property>
<property name="xalign">0</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="summary_peers">
<property name="visible">True</property>
<property name="xalign">0</property>
</widget>
<packing>
<property name="left_attach">5</property>
<property name="right_attach">6</property>
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="label44"> <widget class="GtkAlignment" id="alignment44">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="right_padding">5</property>
<property name="label" translatable="yes">&lt;b&gt;Peers:&lt;/b&gt;</property> <child>
<property name="use_markup">True</property> <widget class="GtkLabel" id="label38">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;b&gt;Downloaded:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
</child>
</widget>
<packing>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkAlignment" id="alignment45">
<property name="visible">True</property>
<property name="right_padding">5</property>
<child>
<widget class="GtkLabel" id="label39">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;b&gt;Uploaded:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
</child>
</widget> </widget>
<packing> <packing>
<property name="left_attach">4</property>
<property name="right_attach">5</property>
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="summary_seeders"> <widget class="GtkAlignment" id="alignment46">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="right_padding">5</property>
<child>
<widget class="GtkLabel" id="label41">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;b&gt;Share Ratio:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
</child>
</widget> </widget>
<packing> <packing>
<property name="left_attach">5</property> <property name="top_attach">2</property>
<property name="right_attach">6</property> <property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="label40"> <widget class="GtkAlignment" id="alignment47">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="right_padding">5</property>
<property name="label" translatable="yes">&lt;b&gt;Seeders:&lt;/b&gt;</property> <child>
<property name="use_markup">True</property> <widget class="GtkLabel" id="label53">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;b&gt;Next Announce:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
</child>
</widget> </widget>
<packing> <packing>
<property name="left_attach">4</property> <property name="top_attach">3</property>
<property name="right_attach">5</property> <property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkAlignment" id="alignment51"> <widget class="GtkAlignment" id="alignment48">
<property name="visible">True</property> <property name="visible">True</property>
<property name="left_padding">15</property> <property name="left_padding">15</property>
<property name="right_padding">5</property> <property name="right_padding">5</property>
<child> <child>
<widget class="GtkLabel" id="label46"> <widget class="GtkLabel" id="label42">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="label" translatable="yes">&lt;b&gt;Pieces:&lt;/b&gt;</property> <property name="label" translatable="yes">&lt;b&gt;Speed:&lt;/b&gt;</property>
<property name="use_markup">True</property> <property name="use_markup">True</property>
</widget> </widget>
</child> </child>
@ -717,30 +671,6 @@
<packing> <packing>
<property name="left_attach">2</property> <property name="left_attach">2</property>
<property name="right_attach">3</property> <property name="right_attach">3</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkAlignment" id="alignment50">
<property name="visible">True</property>
<property name="left_padding">15</property>
<property name="right_padding">5</property>
<child>
<widget class="GtkLabel" id="label45">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;b&gt;ETA:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
@ -767,15 +697,15 @@
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkAlignment" id="alignment48"> <widget class="GtkAlignment" id="alignment50">
<property name="visible">True</property> <property name="visible">True</property>
<property name="left_padding">15</property> <property name="left_padding">15</property>
<property name="right_padding">5</property> <property name="right_padding">5</property>
<child> <child>
<widget class="GtkLabel" id="label42"> <widget class="GtkLabel" id="label45">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="label" translatable="yes">&lt;b&gt;Speed:&lt;/b&gt;</property> <property name="label" translatable="yes">&lt;b&gt;ETA:&lt;/b&gt;</property>
<property name="use_markup">True</property> <property name="use_markup">True</property>
</widget> </widget>
</child> </child>
@ -783,128 +713,198 @@
<packing> <packing>
<property name="left_attach">2</property> <property name="left_attach">2</property>
<property name="right_attach">3</property> <property name="right_attach">3</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkAlignment" id="alignment47">
<property name="visible">True</property>
<property name="right_padding">5</property>
<child>
<widget class="GtkLabel" id="label53">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;b&gt;Next Announce:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
</child>
</widget>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkAlignment" id="alignment46">
<property name="visible">True</property>
<property name="right_padding">5</property>
<child>
<widget class="GtkLabel" id="label41">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;b&gt;Share Ratio:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
</child>
</widget>
<packing>
<property name="top_attach">2</property> <property name="top_attach">2</property>
<property name="bottom_attach">3</property> <property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkAlignment" id="alignment45"> <widget class="GtkAlignment" id="alignment51">
<property name="visible">True</property> <property name="visible">True</property>
<property name="left_padding">15</property>
<property name="right_padding">5</property> <property name="right_padding">5</property>
<child> <child>
<widget class="GtkLabel" id="label39"> <widget class="GtkLabel" id="label46">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="label" translatable="yes">&lt;b&gt;Uploaded:&lt;/b&gt;</property> <property name="label" translatable="yes">&lt;b&gt;Pieces:&lt;/b&gt;</property>
<property name="use_markup">True</property> <property name="use_markup">True</property>
</widget> </widget>
</child> </child>
</widget> </widget>
<packing> <packing>
<property name="top_attach">1</property> <property name="left_attach">2</property>
<property name="bottom_attach">2</property> <property name="right_attach">3</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkAlignment" id="alignment44"> <widget class="GtkLabel" id="label40">
<property name="visible">True</property> <property name="visible">True</property>
<property name="right_padding">5</property> <property name="xalign">0</property>
<child> <property name="label" translatable="yes">&lt;b&gt;Seeders:&lt;/b&gt;</property>
<widget class="GtkLabel" id="label38"> <property name="use_markup">True</property>
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;b&gt;Downloaded:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
</child>
</widget> </widget>
<packing> <packing>
<property name="left_attach">4</property>
<property name="right_attach">5</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="summary_upload_speed"> <widget class="GtkLabel" id="summary_seeders">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="xalign">0</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">3</property> <property name="left_attach">5</property>
<property name="right_attach">4</property> <property name="right_attach">6</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label44">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;b&gt;Peers:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="left_attach">4</property>
<property name="right_attach">5</property>
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="summary_total_uploaded"> <widget class="GtkLabel" id="summary_peers">
<property name="visible">True</property>
<property name="xalign">0</property>
</widget>
<packing>
<property name="left_attach">5</property>
<property name="right_attach">6</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="summary_share_ratio">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="xalign">0</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">1</property> <property name="top_attach">2</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="summary_download_speed"> <widget class="GtkLabel" id="summary_eta">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="xalign">0</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">3</property> <property name="left_attach">3</property>
<property name="right_attach">4</property> <property name="right_attach">4</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="summary_total_downloaded"> <widget class="GtkLabel" id="label47">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="ypad">1</property>
<property name="label" translatable="yes">&lt;b&gt;Availability:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="left_attach">4</property>
<property name="right_attach">5</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="summary_availability">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="wrap">True</property>
<property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
</widget>
<packing>
<property name="left_attach">5</property>
<property name="right_attach">6</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label52">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;b&gt;Tracker Status:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="summary_tracker_status">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="wrap">True</property>
<property name="wrap_mode">PANGO_WRAP_CHAR</property>
<property name="selectable">True</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="summary_pieces">
<property name="visible">True</property>
<property name="xalign">0</property>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="summary_next_announce">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="wrap">True</property>
<property name="selectable">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
@ -975,93 +975,41 @@
<child> <child>
<widget class="GtkTable" id="table9"> <widget class="GtkTable" id="table9">
<property name="visible">True</property> <property name="visible">True</property>
<property name="n_rows">6</property> <property name="n_rows">7</property>
<property name="n_columns">2</property> <property name="n_columns">2</property>
<property name="row_spacing">2</property> <property name="row_spacing">2</property>
<child> <child>
<widget class="GtkLabel" id="summary_tracker"> <widget class="GtkLabel" id="summary_message">
<property name="visible">True</property> <property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="wrap">True</property>
<property name="wrap_mode">PANGO_WRAP_CHAR</property>
<property name="selectable">True</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">4</property> <property name="top_attach">6</property>
<property name="bottom_attach">5</property> <property name="bottom_attach">7</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"></property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="label51"> <widget class="GtkLabel" id="label8">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="ypad">1</property> <property name="ypad">1</property>
<property name="label" translatable="yes">&lt;b&gt;Tracker:&lt;/b&gt;</property> <property name="label" translatable="yes">&lt;b&gt;Status:&lt;/b&gt;</property>
<property name="use_markup">True</property> <property name="use_markup">True</property>
</widget> </widget>
<packing> <packing>
<property name="top_attach">4</property> <property name="top_attach">6</property>
<property name="bottom_attach">5</property> <property name="bottom_attach">7</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"></property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkAlignment" id="alignment55"> <widget class="GtkLabel" id="summary_private">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="right_padding">5</property>
<child>
<widget class="GtkLabel" id="label49">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">1</property>
<property name="label" translatable="yes">&lt;b&gt;# of files:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
</child>
</widget>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="summary_num_files">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="selectable">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="summary_total_size">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="selectable">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="summary_name">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="wrap">True</property> <property name="wrap">True</property>
@ -1071,52 +1019,44 @@
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="y_options"></property> <property name="top_attach">5</property>
</packing> <property name="bottom_attach">6</property>
</child>
<child>
<widget class="GtkAlignment" id="alignment56">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="right_padding">5</property>
<child>
<widget class="GtkLabel" id="label50">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">1</property>
<property name="label" translatable="yes">&lt;b&gt;Total Size:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
</child>
</widget>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"></property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkAlignment" id="alignment62"> <widget class="GtkLabel" id="label7">
<property name="visible">True</property> <property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="xalign">0</property>
<property name="right_padding">5</property> <property name="ypad">1</property>
<child> <property name="label" translatable="yes">&lt;b&gt;Private:&lt;/b&gt;</property>
<widget class="GtkLabel" id="label54"> <property name="use_markup">True</property>
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="ypad">1</property>
<property name="label" translatable="yes">&lt;b&gt;Name:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
</child>
</widget> </widget>
<packing> <packing>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"></property>
</packing> </packing>
</child> </child>
<child>
<widget class="GtkLabel" id="summary_torrent_path">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="xalign">0</property>
<property name="wrap">True</property>
<property name="wrap_mode">PANGO_WRAP_CHAR</property>
<property name="selectable">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"></property>
</packing>
</child>
<child> <child>
<widget class="GtkAlignment" id="alignment3"> <widget class="GtkAlignment" id="alignment3">
<property name="visible">True</property> <property name="visible">True</property>
@ -1140,39 +1080,50 @@
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="summary_torrent_path"> <widget class="GtkAlignment" id="alignment62">
<property name="visible">True</property> <property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="xalign">0</property> <property name="right_padding">5</property>
<property name="wrap">True</property> <child>
<property name="wrap_mode">PANGO_WRAP_CHAR</property> <widget class="GtkLabel" id="label54">
<property name="selectable">True</property> <property name="visible">True</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="ypad">1</property>
<property name="label" translatable="yes">&lt;b&gt;Name:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
</child>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">1</property>
<property name="label" translatable="yes">&lt;b&gt;Private:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"></property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="summary_private"> <widget class="GtkAlignment" id="alignment56">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="right_padding">5</property>
<child>
<widget class="GtkLabel" id="label50">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">1</property>
<property name="label" translatable="yes">&lt;b&gt;Total Size:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
</child>
</widget>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="summary_name">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="wrap">True</property> <property name="wrap">True</property>
@ -1182,8 +1133,87 @@
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">5</property> <property name="y_options"></property>
<property name="bottom_attach">6</property> </packing>
</child>
<child>
<widget class="GtkLabel" id="summary_total_size">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="selectable">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="summary_num_files">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="selectable">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkAlignment" id="alignment55">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="right_padding">5</property>
<child>
<widget class="GtkLabel" id="label49">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">1</property>
<property name="label" translatable="yes">&lt;b&gt;# of files:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
</child>
</widget>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label51">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">1</property>
<property name="label" translatable="yes">&lt;b&gt;Tracker:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="summary_tracker">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="wrap">True</property>
<property name="wrap_mode">PANGO_WRAP_CHAR</property>
<property name="selectable">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"></property>
</packing> </packing>

View File

@ -63,6 +63,9 @@ class SideBar(component.Component):
self.liststore.append([_("Paused"), self.liststore.append([_("Paused"),
gtk.gdk.pixbuf_new_from_file( gtk.gdk.pixbuf_new_from_file(
deluge.common.get_pixmap("inactive16.png"))]) deluge.common.get_pixmap("inactive16.png"))])
self.liststore.append([_("Error"),
gtk.gdk.pixbuf_new_from_file(
deluge.common.get_pixmap("alert16.png"))])
# Create the column # Create the column
column = gtk.TreeViewColumn(_("Labels")) column = gtk.TreeViewColumn(_("Labels"))
column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
@ -112,4 +115,6 @@ class SideBar(component.Component):
component.get("TorrentView").set_filter("state", "Queued") component.get("TorrentView").set_filter("state", "Queued")
if value == "Paused": if value == "Paused":
component.get("TorrentView").set_filter("state", "Paused") component.get("TorrentView").set_filter("state", "Paused")
if value == "Error":
component.get("TorrentView").set_filter("state", "Error")

View File

@ -191,7 +191,7 @@ class ToolBar(component.Component):
except KeyError, e: except KeyError, e:
log.debug("Error getting torrent state: %s", e) log.debug("Error getting torrent state: %s", e)
continue continue
if status == "Paused": if status == "Paused" or status == "Error":
resume = True resume = True
else: else:
pause = True pause = True