diff options
author | Thomas "Cakeisalie5" Touhey <thomas@touhey.fr> | 2018-09-13 23:08:37 +0200 |
---|---|---|
committer | Thomas "Cakeisalie5" Touhey <thomas@touhey.fr> | 2018-09-13 23:08:37 +0200 |
commit | f31695b9ba45c17a3eeab821d7eaf6976cd6195a (patch) | |
tree | 98647ae53f05c6cc110098d78e50b6d2f961fcc3 | |
parent | 6b818669142af0efb9be50491ab2e760620548c4 (diff) |
Corrected before-the-start fictional idle.
-rwxr-xr-x | fingerd/_fiction.py | 96 | ||||
-rwxr-xr-x | fingerd/_util.py | 3 |
2 files changed, 73 insertions, 26 deletions
diff --git a/fingerd/_fiction.py b/fingerd/_fiction.py index 83c3817..7ea569a 100755 --- a/fingerd/_fiction.py +++ b/fingerd/_fiction.py @@ -45,8 +45,10 @@ class _FictionalSession(_FingerSession): def __add__(self, delta): if isinstance(delta, _FictionalSessionDelta): - if delta.is_idle is not None: - self.is_idle = delta.is_idle + if delta.idle_since is not None: + self.idle_since = delta.idle_since + if delta.active_since is not None: + self.active_since = delta.active_since super().__add__(delta) return self @@ -83,29 +85,42 @@ class _FictionalSession(_FingerSession): pass @property - def is_idle(self): - """ Is idle. """ + def idle_since(self): + """ Idle since the given time. """ - return self.__is_idle + if not self.__is_idle: + return None + return self.__idle_last - @is_idle.setter - def is_idle(self, value): - value = bool(value) + @idle_since.setter + def idle_since(self, value): + self.__is_idle = True + self.__idle_last = value - if value == (not self.__is_idle): - self.__idle_last = _dt.now() + @property + def active_since(self): + """ Active since the given time. """ + + if self.__is_idle: + return None + return self.__idle_last - self.__is_idle = value + @active_since.setter + def active_since(self, value): + self.__is_idle = False + self.__idle_last = value class _FictionalSessionDelta(_FingerSessionDelta): """ User delta for the fingerd fictional user. """ - def __init__(self, *_, is_idle = None, idle = None, **kwargs): + def __init__(self, *_, idle_since = None, active_since = None, \ + idle = None, **kwargs): super().__init__(**kwargs) - self.is_idle = is_idle + self.idle_since = idle_since + self.active_since = active_since def __repr__(self): - p = ('name', 'line', 'host', 'is_idle') + p = ('name', 'line', 'host', 'idle_since', 'active_since') p = (f"{x} = {repr(getattr(self, x))}" for x in p \ if getattr(self, x) is not None) return f"{self.__class__.__name__}({', '.join(p)})" @@ -252,6 +267,38 @@ class _UserLogoutAction(_Action): return self.__name +class _UserIdleToggleAction(_Action): + """ A user has changed its idle status. """ + + def __init__(self, offset, login, name, idle): + super().__init__(offset) + self.__login = login + self.__name = name + self.__idle = bool(idle) + + def __repr__(self): + p = (f"{x} = {repr(getattr(self, x))}" for x in ('time', 'login', + 'name', 'idle')) + return f"{self.__class__.__name__}({', '.join(p)})" + + @property + def login(self): + """ The user's login. """ + + return self.__login + + @property + def name(self): + """ The name of the session to create. """ + + return self.__name + + @property + def idle(self): + """ The idle status. """ + + return self.__idle + class _UserSessionEditionAction(_Action): """ A user has changed their session status. """ @@ -403,20 +450,13 @@ class FingerFiction: name = data.get('session') actions.append(_UserLogoutAction(time, login, name)) - elif typ in ('cd', 'idle', 'active'): - # User edition. + elif typ in ('idle', 'active'): + # Idle change status. login = data['login'] - if typ == 'cd': - delta = _FictionalSessionDelta(wd = data['dir']) - elif typ == 'idle': - delta = _FictionalSessionDelta(is_idle = True) - elif typ == 'active': - delta = _FictionalSessionDelta(is_idle = False) - - actions.append(_UserSessionEditionAction(time, login, - data.get('session'), delta)) + actions.append(_UserIdleToggleAction(time, login, + data.get('session'), typ == 'idle')) else: raise Exception("invalid action type") @@ -551,6 +591,12 @@ class FingerFictionInterface(_FingerInterface): self.__users[a.login].sessions.add(session) elif isinstance(a, _UserLogoutAction): del self.__users[a.login].sessions[a.name] + elif isinstance(a, _UserIdleToggleAction): + session = self.__users[a.login].sessions[a.name] + if a.idle: + session.idle_since = self.__start + a.time + else: + session.active_since = self.__start + a.time elif isinstance(a, _UserSessionEditionAction): self.__users[a.login].sessions[a.name] += a.delta diff --git a/fingerd/_util.py b/fingerd/_util.py index 30d3fad..afe699c 100755 --- a/fingerd/_util.py +++ b/fingerd/_util.py @@ -171,7 +171,8 @@ class _FingerSessionManager: if key is None: self.__sessions.pop(0) else: - for i in [i for i, x in enumerate(l) if key == x.name][::-1]: + for i in [i for i, x in enumerate(self.__sessions) \ + if key == x.name][::-1]: self.__sessions.pop(i) def __getitem__(self, key): |