mirror of
https://github.com/codex-storage/deluge.git
synced 2025-02-17 05:47:50 +00:00
registered filters:keyword
This commit is contained in:
parent
143c1661fe
commit
d3b005f30d
@ -34,12 +34,21 @@
|
|||||||
import deluge.component as component
|
import deluge.component as component
|
||||||
from deluge.log import LOG as log
|
from deluge.log import LOG as log
|
||||||
|
|
||||||
|
|
||||||
#special purpose filters:
|
#special purpose filters:
|
||||||
def filter_keyword(torrent):
|
def filter_keyword(torrent_ids, values):
|
||||||
|
keywords = [v.lower() for v in values] #cleanup.
|
||||||
|
all_torrents = component.get("TorrentManager").torrents
|
||||||
|
#filter:
|
||||||
|
for torrent_id in torrent_ids:
|
||||||
|
log.debug(all_torrents[torrent_id].filename.lower())
|
||||||
|
for keyword in keywords:
|
||||||
|
if keyword in all_torrents[torrent_id].filename.lower():
|
||||||
|
yield torrent_id
|
||||||
|
|
||||||
|
def filter_state_active(self, torrent_ids, value):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def filter_state_active(torrent):
|
|
||||||
pass
|
|
||||||
|
|
||||||
class FilterManager(component.Component):
|
class FilterManager(component.Component):
|
||||||
"""FilterManager
|
"""FilterManager
|
||||||
@ -50,11 +59,13 @@ class FilterManager(component.Component):
|
|||||||
log.debug("FilterManager init..")
|
log.debug("FilterManager init..")
|
||||||
self.core = core
|
self.core = core
|
||||||
self.torrents = core.torrents
|
self.torrents = core.torrents
|
||||||
|
self.registered_filters = {}
|
||||||
|
self.register_filter("keyword", filter_keyword)
|
||||||
|
|
||||||
def filter_torrent_ids(self, filter_dict):
|
def filter_torrent_ids(self, filter_dict):
|
||||||
"""
|
"""
|
||||||
internal :
|
|
||||||
returns a list of torrent_id's matching filter_dict.
|
returns a list of torrent_id's matching filter_dict.
|
||||||
|
core filter method
|
||||||
"""
|
"""
|
||||||
if not filter_dict:
|
if not filter_dict:
|
||||||
return self.torrents.get_torrent_list()
|
return self.torrents.get_torrent_list()
|
||||||
@ -65,9 +76,17 @@ class FilterManager(component.Component):
|
|||||||
else:
|
else:
|
||||||
torrent_ids = self.torrents.get_torrent_list()
|
torrent_ids = self.torrents.get_torrent_list()
|
||||||
|
|
||||||
#todo:
|
if not filter_dict: #return if there's nothing more to filter
|
||||||
#register/deregister special filters like "text search" and "active"
|
return torrent_ids
|
||||||
#
|
|
||||||
|
#Registered filters:
|
||||||
|
for field, values in filter_dict.items():
|
||||||
|
if field in self.registered_filters:
|
||||||
|
torrent_ids = set(self.registered_filters[field](torrent_ids, values)) # a set filters out doubles,
|
||||||
|
del filter_dict[field]
|
||||||
|
|
||||||
|
if not filter_dict: #return if there's nothing more to filter
|
||||||
|
return torrent_ids
|
||||||
|
|
||||||
#leftover filter arguments:
|
#leftover filter arguments:
|
||||||
#default filter on status fields.
|
#default filter on status fields.
|
||||||
@ -75,10 +94,19 @@ class FilterManager(component.Component):
|
|||||||
status_func = self.core.export_get_torrent_status #premature optimalisation..
|
status_func = self.core.export_get_torrent_status #premature optimalisation..
|
||||||
for torrent_id in list(torrent_ids):
|
for torrent_id in list(torrent_ids):
|
||||||
status = status_func(torrent_id, filter_dict.keys()) #status={id:{key:value}}
|
status = status_func(torrent_id, filter_dict.keys()) #status={id:{key:value}}
|
||||||
for field, value_list in filter_dict.iteritems():
|
for field, values in filter_dict.iteritems():
|
||||||
if (not status[field] in value_list) and torrent_id in torrent_ids:
|
if (not status[field] in values) and torrent_id in torrent_ids:
|
||||||
torrent_ids.remove(torrent_id)
|
torrent_ids.remove(torrent_id)
|
||||||
|
|
||||||
return torrent_ids
|
return torrent_ids
|
||||||
|
|
||||||
|
def register_filter(self, id, filter_func):
|
||||||
|
self.registered_filters[id] = filter_func
|
||||||
|
|
||||||
|
def deregister_filter(self, id):
|
||||||
|
del self.registered_filters[id]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,6 +37,11 @@ print "test&tpb:",len(sclient.get_torrents_status({"label":["test","tpb"]}, KEYS
|
|||||||
print "test:",len(sclient.get_torrents_status({"label":["test"]}, KEYS))
|
print "test:",len(sclient.get_torrents_status({"label":["test"]}, KEYS))
|
||||||
print "No Label:" , len(sclient.get_torrents_status({"label":[""]}, KEYS))
|
print "No Label:" , len(sclient.get_torrents_status({"label":[""]}, KEYS))
|
||||||
|
|
||||||
print "#special filters (ERRORS START HERE!):"
|
print "#registered filters, basic:"
|
||||||
print sclient.get_torrents_status({"keyword":["az"]}, KEYS)
|
print sclient.get_torrents_status({"keyword":["az"]}, KEYS)
|
||||||
|
|
||||||
|
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 "#must have an error here:"
|
||||||
|
print sclient.get_torrents_status({"invalid-filter":[]}, KEYS)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user