mirror of
https://github.com/jketterl/openwebrx.git
synced 2025-12-06 07:12:09 +01:00
fix predicate interference
This commit is contained in:
parent
9c4e21316b
commit
eec1696e8f
|
|
@ -123,10 +123,10 @@ class ActiveListFilterListener(ActiveListListener):
|
||||||
def onListChange(self, source: "ActiveList", changes: list[ActiveListChange]):
|
def onListChange(self, source: "ActiveList", changes: list[ActiveListChange]):
|
||||||
for change in changes:
|
for change in changes:
|
||||||
if isinstance(change, ActiveListIndexAdded):
|
if isinstance(change, ActiveListIndexAdded):
|
||||||
|
idx = len([x for x in self.keyMap if x < change.index])
|
||||||
|
for i in range(idx, len(self.keyMap)):
|
||||||
|
self.keyMap[i] += 1
|
||||||
if self.filter.predicate(change.newValue):
|
if self.filter.predicate(change.newValue):
|
||||||
idx = len([x for x in self.keyMap if x < change.index])
|
|
||||||
for i in range(idx, len(self.keyMap)):
|
|
||||||
self.keyMap[i] += 1
|
|
||||||
self.keyMap.insert(idx, change.index)
|
self.keyMap.insert(idx, change.index)
|
||||||
self.target.insert(idx, change.newValue)
|
self.target.insert(idx, change.newValue)
|
||||||
self.filter.monitor(change.newValue, partial(self._onMonitor, change.newValue))
|
self.filter.monitor(change.newValue, partial(self._onMonitor, change.newValue))
|
||||||
|
|
@ -146,12 +146,12 @@ class ActiveListFilterListener(ActiveListListener):
|
||||||
self.filter.monitor(change.newValue, partial(self._onMonitor, change.newValue))
|
self.filter.monitor(change.newValue, partial(self._onMonitor, change.newValue))
|
||||||
elif isinstance(change, ActiveListIndexDeleted):
|
elif isinstance(change, ActiveListIndexDeleted):
|
||||||
self.filter.unmonitor(change.oldValue)
|
self.filter.unmonitor(change.oldValue)
|
||||||
|
idx = len([x for x in self.keyMap if x < change.index])
|
||||||
if change.index in self.keyMap:
|
if change.index in self.keyMap:
|
||||||
idx = self.keyMap.index(change.index)
|
|
||||||
del self.target[idx]
|
del self.target[idx]
|
||||||
del self.keyMap[idx]
|
del self.keyMap[idx]
|
||||||
for i in range(idx, len(self.keyMap)):
|
for i in range(idx, len(self.keyMap)):
|
||||||
self.keyMap[i] -= 1
|
self.keyMap[i] -= 1
|
||||||
|
|
||||||
def _onMonitor(self, value):
|
def _onMonitor(self, value):
|
||||||
idx = self.source.index(value)
|
idx = self.source.index(value)
|
||||||
|
|
|
||||||
|
|
@ -305,3 +305,31 @@ class ActiveListTest(TestCase):
|
||||||
|
|
||||||
del list[1]
|
del list[1]
|
||||||
self.assertEqual(filteredList[2], 5)
|
self.assertEqual(filteredList[2], 5)
|
||||||
|
|
||||||
|
def testFilterDeletionWithFilteredIndices(self):
|
||||||
|
list = ActiveList([1, 2, 3, 4, 5])
|
||||||
|
filteredList = list.filter(lambda x: x > 3)
|
||||||
|
|
||||||
|
del list[0]
|
||||||
|
self.assertEqual(len(filteredList), 2)
|
||||||
|
self.assertEqual(filteredList[0], 4)
|
||||||
|
|
||||||
|
list[2] = 42
|
||||||
|
# update should not change length of filtered list
|
||||||
|
self.assertEqual(len(filteredList), 2)
|
||||||
|
# update should propagate
|
||||||
|
self.assertEqual(filteredList[0], 42)
|
||||||
|
|
||||||
|
def testFilterAdditionWithFilteredIndices(self):
|
||||||
|
list = ActiveList([1, 2, 3, 4, 5])
|
||||||
|
filteredList = list.filter(lambda x: x > 3)
|
||||||
|
|
||||||
|
list.insert(0, 0)
|
||||||
|
self.assertEqual(len(filteredList), 2)
|
||||||
|
self.assertEqual(filteredList[0], 4)
|
||||||
|
|
||||||
|
list[4] = 42
|
||||||
|
# update should not change length of filtered list
|
||||||
|
self.assertEqual(len(filteredList), 2)
|
||||||
|
# update should propagate
|
||||||
|
self.assertEqual(filteredList[0], 42)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue