mirror of
https://github.com/onyx-and-iris/vban-cmd-python.git
synced 2024-11-16 01:10:48 +00:00
50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
|
import abc
|
||
|
from .errors import VMCMDErrors
|
||
|
from .meta import action_prop
|
||
|
|
||
|
class ICommand(abc.ABC):
|
||
|
""" Command Base Class """
|
||
|
def __init__(self, remote):
|
||
|
self._remote = remote
|
||
|
|
||
|
def setter(self, param, val):
|
||
|
""" Sends a string request RT packet. """
|
||
|
self._remote.set_rt(f'{self.identifier}', param, val)
|
||
|
|
||
|
@abc.abstractmethod
|
||
|
def identifier(self):
|
||
|
pass
|
||
|
|
||
|
|
||
|
class Command(ICommand):
|
||
|
""" Command Concrete Class """
|
||
|
@classmethod
|
||
|
def make(cls, remote):
|
||
|
"""
|
||
|
Factory function for command class.
|
||
|
|
||
|
Returns a Command class of a kind.
|
||
|
"""
|
||
|
CMD_cls = type(f'Command{remote.kind.name}', (cls,), {
|
||
|
**{param: action_prop(param)
|
||
|
for param in ['show', 'shutdown', 'restart']},
|
||
|
'hide': action_prop('show', val=0),
|
||
|
})
|
||
|
return CMD_cls(remote)
|
||
|
|
||
|
@property
|
||
|
def identifier(self) -> str:
|
||
|
return 'Command'
|
||
|
|
||
|
def set_showvbanchat(self, val: bool):
|
||
|
if not isinstance(val, bool) and val not in (0,1):
|
||
|
raise VMCMDErrors('showvbanchat is a boolean parameter')
|
||
|
self.setter('DialogShow.VBANCHAT', 1 if val else 0)
|
||
|
showvbanchat = property(fset=set_showvbanchat)
|
||
|
|
||
|
def set_lock(self, val: bool):
|
||
|
if not isinstance(val, bool) and val not in (0,1):
|
||
|
raise VMCMDErrors('lock is a boolean parameter')
|
||
|
self.setter('lock', 1 if val else 0)
|
||
|
lock = property(fset=set_lock)
|