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 ""
|
||||||
|
if precision_secs:
|
||||||
return time.strftime("%x %X", time.localtime(seconds))
|
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):
|
||||||
|
|
|
@ -150,7 +150,7 @@ DEFAULT_PREFS = {
|
||||||
"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,
|
||||||
|
@ -166,19 +166,25 @@ DEFAULT_PREFS = {
|
||||||
"show_owner": False,
|
"show_owner": False,
|
||||||
"show_downloading_time": False,
|
"show_downloading_time": False,
|
||||||
"show_seeding_time": False,
|
"show_seeding_time": False,
|
||||||
|
"show_completed": False,
|
||||||
|
"show_seeds_peers_ratio": False,
|
||||||
|
"show_complete_seen": False,
|
||||||
|
"show_down_limit": False,
|
||||||
|
"show_up_limit": False,
|
||||||
|
"show_shared": False,
|
||||||
"queue_width": 4,
|
"queue_width": 4,
|
||||||
"name_width": -1,
|
"name_width": -1,
|
||||||
"size_width": 8,
|
"size_width": 8,
|
||||||
"state_width": 13,
|
"state_width": 13,
|
||||||
"progress_width": 7,
|
"progress_width": 7,
|
||||||
"seeders_width":10,
|
"seeds_width": 10,
|
||||||
"peers_width": 10,
|
"peers_width": 10,
|
||||||
"downspeed_width": 7,
|
"downspeed_width": 7,
|
||||||
"upspeed_width": 7,
|
"upspeed_width": 7,
|
||||||
"eta_width": 8,
|
"eta_width": 8,
|
||||||
"ratio_width": 10,
|
"ratio_width": 10,
|
||||||
"avail_width": 10,
|
"avail_width": 10,
|
||||||
"added_width":25,
|
"added_width": 15,
|
||||||
"tracker_width": 15,
|
"tracker_width": 15,
|
||||||
"savepath_width": 15,
|
"savepath_width": 15,
|
||||||
"downloaded_width": 13,
|
"downloaded_width": 13,
|
||||||
|
@ -187,6 +193,12 @@ DEFAULT_PREFS = {
|
||||||
"owner_width": 10,
|
"owner_width": 10,
|
||||||
"downloading_time_width": 10,
|
"downloading_time_width": 10,
|
||||||
"seeding_time_width": 10,
|
"seeding_time_width": 10,
|
||||||
|
"completed_width": 15,
|
||||||
|
"seeds_peers_ratio_width": 10,
|
||||||
|
"complete_seen_width": 15,
|
||||||
|
"down_limit_width": 7,
|
||||||
|
"up_limit_width": 7,
|
||||||
|
"shared_width": 10,
|
||||||
"ignore_duplicate_lines": False,
|
"ignore_duplicate_lines": False,
|
||||||
"move_selection": True,
|
"move_selection": True,
|
||||||
"third_tab_lists_all": False,
|
"third_tab_lists_all": False,
|
||||||
|
@ -204,12 +216,13 @@ DEFAULT_PREFS = {
|
||||||
"addtorrents_last_path": "~"
|
"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": "#",
|
||||||
|
@ -217,7 +230,7 @@ prefs_to_names = {
|
||||||
"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",
|
||||||
|
@ -232,14 +245,20 @@ prefs_to_names = {
|
||||||
"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",
|
||||||
|
@ -249,8 +268,13 @@ column_names_to_state_keys = {
|
||||||
"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 = [
|
||||||
|
@ -323,20 +347,25 @@ class AllTorrents(BaseMode, component.Component):
|
||||||
("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)
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ columns = {
|
||||||
"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),
|
||||||
|
@ -67,8 +67,14 @@ columns = {
|
||||||
"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),
|
||||||
|
"Shared": (("shared",), str),
|
||||||
"Active Time": (("active_time",), deluge.common.ftime),
|
"Active Time": (("active_time",), deluge.common.ftime),
|
||||||
"Seeding Time":(("seeding_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 "-"
|
||||||
|
|
|
@ -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