From ec1c3c17adc6c6f0f4b7520bfedd8a6bbd9b57ad Mon Sep 17 00:00:00 2001 From: Jakob Ketterl Date: Sat, 6 May 2023 01:54:49 +0200 Subject: [PATCH] offer combined appended + inserted event --- owrx/active/list/__init__.py | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/owrx/active/list/__init__.py b/owrx/active/list/__init__.py index 40f685af..fdec6b74 100644 --- a/owrx/active/list/__init__.py +++ b/owrx/active/list/__init__.py @@ -15,24 +15,28 @@ class ActiveListIndexUpdated(ActiveListChange): self.newValue = newValue -class ActiveListIndexAppended(ActiveListChange): +class ActiveListIndexAdded(ActiveListChange): def __init__(self, index: int, newValue): self.index = index self.newValue = newValue +# not sure if differentiation between append and insert is necessary, but we'll offer it for now +# most cases will probably be happy with ActiveListIndexAdded above +class ActiveListIndexAppended(ActiveListIndexAdded): + pass + + +class ActiveListIndexInserted(ActiveListIndexAdded): + pass + + class ActiveListIndexDeleted(ActiveListChange): def __init__(self, index: int, oldValue): self.index = index self.oldValue = oldValue -class ActiveListIndexInserted(ActiveListChange): - def __init__(self, index: int, newValue): - self.index = index - self.newValue = newValue - - class ActiveListListener(ABC): @abstractmethod def onListChange(self, changes: list[ActiveListChange]): @@ -48,8 +52,8 @@ class ActiveListTransformationListener(ActiveListListener): for change in changes: if isinstance(change, ActiveListIndexUpdated): self.target[change.index] = self.transformation(change.newValue) - elif isinstance(change, ActiveListIndexAppended): - self.target.append(self.transformation(change.newValue)) + elif isinstance(change, ActiveListIndexAdded): + self.target.insert(change.index, self.transformation(change.newValue)) elif isinstance(change, ActiveListIndexDeleted): del self.target[change.index] @@ -62,10 +66,11 @@ class ActiveListFilterListener(ActiveListListener): def onListChange(self, changes: list[ActiveListChange]): for change in changes: - if isinstance(change, ActiveListIndexAppended): + if isinstance(change, ActiveListIndexAdded): if self.filter(change.newValue): - self.target.append(change.newValue) - self.keyMap.append(len(self.target) - 1) + idx = len([x for x in self.keyMap if x < change.index]) + self.target.insert(idx, change.newValue) + self.keyMap.insert(idx, change.index) elif isinstance(change, ActiveListIndexUpdated): if change.index in self.keyMap and not self.filter(change.newValue): idx = self.keyMap.index(change.index)