instead of our generic debouncer use Dict now for thread safe method call history

This commit is contained in:
panni
2016-10-11 13:29:11 +02:00
parent 768b28f0cd
commit cccc8967a3
3 changed files with 20 additions and 27 deletions
+8
View File
@@ -1,6 +1,7 @@
# coding=utf-8
import os
import sys
import datetime
# just some slight modifications to support sum and iter again
from subzero.sandbox import restore_builtins
@@ -46,6 +47,13 @@ def Start():
intent = get_intent()
intent.cleanup()
# clear expired menu history items
now = datetime.datetime.now()
if "menu_history" in Dict:
for key, timeout in Dict["menu_history"].items():
if now > timeout:
del Dict["menu_history"][key]
# init defaults; perhaps not the best idea to use ValidatePrefs here, but we'll see
ValidatePrefs()
Log.Debug(config.full_version)
+12 -3
View File
@@ -1,12 +1,12 @@
# coding=utf-8
import types
import datetime
from support.items import get_kind, get_item_thumb
from support.helpers import get_video_display_title
from support.ignore import ignore_list
from support.lib import get_intent
from subzero.constants import ICON
from subzero.func import debouncer
default_thumb = R(ICON)
@@ -130,13 +130,22 @@ def debounce(func):
:param func:
:return:
"""
def get_lookup_key(args, kwargs):
func_name = list(args).pop(0).__name__
return tuple([func_name] + [(key, value) for key, value in kwargs.iteritems()])
def wrap(*args, **kwargs):
if "randomize" in kwargs:
if ([func] + list(args), kwargs) in debouncer:
if not "menu_history" in Dict:
Dict["menu_history"] = {}
key = get_lookup_key([func] + list(args), kwargs)
if key in Dict["menu_history"]:
Log.Debug("not triggering %s twice with %s, %s" % (func, args, kwargs))
return ObjectContainer()
else:
debouncer.add([func] + list(args), kwargs)
Dict["menu_history"][key] = datetime.datetime.now() + datetime.timedelta(seconds=10)
Dict.Save()
return func(*args, **kwargs)
return wrap
-24
View File
@@ -1,24 +0,0 @@
# coding=utf-8
import threading
lock = threading.Lock()
class Debouncer(object):
call_history = set()
def get_lookup_key(self, args, kwargs):
func_name = list(args).pop(0).__name__
return tuple([func_name] + [(key, value) for key, value in kwargs.iteritems()])
def __contains__(self, item):
args, kwargs = item
lookup = self.get_lookup_key(args, kwargs)
with lock:
return lookup in self.call_history
def add(self, args, kwargs):
with lock:
self.call_history.add(self.get_lookup_key(args, kwargs))
debouncer = Debouncer()