Implement Last Seen Complete, on core and on GTK UI.

This commit is contained in:
Pedro Algarvio 2011-05-07 20:06:37 +01:00
parent 4044f52f77
commit 95d7caf3ac
4 changed files with 54 additions and 3 deletions

View file

@ -188,6 +188,13 @@ class Torrent(object):
else:
self.owner = owner
# XXX: Remove when libtorrent 0.16 get's released???
if lt.version_minor < 16:
if state:
self._last_seen_complete = state.last_seen_complete or 0.0
else:
self._last_seen_complete = 0.0
# Keep track if we're forcing a recheck of the torrent so that we can
# repause it after its done if necessary
self.forcing_recheck = False
@ -585,7 +592,6 @@ class Torrent(object):
if distributed_copies < 0:
distributed_copies = 0.0
#if you add a key here->add it to core.py STATUS_KEYS too.
full_status = {
"active_time": self.status.active_time,
"all_time_download": self.status.all_time_download,
@ -633,6 +639,10 @@ class Torrent(object):
"tracker_status": self.tracker_status,
"upload_payload_rate": self.status.upload_payload_rate
}
if lt.version_minor > 16:
full_status["last_seen_complete"] = self.status.last_seen_complete
else:
full_status["last_seen_complete"] = self._last_seen_complete
def ti_comment():
if self.handle.has_metadata():
@ -935,3 +945,13 @@ class Torrent(object):
for key in self.prev_status.keys():
if not self.rpcserver.is_session_valid(key):
del self.prev_status[key]
# XXX: Remove when libtorrent 0.16 get's released???
def calculate_last_seen_complete(self):
availability = self.handle.piece_availability()
if filter(lambda x: x<1, availability):
# Torrent does not have all the pieces
return
log.trace("Torrent %s has all the pieces. Setting last seen complete.",
self.torrent_id)
self._last_seen_complete = time.time()

View file

@ -85,7 +85,8 @@ class TorrentState:
move_completed_path=None,
magnet=None,
time_added=-1,
owner="",
last_seen_complete=0.0, # 0 is the default returned when the info
owner="", # does not exist on lt >= .16
shared=False
):
self.torrent_id = torrent_id
@ -96,6 +97,7 @@ class TorrentState:
self.is_finished = is_finished
self.magnet = magnet
self.time_added = time_added
self.last_seen_complete = last_seen_complete
self.owner = owner
# Options
@ -632,6 +634,17 @@ class TorrentManager(component.Component):
log.error("Torrent state file is either corrupt or incompatible! %s", e)
break
# XXX: Remove when libtorrent 0.16 get's released???
if lt.version_minor < 16:
log.debug("libtorrent version is lower than 0.16. Start looping "
"callback to calculate last_seen_complete info.")
def calculate_last_seen_complete():
for torrent in self.torrents.values():
torrent.calculate_last_seen_complete()
task = LoopingCall(calculate_last_seen_complete)
task.start(60)
component.get("EventManager").emit(SessionStartedEvent())
def save_state(self):
@ -670,6 +683,10 @@ class TorrentManager(component.Component):
torrent.owner,
torrent.options["shared"]
)
# XXX: Remove when libtorrent 0.16 get's released???
if lt.version_minor < 16:
torrent_state.last_seen_complete = torrent._last_seen_complete
state.torrents.append(torrent_state)
# Pickle the TorrentManagerState object

View file

@ -103,6 +103,14 @@ def cell_data_date(column, cell, model, row, data):
"""Display value as date, eg 05/05/08"""
cell.set_property('text', deluge.common.fdate(model.get_value(row, data)))
def cell_data_date_or_never(column, cell, model, row, data):
"""Display value as date, eg 05/05/08 or Never"""
value = model.get_value(row, data)
if value > 0.0:
cell.set_property('text', deluge.common.fdate(value))
else:
cell.set_property('text', _("Never"))
class ListViewColumnState:
"""Used for saving/loading column state"""
def __init__(self, name, position, width, visible, sort, sort_order):

View file

@ -240,6 +240,9 @@ class TorrentView(listview.ListView, component.Component):
status_field=["distributed_copies"])
self.add_func_column(_("Added"), listview.cell_data_date, [float],
status_field=["time_added"])
self.add_func_column(_("Last Seen Complete"),
listview.cell_data_date_or_never, [float],
status_field=["last_seen_complete"])
self.add_texticon_column(_("Tracker"),
status_field=["tracker_host", "tracker_host"],
function=cell_data_trackericon)
@ -395,7 +398,10 @@ class TorrentView(listview.ListView, component.Component):
if row[column_index[i]] != row_value:
row[column_index[i]] = row_value
except Exception, e:
log.debug("%s", e)
log.debug("Error while updating row for column "
"index %d, status field %r, value %r:"
" %s", column_index[0], status_field,
row_value, e)
component.get("MenuBar").update_menu()