mirror of
https://git.deluge-torrent.org/deluge
synced 2025-04-21 03:54:50 +00:00
Implement Last Seen Complete, on core and on GTK UI.
This commit is contained in:
parent
4044f52f77
commit
95d7caf3ac
4 changed files with 54 additions and 3 deletions
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue