mirror of
https://github.com/jayofelony/pwnagotchi.git
synced 2025-07-01 18:37:27 -04:00
misc: refactored code to work as a setup.py based package
Signed-off-by: Simone Margaritelli <evilsocket@gmail.com>
This commit is contained in:
52
pwnagotchi/ui/state.py
Normal file
52
pwnagotchi/ui/state.py
Normal file
@ -0,0 +1,52 @@
|
||||
from threading import Lock
|
||||
|
||||
|
||||
class State(object):
|
||||
def __init__(self, state={}):
|
||||
self._state = state
|
||||
self._lock = Lock()
|
||||
self._listeners = {}
|
||||
self._changes = {}
|
||||
|
||||
def add_element(self, key, elem):
|
||||
self._state[key] = elem
|
||||
self._changes[key] = True
|
||||
|
||||
def add_listener(self, key, cb):
|
||||
with self._lock:
|
||||
self._listeners[key] = cb
|
||||
|
||||
def items(self):
|
||||
with self._lock:
|
||||
return self._state.items()
|
||||
|
||||
def get(self, key):
|
||||
with self._lock:
|
||||
return self._state[key].value if key in self._state else None
|
||||
|
||||
def reset(self):
|
||||
with self._lock:
|
||||
self._changes = {}
|
||||
|
||||
def changes(self, ignore=()):
|
||||
with self._lock:
|
||||
changes = []
|
||||
for change in self._changes.keys():
|
||||
if change not in ignore:
|
||||
changes.append(change)
|
||||
return changes
|
||||
|
||||
def has_changes(self):
|
||||
with self._lock:
|
||||
return len(self._changes) > 0
|
||||
|
||||
def set(self, key, value):
|
||||
with self._lock:
|
||||
if key in self._state:
|
||||
prev = self._state[key].value
|
||||
self._state[key].value = value
|
||||
|
||||
if prev != value:
|
||||
self._changes[key] = True
|
||||
if key in self._listeners and self._listeners[key] is not None:
|
||||
self._listeners[key](prev, value)
|
Reference in New Issue
Block a user