cc-4105: added mechanism to remove duplicate events
This commit is contained in:
parent
745221f77c
commit
076a9c2296
6 changed files with 83 additions and 35 deletions
30
python_apps/media-monitor2/media/monitor/eventcontractor.py
Normal file
30
python_apps/media-monitor2/media/monitor/eventcontractor.py
Normal file
|
@ -0,0 +1,30 @@
|
|||
from media.monitor.log import Loggable
|
||||
from media.monitor.events import DeleteFile
|
||||
|
||||
class EventContractor(Loggable):
|
||||
def __init__(self):
|
||||
self.store = {}
|
||||
|
||||
def event_registered(self, evt):
|
||||
return evt.path in self.store
|
||||
|
||||
def get_old_event(self, evt):
|
||||
return evt.store[ evt.path ]
|
||||
|
||||
def register(self, evt):
|
||||
if self.event_registered(evt):
|
||||
old_e = self.get_old_event(evt)
|
||||
# If two events are of the same type we can safely discard the old
|
||||
# one
|
||||
if evt.__class__ == old_e.__class__:
|
||||
old_e.morph_into(evt)
|
||||
# delete overrides any other event
|
||||
elif isinstance(evt, DeleteFile):
|
||||
old_e.morph_into(evt)
|
||||
else:
|
||||
evt.add_safe_pack_hook( lambda : self.__unregister(evt) )
|
||||
self.store[ evt.path ] = evt
|
||||
|
||||
# events are unregistered automatically no need to screw around with them
|
||||
def __unregister(self, evt):
|
||||
del self.store[evt.path]
|
Loading…
Add table
Add a link
Reference in a new issue