mirror of
https://git.deluge-torrent.org/deluge
synced 2025-08-21 17:48:45 +00:00
[WebUI][Console] Add missing columns and statuses
Rename 'Seeders' to 'Seeds' Hide seconds from fdate unless wanted 'Last Seen Complete' renamed to 'Complete Seen' Added columns and status for Completed date Rename 'Seeders/Peers' to 'Seeds:Peers' For translation added colon to WebUI status strings to match GTK
This commit is contained in:
parent
43f12ffdd4
commit
aa5e5178d3
14 changed files with 355 additions and 255 deletions
|
@ -446,19 +446,24 @@ def ftime(seconds):
|
||||||
return '%dy %dw' % (years, weeks)
|
return '%dy %dw' % (years, weeks)
|
||||||
|
|
||||||
|
|
||||||
def fdate(seconds):
|
def fdate(seconds, date_only=False, precision_secs=False):
|
||||||
"""
|
"""
|
||||||
Formats a date time string in the locale's date representation based on the systems timezone
|
Formats a date time string in the locale's date representation based on the systems timezone
|
||||||
|
|
||||||
:param seconds: time in seconds since the Epoch
|
:param seconds: time in seconds since the Epoch
|
||||||
:type seconds: float
|
:type seconds: float
|
||||||
|
:param precision_secs: include seconds in time format
|
||||||
|
:type precision_secs: bool
|
||||||
:returns: a string in the locale's datetime representation or "" if seconds < 0
|
:returns: a string in the locale's datetime representation or "" if seconds < 0
|
||||||
:rtype: string
|
:rtype: string
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if seconds < 0:
|
if seconds < 0:
|
||||||
return ""
|
return ""
|
||||||
return time.strftime("%x %X", time.localtime(seconds))
|
if precision_secs:
|
||||||
|
return time.strftime("%x %X", time.localtime(seconds))
|
||||||
|
else:
|
||||||
|
return time.strftime("%x %H:%M", time.localtime(seconds))
|
||||||
|
|
||||||
|
|
||||||
def is_url(url):
|
def is_url(url):
|
||||||
|
|
|
@ -146,100 +146,119 @@ class FILTER:
|
||||||
QUEUED=7
|
QUEUED=7
|
||||||
|
|
||||||
DEFAULT_PREFS = {
|
DEFAULT_PREFS = {
|
||||||
"show_queue":True,
|
"show_queue": True,
|
||||||
"show_size":True,
|
"show_size": True,
|
||||||
"show_state":False,
|
"show_state": False,
|
||||||
"show_progress":True,
|
"show_progress": True,
|
||||||
"show_seeders":False,
|
"show_seeds": False,
|
||||||
"show_peers":False,
|
"show_peers": False,
|
||||||
"show_downspeed":True,
|
"show_downspeed": True,
|
||||||
"show_upspeed":True,
|
"show_upspeed": True,
|
||||||
"show_eta":True,
|
"show_eta": True,
|
||||||
"show_ratio":False,
|
"show_ratio": False,
|
||||||
"show_avail":False,
|
"show_avail": False,
|
||||||
"show_added":False,
|
"show_added": False,
|
||||||
"show_tracker":False,
|
"show_tracker": False,
|
||||||
"show_savepath":False,
|
"show_savepath": False,
|
||||||
"show_downloaded":False,
|
"show_downloaded": False,
|
||||||
"show_uploaded":False,
|
"show_uploaded": False,
|
||||||
"show_remaining":False,
|
"show_remaining": False,
|
||||||
"show_owner":False,
|
"show_owner": False,
|
||||||
"show_downloading_time":False,
|
"show_downloading_time": False,
|
||||||
"show_seeding_time":False,
|
"show_seeding_time": False,
|
||||||
"queue_width":4,
|
"show_completed": False,
|
||||||
"name_width":-1,
|
"show_seeds_peers_ratio": False,
|
||||||
"size_width":8,
|
"show_complete_seen": False,
|
||||||
"state_width":13,
|
"show_down_limit": False,
|
||||||
"progress_width":7,
|
"show_up_limit": False,
|
||||||
"seeders_width":10,
|
"show_shared": False,
|
||||||
"peers_width":10,
|
"queue_width": 4,
|
||||||
"downspeed_width":7,
|
"name_width": -1,
|
||||||
"upspeed_width":7,
|
"size_width": 8,
|
||||||
"eta_width":8,
|
"state_width": 13,
|
||||||
"ratio_width":10,
|
"progress_width": 7,
|
||||||
"avail_width":10,
|
"seeds_width": 10,
|
||||||
"added_width":25,
|
"peers_width": 10,
|
||||||
"tracker_width":15,
|
"downspeed_width": 7,
|
||||||
"savepath_width":15,
|
"upspeed_width": 7,
|
||||||
"downloaded_width":13,
|
"eta_width": 8,
|
||||||
"uploaded_width":13,
|
"ratio_width": 10,
|
||||||
"remaining_width":13,
|
"avail_width": 10,
|
||||||
"owner_width":10,
|
"added_width": 15,
|
||||||
"downloading_time_width":10,
|
"tracker_width": 15,
|
||||||
"seeding_time_width":10,
|
"savepath_width": 15,
|
||||||
"ignore_duplicate_lines": False,
|
"downloaded_width": 13,
|
||||||
"move_selection": True,
|
"uploaded_width": 13,
|
||||||
"third_tab_lists_all": False,
|
"remaining_width": 13,
|
||||||
"torrents_per_tab_press": 15,
|
"owner_width": 10,
|
||||||
"sort_primary": "queue",
|
"downloading_time_width": 10,
|
||||||
"sort_secondary": "name",
|
"seeding_time_width": 10,
|
||||||
"separate_complete": True,
|
"completed_width": 15,
|
||||||
"ring_bell": False,
|
"seeds_peers_ratio_width": 10,
|
||||||
"save_legacy_history": True,
|
"complete_seen_width": 15,
|
||||||
"first_run": True,
|
"down_limit_width": 7,
|
||||||
"addtorrents_show_misc_files": False, #TODO: Showing/hiding this
|
"up_limit_width": 7,
|
||||||
"addtorrents_show_hidden_folders": False, #TODO: Showing/hiding this
|
"shared_width": 10,
|
||||||
"addtorrents_sort_column": "date",
|
"ignore_duplicate_lines": False,
|
||||||
"addtorrents_reverse_sort": True,
|
"move_selection": True,
|
||||||
"addtorrents_last_path": "~"
|
"third_tab_lists_all": False,
|
||||||
|
"torrents_per_tab_press": 15,
|
||||||
|
"sort_primary": "queue",
|
||||||
|
"sort_secondary": "name",
|
||||||
|
"separate_complete": True,
|
||||||
|
"ring_bell": False,
|
||||||
|
"save_legacy_history": True,
|
||||||
|
"first_run": True,
|
||||||
|
"addtorrents_show_misc_files": False, #TODO: Showing/hiding this
|
||||||
|
"addtorrents_show_hidden_folders": False, #TODO: Showing/hiding this
|
||||||
|
"addtorrents_sort_column": "date",
|
||||||
|
"addtorrents_reverse_sort": True,
|
||||||
|
"addtorrents_last_path": "~"
|
||||||
}
|
}
|
||||||
|
|
||||||
column_pref_names = ["queue","name","size","state",
|
column_pref_names = ["queue", "name", "size", "state", "progress", "seeds",
|
||||||
"progress","seeders","peers",
|
"peers", "downspeed", "upspeed", "eta", "ratio", "avail",
|
||||||
"downspeed","upspeed","eta",
|
"added", "tracker", "savepath","downloaded","uploaded",
|
||||||
"ratio","avail","added","tracker",
|
"remaining", "owner","downloading_time","seeding_time",
|
||||||
"savepath","downloaded","uploaded", "remaining",
|
"completed", "seeds_peers_ratio", "complete_seen",
|
||||||
"owner","downloading_time","seeding_time"]
|
"down_limit", "up_limit", "shared",
|
||||||
|
]
|
||||||
|
|
||||||
prefs_to_names = {
|
prefs_to_names = {
|
||||||
"queue":"#",
|
"queue": "#",
|
||||||
"name":"Name",
|
"name": "Name",
|
||||||
"size":"Size",
|
"size": "Size",
|
||||||
"state":"State",
|
"state": "State",
|
||||||
"progress":"Progress",
|
"progress": "Progress",
|
||||||
"seeders":"Seeders",
|
"seeds": "Seeds",
|
||||||
"peers":"Peers",
|
"peers": "Peers",
|
||||||
"downspeed":"Down Speed",
|
"downspeed": "Down Speed",
|
||||||
"upspeed":"Up Speed",
|
"upspeed": "Up Speed",
|
||||||
"eta":"ETA",
|
"eta": "ETA",
|
||||||
"ratio":"Ratio",
|
"ratio": "Ratio",
|
||||||
"avail":"Avail",
|
"avail": "Avail",
|
||||||
"added":"Added",
|
"added": "Added",
|
||||||
"tracker":"Tracker",
|
"tracker": "Tracker",
|
||||||
"savepath":"Save Path",
|
"savepath": "Save Path",
|
||||||
"downloaded":"Downloaded",
|
"downloaded": "Downloaded",
|
||||||
"uploaded":"Uploaded",
|
"uploaded": "Uploaded",
|
||||||
"remaining":"Remaining",
|
"remaining": "Remaining",
|
||||||
"owner":"Owner",
|
"owner": "Owner",
|
||||||
"seeding_time":"Seeding Time",
|
"seeding_time": "Seeding Time",
|
||||||
"downloading_time":"Active Time"
|
"downloading_time": "Active Time",
|
||||||
|
"complete_seen": "Complete Seen",
|
||||||
|
"completed": "Completed",
|
||||||
|
"seeds_peers_ratio": "Seeds:Peers",
|
||||||
|
"down_limit": "Down Limit",
|
||||||
|
"up_limit": "Up Limit",
|
||||||
|
"shared": "Shared"
|
||||||
}
|
}
|
||||||
|
|
||||||
column_names_to_state_keys = {
|
column_names_to_state_keys = {
|
||||||
"size": "total_wanted",
|
"size": "total_wanted",
|
||||||
"downspeed": "download_payload_rate",
|
"downspeed": "download_payload_rate",
|
||||||
"upspeed": "upload_payload_rate",
|
"upspeed": "upload_payload_rate",
|
||||||
"seeders": "num_seeds",
|
"seeds": "num_seeds",
|
||||||
"peers": "num_peers",
|
"peers": "num_peers",
|
||||||
"avail": "distributed_copies",
|
"avail": "distributed_copies",
|
||||||
"added": "time_added",
|
"added": "time_added",
|
||||||
|
@ -247,10 +266,15 @@ column_names_to_state_keys = {
|
||||||
"savepath": "save_path",
|
"savepath": "save_path",
|
||||||
"uploaded": "total_uploaded",
|
"uploaded": "total_uploaded",
|
||||||
"downloaded": "all_time_download",
|
"downloaded": "all_time_download",
|
||||||
"remaining":"total_remaining",
|
"remaining": "total_remaining",
|
||||||
"seeding_time":"seeding_time",
|
"seeding_time": "seeding_time",
|
||||||
"downloading_time":"active_time"
|
"downloading_time": "active_time",
|
||||||
|
"complete_seen": "last_seen_complete",
|
||||||
|
"completed": "completed_time",
|
||||||
|
"seeds_peers_ratio": "seeds_peers_ratio",
|
||||||
|
"down_limit": "max_download_speed",
|
||||||
|
"up_limit": "max_upload_speed",
|
||||||
|
"shared": "shared"
|
||||||
}
|
}
|
||||||
|
|
||||||
reverse_sort_fields = [
|
reverse_sort_fields = [
|
||||||
|
@ -313,30 +337,35 @@ class AllTorrents(BaseMode, component.Component):
|
||||||
component.start(["AllTorrents"])
|
component.start(["AllTorrents"])
|
||||||
|
|
||||||
self._info_fields = [
|
self._info_fields = [
|
||||||
("Name",None,("name",)),
|
("Name",None, ("name",)),
|
||||||
("State", None, ("state",)),
|
("State", None, ("state",)),
|
||||||
("Down Speed", format_utils.format_speed, ("download_payload_rate",)),
|
("Down Speed", format_utils.format_speed, ("download_payload_rate",)),
|
||||||
("Up Speed", format_utils.format_speed, ("upload_payload_rate",)),
|
("Up Speed", format_utils.format_speed, ("upload_payload_rate",)),
|
||||||
("Progress", format_utils.format_progress, ("progress",)),
|
("Progress", format_utils.format_progress, ("progress",)),
|
||||||
("ETA", deluge.common.ftime, ("eta",)),
|
("ETA", deluge.common.ftime, ("eta",)),
|
||||||
("Path", None, ("save_path",)),
|
("Path", None, ("save_path",)),
|
||||||
("Downloaded",deluge.common.fsize,("all_time_download",)),
|
("Downloaded", deluge.common.fsize, ("all_time_download",)),
|
||||||
("Uploaded", deluge.common.fsize,("total_uploaded",)),
|
("Uploaded", deluge.common.fsize, ("total_uploaded",)),
|
||||||
("Share Ratio", format_utils.format_float, ("ratio",)),
|
("Share Ratio", format_utils.format_float, ("ratio",)),
|
||||||
("Seeders",format_utils.format_seeds_peers,("num_seeds","total_seeds")),
|
("Seeds", format_utils.format_seeds_peers, ("num_seeds", "total_seeds")),
|
||||||
("Peers",format_utils.format_seeds_peers,("num_peers","total_peers")),
|
("Peers", format_utils.format_seeds_peers,("num_peers", "total_peers")),
|
||||||
("Active Time",deluge.common.ftime,("active_time",)),
|
("Active Time", deluge.common.ftime, ("active_time",)),
|
||||||
("Seeding Time",deluge.common.ftime,("seeding_time",)),
|
("Seeding Time", deluge.common.ftime, ("seeding_time",)),
|
||||||
("Date Added",deluge.common.fdate,("time_added",)),
|
("Complete Seen", format_utils.format_date_never, ("last_seen_complete",)),
|
||||||
|
("Date Added", format_utils.format_time, ("time_added",)),
|
||||||
|
("Completed", format_utils.format_date, ("completed_time",)),
|
||||||
("Availability", format_utils.format_float, ("distributed_copies",)),
|
("Availability", format_utils.format_float, ("distributed_copies",)),
|
||||||
("Pieces", format_utils.format_pieces, ("num_pieces","piece_length")),
|
("Pieces", format_utils.format_pieces, ("num_pieces", "piece_length")),
|
||||||
|
("Seed Rank", str, ("seed_rank",)),
|
||||||
]
|
]
|
||||||
|
|
||||||
self.__status_keys = ["name","state","download_payload_rate","upload_payload_rate",
|
self.__status_keys = ["name", "state", "download_payload_rate", "upload_payload_rate",
|
||||||
"progress","eta","all_time_download","total_uploaded", "ratio",
|
"progress", "eta", "save_path", "all_time_download", "total_uploaded",
|
||||||
"num_seeds","total_seeds","num_peers","total_peers", "active_time",
|
"ratio", "num_seeds", "total_seeds", "num_peers", "total_peers",
|
||||||
"seeding_time","time_added","distributed_copies", "num_pieces",
|
"active_time", "seeding_time", "last_seen_complete", "time_added",
|
||||||
"piece_length","save_path"]
|
"completed_time", "distributed_copies", "num_pieces", "piece_length",
|
||||||
|
"seed_rank"
|
||||||
|
]
|
||||||
|
|
||||||
self.legacy_mode = Legacy(self.stdscr, self.encoding)
|
self.legacy_mode = Legacy(self.stdscr, self.encoding)
|
||||||
|
|
||||||
|
|
|
@ -48,27 +48,33 @@ def format_queue(qnum):
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
columns = {
|
columns = {
|
||||||
"#":(("queue",),format_queue),
|
"#": (("queue",), format_queue),
|
||||||
"Name":(("name",),None),
|
"Name": (("name",), None),
|
||||||
"Size":(("total_wanted",),deluge.common.fsize),
|
"Size": (("total_wanted",), deluge.common.fsize),
|
||||||
"State":(("state",),None),
|
"State": (("state",), None),
|
||||||
"Progress":(("progress",),format_utils.format_progress),
|
"Progress": (("progress",), format_utils.format_progress),
|
||||||
"Seeders":(("num_seeds","total_seeds"),format_utils.format_seeds_peers),
|
"Seeds": (("num_seeds","total_seeds"), format_utils.format_seeds_peers),
|
||||||
"Peers":(("num_peers","total_peers"),format_utils.format_seeds_peers),
|
"Peers": (("num_peers","total_peers"), format_utils.format_seeds_peers),
|
||||||
"Down Speed":(("download_payload_rate",),format_utils.format_speed),
|
"Down Speed": (("download_payload_rate",), format_utils.format_speed),
|
||||||
"Up Speed":(("upload_payload_rate",),format_utils.format_speed),
|
"Up Speed": (("upload_payload_rate",), format_utils.format_speed),
|
||||||
"ETA":(("eta",), format_utils.format_time),
|
"ETA": (("eta",), format_utils.format_time),
|
||||||
"Ratio":(("ratio",), format_utils.format_float),
|
"Ratio": (("ratio",), format_utils.format_float),
|
||||||
"Avail":(("distributed_copies",), format_utils.format_float),
|
"Avail": (("distributed_copies",), format_utils.format_float),
|
||||||
"Added":(("time_added",), deluge.common.fdate),
|
"Added": (("time_added",), deluge.common.fdate),
|
||||||
"Tracker":(("tracker_host",), None),
|
"Tracker": (("tracker_host",), None),
|
||||||
"Save Path":(("save_path",), None),
|
"Save Path": (("save_path",), None),
|
||||||
"Downloaded":(("all_time_download",), deluge.common.fsize),
|
"Downloaded": (("all_time_download",), deluge.common.fsize),
|
||||||
"Uploaded":(("total_uploaded",), deluge.common.fsize),
|
"Uploaded": (("total_uploaded",), deluge.common.fsize),
|
||||||
"Remaining":(("total_remaining",), deluge.common.fsize),
|
"Remaining": (("total_remaining",), deluge.common.fsize),
|
||||||
"Owner":(("owner",),None),
|
"Owner": (("owner",), None),
|
||||||
"Active Time":(("active_time",), deluge.common.ftime),
|
"Shared": (("shared",), str),
|
||||||
"Seeding Time":(("seeding_time",), deluge.common.ftime)
|
"Active Time": (("active_time",), deluge.common.ftime),
|
||||||
|
"Seeding Time": (("seeding_time",), deluge.common.ftime),
|
||||||
|
"Complete Seen": (("last_seen_complete",), format_utils.format_date_never),
|
||||||
|
"Completed": (("completed_time",), format_utils.format_date),
|
||||||
|
"Seeds:Peers": (("seeds_peers_ratio",), format_utils.format_float),
|
||||||
|
"Down Limit": (("max_download_speed",), format_utils.format_speed),
|
||||||
|
"Up Limit": (("max_upload_speed",), format_utils.format_speed),
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_column_value(name,state):
|
def get_column_value(name,state):
|
||||||
|
|
|
@ -53,6 +53,18 @@ def format_time(time):
|
||||||
else:
|
else:
|
||||||
return "-"
|
return "-"
|
||||||
|
|
||||||
|
def format_date(time):
|
||||||
|
if (time > 0):
|
||||||
|
return deluge.common.fdate(time)
|
||||||
|
else:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def format_date_never(time):
|
||||||
|
if (time > 0):
|
||||||
|
return deluge.common.fdate(time)
|
||||||
|
else:
|
||||||
|
return "Never"
|
||||||
|
|
||||||
def format_float(x):
|
def format_float(x):
|
||||||
if x < 0:
|
if x < 0:
|
||||||
return "-"
|
return "-"
|
||||||
|
@ -243,4 +255,4 @@ def pad_string(string, length, character=" ", side="right"):
|
||||||
if side == "left":
|
if side == "left":
|
||||||
return "%s%s" % (character * diff, string)
|
return "%s%s" % (character * diff, string)
|
||||||
elif side == "right":
|
elif side == "right":
|
||||||
return "%s%s" % (string, character * diff)
|
return "%s%s" % (string, character * diff)
|
||||||
|
|
|
@ -103,11 +103,11 @@ class TorrentDetail(BaseMode, component.Component):
|
||||||
self.torrent_state = None
|
self.torrent_state = None
|
||||||
self.popup = None
|
self.popup = None
|
||||||
self.messages = deque()
|
self.messages = deque()
|
||||||
self._status_keys = ["files", "name","state","download_payload_rate","upload_payload_rate",
|
self._status_keys = ["files", "name", "state", "download_payload_rate", "upload_payload_rate",
|
||||||
"progress","eta","all_time_download","total_uploaded", "ratio",
|
"progress", "eta", "all_time_download", "total_uploaded", "ratio",
|
||||||
"num_seeds","total_seeds","num_peers","total_peers", "active_time",
|
"num_seeds", "total_seeds", "num_peers", "total_peers", "active_time",
|
||||||
"seeding_time","time_added","distributed_copies", "num_pieces",
|
"seeding_time", "time_added", "distributed_copies", "num_pieces",
|
||||||
"piece_length","save_path","file_progress","file_priorities","message",
|
"piece_length", "save_path", "file_progress", "file_priorities", "message",
|
||||||
"total_wanted", "tracker_host", "owner"]
|
"total_wanted", "tracker_host", "owner"]
|
||||||
|
|
||||||
self.file_list = None
|
self.file_list = None
|
||||||
|
@ -164,7 +164,7 @@ class TorrentDetail(BaseMode, component.Component):
|
||||||
self.files_sep = "{!green,black,bold,underline!}%s"%(("Files (File list unknown)").center(self.cols))
|
self.files_sep = "{!green,black,bold,underline!}%s"%(("Files (File list unknown)").center(self.cols))
|
||||||
need_prio_update = True
|
need_prio_update = True
|
||||||
self.__fill_progress(self.file_list,state["file_progress"])
|
self.__fill_progress(self.file_list,state["file_progress"])
|
||||||
for i,prio in enumerate(state["file_priorities"]):
|
for i, prio in enumerate(state["file_priorities"]):
|
||||||
if self.file_dict[i][6] != prio:
|
if self.file_dict[i][6] != prio:
|
||||||
need_prio_update = True
|
need_prio_update = True
|
||||||
self.file_dict[i][6] = prio
|
self.file_dict[i][6] = prio
|
||||||
|
@ -475,10 +475,10 @@ class TorrentDetail(BaseMode, component.Component):
|
||||||
s+= " {!info!}Ratio: {!input!}%s" % ratio_str
|
s+= " {!info!}Ratio: {!input!}%s" % ratio_str
|
||||||
self.add_string(off, s); off += 1
|
self.add_string(off, s); off += 1
|
||||||
|
|
||||||
#Seeder/leecher info
|
#Seed/peer info
|
||||||
s = "{!info!}Seeders:{!green!} %s {!input!}(%s)" % (status["num_seeds"], status["total_seeds"])
|
s = "{!info!}Seeds:{!green!} %s {!input!}(%s)" % (status["num_seeds"], status["total_seeds"])
|
||||||
self.add_string(off, s); off += 1
|
self.add_string(off, s); off += 1
|
||||||
s = "{!info!}Leechers:{!red!} %s {!input!}(%s)" % (status["num_peers"], status["total_peers"])
|
s = "{!info!}Peers:{!red!} %s {!input!}(%s)" % (status["num_peers"], status["total_peers"])
|
||||||
self.add_string(off, s); off += 1
|
self.add_string(off, s); off += 1
|
||||||
|
|
||||||
#Tracker
|
#Tracker
|
||||||
|
|
|
@ -448,8 +448,8 @@ class FilesTab(Tab):
|
||||||
return
|
return
|
||||||
|
|
||||||
# Store this torrent's compact setting
|
# Store this torrent's compact setting
|
||||||
if status["storage_mode"] == "compact":
|
if "storage_mode" in status:
|
||||||
self.__compact = True
|
self.__compact = status["storage_mode"] == "compact"
|
||||||
|
|
||||||
if "is_seed" in status:
|
if "is_seed" in status:
|
||||||
self.__is_seed = status["is_seed"]
|
self.__is_seed = status["is_seed"]
|
||||||
|
|
|
@ -134,20 +134,6 @@
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="summary_seed_rank">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="left_attach">7</property>
|
|
||||||
<property name="right_attach">8</property>
|
|
||||||
<property name="top_attach">2</property>
|
|
||||||
<property name="bottom_attach">3</property>
|
|
||||||
<property name="x_options">GTK_FILL</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="summary_seed_time">
|
<object class="GtkLabel" id="summary_seed_time">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -162,24 +148,6 @@
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label20">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="label" translatable="yes">Seed Rank:</property>
|
|
||||||
<attributes>
|
|
||||||
<attribute name="weight" value="bold"/>
|
|
||||||
</attributes>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="left_attach">6</property>
|
|
||||||
<property name="right_attach">7</property>
|
|
||||||
<property name="top_attach">2</property>
|
|
||||||
<property name="bottom_attach">3</property>
|
|
||||||
<property name="x_options">GTK_FILL</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label19">
|
<object class="GtkLabel" id="label19">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -290,43 +258,6 @@
|
||||||
<property name="y_options">GTK_FILL</property>
|
<property name="y_options">GTK_FILL</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="summary_last_seen_complete">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="wrap">True</property>
|
|
||||||
<property name="wrap_mode">char</property>
|
|
||||||
<property name="selectable">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="left_attach">5</property>
|
|
||||||
<property name="right_attach">8</property>
|
|
||||||
<property name="top_attach">4</property>
|
|
||||||
<property name="bottom_attach">5</property>
|
|
||||||
<property name="y_options">GTK_FILL</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label_last_seen_complete">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="yalign">0</property>
|
|
||||||
<property name="label" translatable="yes">Last Seen Complete:</property>
|
|
||||||
<attributes>
|
|
||||||
<attribute name="weight" value="bold"/>
|
|
||||||
</attributes>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="left_attach">4</property>
|
|
||||||
<property name="right_attach">5</property>
|
|
||||||
<property name="top_attach">4</property>
|
|
||||||
<property name="bottom_attach">5</property>
|
|
||||||
<property name="x_options">GTK_FILL</property>
|
|
||||||
<property name="y_options">GTK_FILL</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="summary_availability">
|
<object class="GtkLabel" id="summary_availability">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -423,7 +354,7 @@
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="summary_seeders">
|
<object class="GtkLabel" id="summary_seeds">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
|
@ -439,7 +370,7 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">Seeders:</property>
|
<property name="label" translatable="yes">Seeds:</property>
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="weight" value="bold"/>
|
<attribute name="weight" value="bold"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
|
@ -726,6 +657,106 @@
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="label20">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<property name="label" translatable="yes">Seed Rank:</property>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="weight" value="bold"/>
|
||||||
|
</attributes>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">4</property>
|
||||||
|
<property name="right_attach">5</property>
|
||||||
|
<property name="top_attach">4</property>
|
||||||
|
<property name="bottom_attach">5</property>
|
||||||
|
<property name="x_options">GTK_FILL</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="summary_seed_rank">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">5</property>
|
||||||
|
<property name="right_attach">6</property>
|
||||||
|
<property name="top_attach">4</property>
|
||||||
|
<property name="bottom_attach">5</property>
|
||||||
|
<property name="x_options">GTK_FILL</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="label_last_seen_complete">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<property name="yalign">0</property>
|
||||||
|
<property name="label" translatable="yes">Complete Seen:</property>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="weight" value="bold"/>
|
||||||
|
</attributes>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">6</property>
|
||||||
|
<property name="right_attach">7</property>
|
||||||
|
<property name="top_attach">2</property>
|
||||||
|
<property name="bottom_attach">3</property>
|
||||||
|
<property name="x_options">GTK_FILL</property>
|
||||||
|
<property name="y_options">GTK_FILL</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="summary_last_seen_complete">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<property name="wrap">True</property>
|
||||||
|
<property name="wrap_mode">char</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">7</property>
|
||||||
|
<property name="right_attach">8</property>
|
||||||
|
<property name="top_attach">2</property>
|
||||||
|
<property name="bottom_attach">3</property>
|
||||||
|
<property name="y_options">GTK_FILL</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="label_completed">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<property name="label" translatable="yes">Completed:</property>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="weight" value="bold"/>
|
||||||
|
</attributes>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">6</property>
|
||||||
|
<property name="right_attach">7</property>
|
||||||
|
<property name="top_attach">4</property>
|
||||||
|
<property name="bottom_attach">5</property>
|
||||||
|
<property name="x_options">GTK_FILL</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="summary_completed">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">7</property>
|
||||||
|
<property name="right_attach">8</property>
|
||||||
|
<property name="top_attach">4</property>
|
||||||
|
<property name="bottom_attach">5</property>
|
||||||
|
<property name="x_options">GTK_FILL</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -1926,9 +1957,6 @@
|
||||||
<property name="y_options">GTK_FILL</property>
|
<property name="y_options">GTK_FILL</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
|
||||||
<placeholder/>
|
|
||||||
</child>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkAlignment" id="alignment1">
|
<object class="GtkAlignment" id="alignment1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -1977,6 +2005,9 @@
|
||||||
<property name="bottom_attach">2</property>
|
<property name="bottom_attach">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">2</property>
|
<property name="left_attach">2</property>
|
||||||
|
|
|
@ -64,6 +64,13 @@ def fspeed(value, max_value=-1):
|
||||||
else:
|
else:
|
||||||
return deluge.common.fspeed(value)
|
return deluge.common.fspeed(value)
|
||||||
|
|
||||||
|
def fdate(value):
|
||||||
|
"""Display value as date, eg 05/05/08 or blank"""
|
||||||
|
if value > 0.0:
|
||||||
|
return deluge.common.fdate(value)
|
||||||
|
else:
|
||||||
|
return ""
|
||||||
|
|
||||||
def fdate_or_never(value):
|
def fdate_or_never(value):
|
||||||
"""Display value as date, eg 05/05/08 or Never"""
|
"""Display value as date, eg 05/05/08 or Never"""
|
||||||
if value > 0.0:
|
if value > 0.0:
|
||||||
|
@ -95,7 +102,7 @@ class StatusTab(Tab):
|
||||||
(builder.get_object("summary_total_uploaded"), fpeer_sized, ("total_uploaded", "total_payload_upload")),
|
(builder.get_object("summary_total_uploaded"), fpeer_sized, ("total_uploaded", "total_payload_upload")),
|
||||||
(builder.get_object("summary_download_speed"), fspeed, ("download_payload_rate", "max_download_speed")),
|
(builder.get_object("summary_download_speed"), fspeed, ("download_payload_rate", "max_download_speed")),
|
||||||
(builder.get_object("summary_upload_speed"), fspeed, ("upload_payload_rate", "max_upload_speed")),
|
(builder.get_object("summary_upload_speed"), fspeed, ("upload_payload_rate", "max_upload_speed")),
|
||||||
(builder.get_object("summary_seeders"), deluge.common.fpeer, ("num_seeds", "total_seeds")),
|
(builder.get_object("summary_seeds"), deluge.common.fpeer, ("num_seeds", "total_seeds")),
|
||||||
(builder.get_object("summary_peers"), deluge.common.fpeer, ("num_peers", "total_peers")),
|
(builder.get_object("summary_peers"), deluge.common.fpeer, ("num_peers", "total_peers")),
|
||||||
(builder.get_object("summary_eta"), deluge.common.ftime, ("eta",)),
|
(builder.get_object("summary_eta"), deluge.common.ftime, ("eta",)),
|
||||||
(builder.get_object("summary_share_ratio"), fratio, ("ratio",)),
|
(builder.get_object("summary_share_ratio"), fratio, ("ratio",)),
|
||||||
|
@ -108,6 +115,7 @@ class StatusTab(Tab):
|
||||||
(builder.get_object("progressbar"), fpcnt, ("progress",)),
|
(builder.get_object("progressbar"), fpcnt, ("progress",)),
|
||||||
(builder.get_object("summary_date_added"), deluge.common.fdate, ("time_added",)),
|
(builder.get_object("summary_date_added"), deluge.common.fdate, ("time_added",)),
|
||||||
(builder.get_object("summary_last_seen_complete"), fdate_or_never, ("last_seen_complete",)),
|
(builder.get_object("summary_last_seen_complete"), fdate_or_never, ("last_seen_complete",)),
|
||||||
|
(builder.get_object("summary_completed"), fdate, ("completed_time",)),
|
||||||
]
|
]
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
|
@ -129,7 +137,8 @@ class StatusTab(Tab):
|
||||||
"total_seeds", "eta", "ratio", "next_announce",
|
"total_seeds", "eta", "ratio", "next_announce",
|
||||||
"tracker_status", "max_connections", "max_upload_slots",
|
"tracker_status", "max_connections", "max_upload_slots",
|
||||||
"max_upload_speed", "max_download_speed", "active_time",
|
"max_upload_speed", "max_download_speed", "active_time",
|
||||||
"seeding_time", "seed_rank", "is_auto_managed", "time_added", "last_seen_complete"]
|
"seeding_time", "seed_rank", "is_auto_managed", "time_added",
|
||||||
|
"last_seen_complete", "completed_time"]
|
||||||
if self.config['show_piecesbar']:
|
if self.config['show_piecesbar']:
|
||||||
status_keys.extend(["pieces", "state"])
|
status_keys.extend(["pieces", "state"])
|
||||||
|
|
||||||
|
|
|
@ -271,13 +271,13 @@ class TorrentView(listview.ListView, component.Component):
|
||||||
status_field=["progress", "state"],
|
status_field=["progress", "state"],
|
||||||
col_types=[float, str],
|
col_types=[float, str],
|
||||||
function=funcs.cell_data_progress)
|
function=funcs.cell_data_progress)
|
||||||
self.add_func_column(_("Seeders"), funcs.cell_data_peer, [int, int],
|
self.add_func_column(_("Seeds"), funcs.cell_data_peer, [int, int],
|
||||||
status_field=["num_seeds", "total_seeds"],
|
status_field=["num_seeds", "total_seeds"],
|
||||||
sort_func=seed_peer_column_sort, default=False)
|
sort_func=seed_peer_column_sort, default=False)
|
||||||
self.add_func_column(_("Peers"), funcs.cell_data_peer, [int, int],
|
self.add_func_column(_("Peers"), funcs.cell_data_peer, [int, int],
|
||||||
status_field=["num_peers", "total_peers"],
|
status_field=["num_peers", "total_peers"],
|
||||||
sort_func=seed_peer_column_sort, default=False)
|
sort_func=seed_peer_column_sort, default=False)
|
||||||
self.add_func_column(_("Seeders") + "/" + _("Peers"), funcs.cell_data_ratio_seeders, [float],
|
self.add_func_column(_("Seeds:Peers"), funcs.cell_data_ratio_seeds_peers, [float],
|
||||||
status_field=["seeds_peers_ratio"], default=False)
|
status_field=["seeds_peers_ratio"], default=False)
|
||||||
self.add_func_column(_("Down Speed"), funcs.cell_data_speed_down, [float],
|
self.add_func_column(_("Down Speed"), funcs.cell_data_speed_down, [float],
|
||||||
status_field=["download_payload_rate"])
|
status_field=["download_payload_rate"])
|
||||||
|
@ -295,15 +295,12 @@ class TorrentView(listview.ListView, component.Component):
|
||||||
status_field=["distributed_copies"], default=False)
|
status_field=["distributed_copies"], default=False)
|
||||||
self.add_func_column(_("Added"), funcs.cell_data_date, [float],
|
self.add_func_column(_("Added"), funcs.cell_data_date, [float],
|
||||||
status_field=["time_added"], default=False)
|
status_field=["time_added"], default=False)
|
||||||
self.add_func_column(_("Completed"),
|
self.add_func_column(_("Completed"), funcs.cell_data_date, [float],
|
||||||
funcs.cell_data_date_or_never, [float],
|
|
||||||
status_field=["completed_time"], default=False)
|
status_field=["completed_time"], default=False)
|
||||||
self.add_func_column(_("Last Seen Complete"),
|
self.add_func_column(_("Complete Seen"), funcs.cell_data_date_or_never, [float],
|
||||||
funcs.cell_data_date_or_never, [float],
|
|
||||||
status_field=["last_seen_complete"], default=False)
|
status_field=["last_seen_complete"], default=False)
|
||||||
self.add_texticon_column(_("Tracker"),
|
self.add_texticon_column(_("Tracker"), function=funcs.cell_data_trackericon,
|
||||||
status_field=["tracker_host", "tracker_host"],
|
status_field=["tracker_host", "tracker_host"], default=False)
|
||||||
function=funcs.cell_data_trackericon, default=False)
|
|
||||||
self.add_text_column(_("Save Path"), status_field=["save_path"], default=False)
|
self.add_text_column(_("Save Path"), status_field=["save_path"], default=False)
|
||||||
self.add_text_column(_("Owner"), status_field=["owner"], default=False)
|
self.add_text_column(_("Owner"), status_field=["owner"], default=False)
|
||||||
self.restore_columns_order_from_state()
|
self.restore_columns_order_from_state()
|
||||||
|
|
|
@ -84,7 +84,7 @@ def _t(text):
|
||||||
func_last_value = {"cell_data_speed_down": None,
|
func_last_value = {"cell_data_speed_down": None,
|
||||||
"cell_data_speed_up": None,
|
"cell_data_speed_up": None,
|
||||||
"cell_data_time": None,
|
"cell_data_time": None,
|
||||||
"cell_data_ratio_seeders": None,
|
"cell_data_ratio_seeds_peers": None,
|
||||||
"cell_data_ratio_ratio": None,
|
"cell_data_ratio_ratio": None,
|
||||||
"cell_data_ratio_avail": None,
|
"cell_data_ratio_avail": None,
|
||||||
"cell_data_date": None,
|
"cell_data_date": None,
|
||||||
|
@ -269,8 +269,8 @@ def cell_data_ratio(cell, model, row, data, cache_key):
|
||||||
func_last_value[cache_key] = ratio
|
func_last_value[cache_key] = ratio
|
||||||
cell.set_property('text', "∞" if ratio < 0 else "%.3f" % ratio)
|
cell.set_property('text', "∞" if ratio < 0 else "%.3f" % ratio)
|
||||||
|
|
||||||
def cell_data_ratio_seeders(column, cell, model, row, data):
|
def cell_data_ratio_seeds_peers(column, cell, model, row, data):
|
||||||
cell_data_ratio(cell, model, row, data, "cell_data_ratio_seeders")
|
cell_data_ratio(cell, model, row, data, "cell_data_ratio_seeds_peers")
|
||||||
|
|
||||||
def cell_data_ratio_ratio(column, cell, model, row, data):
|
def cell_data_ratio_ratio(column, cell, model, row, data):
|
||||||
cell_data_ratio(cell, model, row, data, "cell_data_ratio_ratio")
|
cell_data_ratio(cell, model, row, data, "cell_data_ratio_ratio")
|
||||||
|
@ -286,7 +286,7 @@ def cell_data_date(column, cell, model, row, data):
|
||||||
return
|
return
|
||||||
func_last_value["cell_data_date"] = date
|
func_last_value["cell_data_date"] = date
|
||||||
|
|
||||||
date_str = common.fdate(date)
|
date_str = common.fdate(date) if date > 0.0 else ""
|
||||||
cell.set_property('text', date_str)
|
cell.set_property('text', date_str)
|
||||||
|
|
||||||
def cell_data_date_or_never(column, cell, model, row, data):
|
def cell_data_date_or_never(column, cell, model, row, data):
|
||||||
|
|
|
@ -42,9 +42,9 @@ Deluge.Keys = {
|
||||||
* <pre>['queue', 'name', 'total_size', 'total_wanted', 'state', 'progress', 'num_seeds',
|
* <pre>['queue', 'name', 'total_size', 'total_wanted', 'state', 'progress', 'num_seeds',
|
||||||
* 'total_seeds', 'num_peers', 'total_peers', 'download_payload_rate',
|
* 'total_seeds', 'num_peers', 'total_peers', 'download_payload_rate',
|
||||||
* 'upload_payload_rate', 'eta', 'ratio', 'distributed_copies',
|
* 'upload_payload_rate', 'eta', 'ratio', 'distributed_copies',
|
||||||
* 'is_auto_managed', 'time_added', 'tracker_host', 'save_path',
|
* 'is_auto_managed', 'time_added', 'tracker_host', 'save_path', 'last_seen_complete',
|
||||||
* 'total_done', 'total_uploaded', 'max_download_speed', 'max_upload_speed',
|
* 'total_done', 'total_uploaded', 'max_download_speed', 'max_upload_speed',
|
||||||
* 'seeds_peers_ratio', 'total_remaining']</pre>
|
* 'seeds_peers_ratio', 'total_remaining', 'completed_time']</pre>
|
||||||
*/
|
*/
|
||||||
Grid: [
|
Grid: [
|
||||||
'queue', 'name', 'total_size', 'total_wanted', 'state', 'progress', 'num_seeds',
|
'queue', 'name', 'total_size', 'total_wanted', 'state', 'progress', 'num_seeds',
|
||||||
|
@ -52,7 +52,7 @@ Deluge.Keys = {
|
||||||
'upload_payload_rate', 'eta', 'ratio', 'distributed_copies',
|
'upload_payload_rate', 'eta', 'ratio', 'distributed_copies',
|
||||||
'is_auto_managed', 'time_added', 'tracker_host', 'save_path', 'last_seen_complete',
|
'is_auto_managed', 'time_added', 'tracker_host', 'save_path', 'last_seen_complete',
|
||||||
'total_done', 'total_uploaded', 'max_download_speed', 'max_upload_speed',
|
'total_done', 'total_uploaded', 'max_download_speed', 'max_upload_speed',
|
||||||
'seeds_peers_ratio', 'total_remaining'
|
'seeds_peers_ratio', 'total_remaining', 'completed_time'
|
||||||
],
|
],
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -61,13 +61,13 @@ Deluge.Keys = {
|
||||||
* <pre>['total_done', 'total_payload_download', 'total_uploaded',
|
* <pre>['total_done', 'total_payload_download', 'total_uploaded',
|
||||||
* 'total_payload_upload', 'next_announce', 'tracker_status', 'num_pieces',
|
* 'total_payload_upload', 'next_announce', 'tracker_status', 'num_pieces',
|
||||||
* 'piece_length', 'is_auto_managed', 'active_time', 'seeding_time',
|
* 'piece_length', 'is_auto_managed', 'active_time', 'seeding_time',
|
||||||
* 'seed_rank']</pre>
|
* 'seed_rank', 'last_seen_complete', 'completed_time', 'owner', 'public', 'shared']</pre>
|
||||||
*/
|
*/
|
||||||
Status: [
|
Status: [
|
||||||
'total_done', 'total_payload_download', 'total_uploaded',
|
'total_done', 'total_payload_download', 'total_uploaded',
|
||||||
'total_payload_upload', 'next_announce', 'tracker_status', 'num_pieces',
|
'total_payload_upload', 'next_announce', 'tracker_status', 'num_pieces',
|
||||||
'piece_length', 'is_auto_managed', 'active_time', 'seeding_time',
|
'piece_length', 'is_auto_managed', 'active_time', 'seeding_time',
|
||||||
'seed_rank', 'last_seen_complete', 'owner', 'public', 'shared'
|
'seed_rank', 'last_seen_complete', 'completed_time', 'owner', 'public', 'shared'
|
||||||
],
|
],
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -131,7 +131,7 @@
|
||||||
renderer: torrentProgressRenderer,
|
renderer: torrentProgressRenderer,
|
||||||
dataIndex: 'progress'
|
dataIndex: 'progress'
|
||||||
}, {
|
}, {
|
||||||
header: _('Seeders'),
|
header: _('Seeds'),
|
||||||
hidden: true,
|
hidden: true,
|
||||||
width: 60,
|
width: 60,
|
||||||
sortable: true,
|
sortable: true,
|
||||||
|
@ -184,11 +184,19 @@
|
||||||
renderer: fdate,
|
renderer: fdate,
|
||||||
dataIndex: 'time_added'
|
dataIndex: 'time_added'
|
||||||
}, {
|
}, {
|
||||||
header: _('Last Seen Complete'),
|
header: _('Complete Seen'),
|
||||||
|
hidden: true,
|
||||||
width: 80,
|
width: 80,
|
||||||
sortable: true,
|
sortable: true,
|
||||||
renderer: dateOrNever,
|
renderer: dateOrNever,
|
||||||
dataIndex: 'last_seen_complete'
|
dataIndex: 'last_seen_complete'
|
||||||
|
}, {
|
||||||
|
header: _('Completed'),
|
||||||
|
hidden: true,
|
||||||
|
width: 80,
|
||||||
|
sortable: true,
|
||||||
|
renderer: dateOrNever,
|
||||||
|
dataIndex: 'completed_time'
|
||||||
}, {
|
}, {
|
||||||
header: _('Tracker'),
|
header: _('Tracker'),
|
||||||
hidden: true,
|
hidden: true,
|
||||||
|
@ -259,7 +267,7 @@
|
||||||
renderer: torrentLimitRenderer,
|
renderer: torrentLimitRenderer,
|
||||||
dataIndex: 'max_upload_speed'
|
dataIndex: 'max_upload_speed'
|
||||||
}, {
|
}, {
|
||||||
header: _('Seeders') + '/' + _('Peers'),
|
header: _('Seeds:Peers'),
|
||||||
hidden: true,
|
hidden: true,
|
||||||
width: 75,
|
width: 75,
|
||||||
sortable: true,
|
sortable: true,
|
||||||
|
|
|
@ -91,9 +91,10 @@ Deluge.details.StatusTab = Ext.extend(Ext.Panel, {
|
||||||
},
|
},
|
||||||
|
|
||||||
onRequestComplete: function(status) {
|
onRequestComplete: function(status) {
|
||||||
seeders = status.total_seeds > -1 ? status.num_seeds + ' (' + status.total_seeds + ')' : status.num_seeds;
|
seeds = status.total_seeds > -1 ? status.num_seeds + ' (' + status.total_seeds + ')' : status.num_seeds;
|
||||||
peers = status.total_peers > -1 ? status.num_peers + ' (' + status.total_peers + ')' : status.num_peers;
|
peers = status.total_peers > -1 ? status.num_peers + ' (' + status.total_peers + ')' : status.num_peers;
|
||||||
last_seen_complete = status.last_seen_complete > 0.0 ? fdate(status.last_seen_complete) : "Never";
|
last_seen_complete = status.last_seen_complete > 0.0 ? fdate(status.last_seen_complete) : "Never";
|
||||||
|
completed_time = status.last_seen_complete > 0.0 ? fdate(status.completed_time) : "Never";
|
||||||
var data = {
|
var data = {
|
||||||
downloaded: fsize(status.total_done, true),
|
downloaded: fsize(status.total_done, true),
|
||||||
uploaded: fsize(status.total_uploaded, true),
|
uploaded: fsize(status.total_uploaded, true),
|
||||||
|
@ -104,14 +105,15 @@ Deluge.details.StatusTab = Ext.extend(Ext.Panel, {
|
||||||
upspeed: (status.upload_payload_rate) ? fspeed(status.upload_payload_rate) : '0.0 KiB/s',
|
upspeed: (status.upload_payload_rate) ? fspeed(status.upload_payload_rate) : '0.0 KiB/s',
|
||||||
eta: ftime(status.eta),
|
eta: ftime(status.eta),
|
||||||
pieces: status.num_pieces + ' (' + fsize(status.piece_length) + ')',
|
pieces: status.num_pieces + ' (' + fsize(status.piece_length) + ')',
|
||||||
seeders: seeders,
|
seeds: seeds,
|
||||||
peers: peers,
|
peers: peers,
|
||||||
avail: status.distributed_copies.toFixed(3),
|
avail: status.distributed_copies.toFixed(3),
|
||||||
active_time: ftime(status.active_time),
|
active_time: ftime(status.active_time),
|
||||||
seeding_time: ftime(status.seeding_time),
|
seeding_time: ftime(status.seeding_time),
|
||||||
seed_rank: status.seed_rank,
|
seed_rank: status.seed_rank,
|
||||||
time_added: fdate(status.time_added),
|
time_added: fdate(status.time_added),
|
||||||
last_seen_complete: last_seen_complete
|
last_seen_complete: last_seen_complete,
|
||||||
|
completed_time: completed_time
|
||||||
}
|
}
|
||||||
data.auto_managed = _((status.is_auto_managed) ? 'True' : 'False');
|
data.auto_managed = _((status.is_auto_managed) ? 'True' : 'False');
|
||||||
|
|
||||||
|
|
|
@ -1,27 +1,28 @@
|
||||||
<dl>
|
<dl>
|
||||||
<dt class="downloaded">${_("Downloaded")}:</dt><dd class="downloaded"/>
|
<dt class="downloaded">${_("Downloaded:")}</dt><dd class="downloaded"/>
|
||||||
<dt class="uploaded">${_("Uploaded")}:</dt><dd class="uploaded"/>
|
<dt class="uploaded">${_("Uploaded:")}</dt><dd class="uploaded"/>
|
||||||
<dt class="share">${_("Share Ratio")}:</dt><dd class="share"/>
|
<dt class="share">${_("Share Ratio:")}</dt><dd class="share"/>
|
||||||
<dt class="announce">${_("Next Announce")}:</dt><dd class="announce"/>
|
<dt class="announce">${_("Next Announce:")}</dt><dd class="announce"/>
|
||||||
<dt class="tracker">${_("Tracker Status")}:</dt><dd class="tracker_status"/>
|
<dt class="tracker">${_("Tracker Status:")}</dt><dd class="tracker_status"/>
|
||||||
</dl>
|
</dl>
|
||||||
<dl>
|
<dl>
|
||||||
<dt class="downspeed">${_("Speed")}:</dt><dd class="downspeed"/>
|
<dt class="downspeed">${_("Down Speed:")}</dt><dd class="downspeed"/>
|
||||||
<dt class="upspeed">${_("Speed")}:</dt><dd class="upspeed"/>
|
<dt class="upspeed">${_("Up Speed:")}</dt><dd class="upspeed"/>
|
||||||
<dt class="eta">${_("ETA")}:</dt><dd class="eta"/>
|
<dt class="eta">${_("ETA:")}</dt><dd class="eta"/>
|
||||||
<dt class="pieces">${_("Pieces")}:</dt><dd class="pieces"/>
|
<dt class="pieces">${_("Pieces:")}</dt><dd class="pieces"/>
|
||||||
</dl>
|
</dl>
|
||||||
<dl>
|
<dl>
|
||||||
<dt class="seeders">${_("Seeders")}:</dt><dd class="seeders"/>
|
<dt class="seeds">${_("Seeds:")}</dt><dd class="seeds"/>
|
||||||
<dt class="peers">${_("Peers")}:</dt><dd class="peers"/>
|
<dt class="peers">${_("Peers:")}</dt><dd class="peers"/>
|
||||||
<dt class="avail">${_("Availability")}:</dt><dd class="avail"/>
|
<dt class="avail">${_("Availability:")}</dt><dd class="avail"/>
|
||||||
<dt class="auto_managed">${_("Auto Managed")}:</dt><dd class="auto_managed"/>
|
<dt class="auto_managed">${_("Auto Managed:")}</dt><dd class="auto_managed"/>
|
||||||
<dt class="last_seen_complete">${_("Last Seen Complete")}: </dt><dd class="last_seen_complete"/>
|
<dt class="last_seen_complete">${_("Complete Seen:")}</dt><dd class="last_seen_complete"/>
|
||||||
</dl>
|
</dl>
|
||||||
<dl>
|
<dl>
|
||||||
<dt class="active_time">${_("Active Time")}:</dt><dd class="active_time"/>
|
<dt class="active_time">${_("Active Time:")}</dt><dd class="active_time"/>
|
||||||
<dt class="seeding_time">${_("Seeding Time")}:</dt><dd class="seeding_time"/>
|
<dt class="seeding_time">${_("Seeding Time:")}</dt><dd class="seeding_time"/>
|
||||||
<dt class="seed_rank">${_("Seed Rank")}:</dt><dd class="seed_rank"/>
|
<dt class="seed_rank">${_("Seed Rank:")}</dt><dd class="seed_rank"/>
|
||||||
<dt class="time_rank">${_("Date Added")}:</dt><dd class="time_added"/>
|
<dt class="time_rank">${_("Date Added:")}</dt><dd class="time_added"/>
|
||||||
|
<dt class="completed_time">${_("Completed:")}</dt><dd class="completed_time"/>
|
||||||
</dl>
|
</dl>
|
||||||
<br style="clear: both;" />
|
<br style="clear: both;" />
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue