filter: hide_zero_hits;hide_cat : core+test

This commit is contained in:
Martijn Voncken 2008-10-11 08:04:02 +00:00
parent 7564248431
commit 5ebbff177f
3 changed files with 70 additions and 13 deletions

View File

@ -394,7 +394,7 @@ class Core(
def fetch_torrent_url_thread(self, callback, url, options): def fetch_torrent_url_thread(self, callback, url, options):
# Get the actual filename of the torrent from the url provided. # Get the actual filename of the torrent from the url provided.
filename = url.split("/")[-1] filename = url.split("/")[-1]
# Get the .torrent file from the url # Get the .torrent file from the url
torrent_file = deluge.common.fetch_url(url) torrent_file = deluge.common.fetch_url(url)
if torrent_file is None: if torrent_file is None:
@ -494,12 +494,12 @@ class Core(
# Emit the torrent_status signal to the clients # Emit the torrent_status signal to the clients
return status_dict return status_dict
def export_get_filter_tree(self): def export_get_filter_tree(self , hide_zero_hits=False, hide_cat=None):
""" """
returns {field: [(value,count)] } returns {field: [(value,count)] }
for use in sidebar(s) for use in sidebar(s)
""" """
return self.filtermanager.get_filter_tree() return self.filtermanager.get_filter_tree(hide_zero_hits, hide_cat)
def export_get_session_state(self): def export_get_session_state(self):
"""Returns a list of torrent_ids in the session.""" """Returns a list of torrent_ids in the session."""
@ -706,7 +706,7 @@ class Core(
"""Renames files in 'torrent_id'. The 'filenames' parameter should be a """Renames files in 'torrent_id'. The 'filenames' parameter should be a
list of (index, filename) pairs.""" list of (index, filename) pairs."""
self.torrents[torrent_id].rename_files(filenames) self.torrents[torrent_id].rename_files(filenames)
## Queueing functions ## ## Queueing functions ##
def export_queue_top(self, torrent_ids): def export_queue_top(self, torrent_ids):
log.debug("Attempting to queue %s to top", torrent_ids) log.debug("Attempting to queue %s to top", torrent_ids)

View File

@ -34,6 +34,7 @@
import deluge.component as component import deluge.component as component
from deluge.log import LOG as log from deluge.log import LOG as log
STATE_SORT = ["All", "Downloading", "Seeding", "Active", "Paused", "Queued"]
#special purpose filters: #special purpose filters:
def filter_keyword(torrent_ids, values): def filter_keyword(torrent_ids, values):
@ -45,7 +46,6 @@ def filter_keyword(torrent_ids, values):
if keyword in all_torrents[torrent_id].filename.lower(): if keyword in all_torrents[torrent_id].filename.lower():
yield torrent_id yield torrent_id
class FilterManager(component.Component): class FilterManager(component.Component):
"""FilterManager """FilterManager
@ -117,15 +117,19 @@ class FilterManager(component.Component):
return torrent_ids return torrent_ids
def get_filter_tree(self): def get_filter_tree(self, hide_zero_hits=False, hide_cat=None):
""" """
returns {field: [(value,count)] } returns {field: [(value,count)] }
for use in sidebar. for use in sidebar.
""" """
torrent_ids = self.torrents.get_torrent_list() torrent_ids = self.torrents.get_torrent_list()
status_func = self.core.export_get_torrent_status #premature optimalisation.. status_func = self.core.export_get_torrent_status #premature optimalisation..
tree_keys = self.tree_fields.keys() tree_keys = list(self.tree_fields.keys())
items = dict( (field, init_func()) for field, init_func in self.tree_fields.iteritems()) if hide_cat:
for cat in hide_cat:
tree_keys.remove(cat)
items = dict( (field, self.tree_fields[field]()) for field in tree_keys)
#count status fields. #count status fields.
for torrent_id in list(torrent_ids): for torrent_id in list(torrent_ids):
@ -134,10 +138,18 @@ class FilterManager(component.Component):
value = status[field] value = status[field]
items[field][value] = items[field].get(value, 0) + 1 items[field][value] = items[field].get(value, 0) + 1
for field in tree_keys: if "state" in tree_keys and hide_zero_hits:
items[field] = sorted(items[field].iteritems()) self._hide_state_items(items["state"])
return items #return a dict of tuples:
sorted_items = {}
for field in tree_keys:
sorted_items[field] = sorted(items[field].iteritems())
if "state" in tree_keys:
sorted_items["state"].sort(self._sort_state_items)
return sorted_items
def _init_state_tree(self): def _init_state_tree(self):
return {"All":len(self.torrents.get_torrent_list()), return {"All":len(self.torrents.get_torrent_list()),
@ -171,3 +183,25 @@ class FilterManager(component.Component):
else: else:
torrent_ids.remove(torrent_id) torrent_ids.remove(torrent_id)
return torrent_ids return torrent_ids
def _hide_state_items(self, state_items):
"for hide_zero hits"
for (value, count) in state_items.items():
if value != "All" and count == 0:
del state_items[value]
def _sort_state_items(self, x, y):
""
if x[0] in STATE_SORT:
ix = STATE_SORT.index(x[0])
else:
ix = 99
if y[0] in STATE_SORT:
iy = STATE_SORT.index(y[0])
else:
iy = 99
return ix - iy

View File

@ -43,11 +43,34 @@ print sclient.get_torrents_status({"keyword":["az"]}, KEYS)
print "#registered filters, overriude on 1 value(not yet)" print "#registered filters, overriude on 1 value(not yet)"
print sclient.get_torrents_status({"state":["Active"]}, KEYS) print sclient.get_torrents_status({"state":["Active"]}, KEYS)
print "#tree:" print "#tree: Default (Active must be listed after Seeding)"
for field, items in sclient.get_filter_tree().iteritems(): for field, items in sclient.get_filter_tree().iteritems():
print "*",field print "*",field
for value, count in items: for value, count in items:
print "-",value,count print "-",value,count
print "#tree: Hide_zero"
for field, items in sclient.get_filter_tree(True).iteritems():
print "*",field
for value, count in items:
print "-",value,count
print "#tree: Hide tracker"
for field, items in sclient.get_filter_tree(False, ["tracker_host"]).iteritems():
print "*",field
for value, count in items:
print "-",value,count
print "#tree: Hide all"
if sclient.get_filter_tree(False, ["tracker_host","label","state"]):
raise Exception("result should be {}")
print "hide-all :ok"
print "#must have an error here:" print "#must have an error here:"
print sclient.get_torrents_status({"invalid-filter":[]}, KEYS) try:
print sclient.get_torrents_status({"invalid-filter":[]}, KEYS)
print "WTF!"
except Exception, e:
print "ok, an exception was raised:", e ,e.message