voicemeeter-api-python/voicemeeterlib/subject.py

51 lines
1.3 KiB
Python
Raw Normal View History

import logging
2022-06-16 14:07:12 +01:00
class Subject:
"""Adds support for observers"""
logger = logging.getLogger("subject.subject")
2022-06-16 14:07:12 +01:00
def __init__(self):
"""list of current observers"""
self._observers = list()
@property
def observers(self) -> list:
"""returns the current observers"""
return self._observers
def notify(self, modifier):
2022-06-16 14:07:12 +01:00
"""run callbacks on update"""
[o.on_update(modifier) for o in self._observers]
2022-06-16 14:07:12 +01:00
def add(self, observer):
"""adds an observer to _observers"""
if observer not in self._observers:
self._observers.append(observer)
self.logger.info(f"{type(observer).__name__} added to event observers")
2022-06-16 14:07:12 +01:00
else:
self.logger.error(
f"Failed to add {type(observer).__name__} to event observers"
)
2022-06-16 14:07:12 +01:00
def remove(self, observer):
"""removes an observer from _observers"""
try:
self._observers.remove(observer)
self.logger.info(f"{type(observer).__name__} removed from event observers")
2022-06-16 14:07:12 +01:00
except ValueError:
self.logger.error(
f"Failed to remove {type(observer).__name__} from event observers"
)
2022-06-16 14:07:12 +01:00
def clear(self):
"""clears the _observers list"""
self._observers.clear()