diff --git a/voicemeeterlib/iremote.py b/voicemeeterlib/iremote.py index ffe4d51..c97b6ed 100644 --- a/voicemeeterlib/iremote.py +++ b/voicemeeterlib/iremote.py @@ -1,6 +1,9 @@ +import logging import time from abc import ABCMeta, abstractmethod +logger = logging.getLogger(__name__) + class IRemote(metaclass=ABCMeta): """ @@ -12,14 +15,23 @@ class IRemote(metaclass=ABCMeta): def __init__(self, remote, index=None): self._remote = remote self.index = index + self.logger = logger.getChild(self.__class__.__name__) def getter(self, param, **kwargs): """Gets a parameter value""" - return self._remote.get(f"{self.identifier}.{param}", **kwargs) + self.logger.debug(f"getter: {self._cmd(param)}") + return self._remote.get(self._cmd(param), **kwargs) def setter(self, param, val): """Sets a parameter value""" - self._remote.set(f"{self.identifier}.{param}", val) + self.logger.debug(f"setter: {self._cmd(param)}={val}") + self._remote.set(self._cmd(param), val) + + def _cmd(self, param): + cmd = (self.identifier,) + if param: + cmd += (f".{param}",) + return "".join(cmd) @abstractmethod def identifier(self): @@ -32,9 +44,13 @@ class IRemote(metaclass=ABCMeta): return (self, attr, val) for attr, val in data.items(): - if hasattr(self, attr): - target, attr, val = fget(attr, val) - setattr(target, attr, val) + if not isinstance(val, dict): + if hasattr(self, attr): + target, attr, val = fget(attr, val) + setattr(target, attr, val) + else: + target = getattr(self, attr) + target.apply(val) return self def then_wait(self):