Skip to content

Commit

Permalink
✨ Add option to collect statistics from filter path and output to win…
Browse files Browse the repository at this point in the history
…dow prop
  • Loading branch information
jurialmunkey committed Jan 27, 2025
1 parent ce60b1c commit d78eadc
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 3 deletions.
6 changes: 5 additions & 1 deletion resources/lib/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,17 @@
'exclude_key', 'exclude_value', 'exclude_operator', )


def get_filters(**kwargs):
def get_filters(filter_prefix=None, **kwargs):
all_filters = {}

for k, v in kwargs.items():
key, num = k, '0'
if '__' in k:
key, num = k.split('__', 1)
if filter_prefix:
if not key.startswith(filter_prefix):
continue
key = key[len(filter_prefix):]
if key not in FILTER_KEYNAMES:
continue
dic = all_filters.setdefault(num, {})
Expand Down
25 changes: 23 additions & 2 deletions resources/lib/lists/filterdir.py
Original file line number Diff line number Diff line change
Expand Up @@ -633,7 +633,12 @@ def do_edit():


class ListGetFilterDir(Container):
def get_directory(self, paths=None, library=None, no_label_dupes=False, dbtype=None, sort_by=None, sort_how=None, randomise=False, fallback=False, names=None, **kwargs):
def get_directory(
self, paths=None, library=None, no_label_dupes=False, dbtype=None,
sort_by=None, sort_how=None, randomise=False, fallback=False, names=None,
window_prop=None, window_id=None,
**kwargs
):
if not paths:
return

Expand All @@ -645,11 +650,14 @@ def get_directory(self, paths=None, library=None, no_label_dupes=False, dbtype=N
mediatypes = {}
added_items = []
all_filters = get_filters(**kwargs)
all_statistics_filters = get_filters(filter_prefix='stats_', **kwargs)
directory_properties = DIRECTORY_PROPERTIES_BASIC
directory_properties += {
'video': DIRECTORY_PROPERTIES_VIDEO,
'music': DIRECTORY_PROPERTIES_MUSIC}.get(library) or []

statistics = {}

def _make_item(i, path_name=None):
if not i:
return
Expand All @@ -658,10 +666,15 @@ def _make_item(i, path_name=None):
listitem_jsonrpc.infolabels['title'] = listitem_jsonrpc.label
listitem_jsonrpc.infoproperties['widget'] = path_name or listitem_jsonrpc.infoproperties.get('widget') or ''

for _, filters in all_filters.items():
for fname, filters in all_filters.items():
if is_excluded({'infolabels': listitem_jsonrpc.infolabels, 'infoproperties': listitem_jsonrpc.infoproperties}, **filters):
return

for fname, filters in all_statistics_filters.items():
if not is_excluded({'infolabels': listitem_jsonrpc.infolabels, 'infoproperties': listitem_jsonrpc.infoproperties}, **filters):
statistics.setdefault(fname, 0)
statistics[fname] += 1

if listitem_jsonrpc.mediatype:
mediatypes[listitem_jsonrpc.mediatype] = mediatypes.get(listitem_jsonrpc.mediatype, 0) + 1

Expand Down Expand Up @@ -740,6 +753,14 @@ def _get_items_from_paths():
container_content = f'{max(mediatypes, key=lambda key: mediatypes[key])}s' if mediatypes else ''
self.add_items(items, container_content=container_content, plugin_category=plugin_category)

if not statistics:
return

window_prop = window_prop or 'Statistics'

for k, v in statistics.items():
set_to_windowprop(v, k, window_prop, window_id)


class ListGetContainerLabels(Container):
def get_directory(
Expand Down

0 comments on commit d78eadc

Please sign in to comment.