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]):
|
||||
for change in changes:
|
||||
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):
|
||||
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.target.insert(idx, 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))
|
||||
elif isinstance(change, ActiveListIndexDeleted):
|
||||
self.filter.unmonitor(change.oldValue)
|
||||
idx = len([x for x in self.keyMap if x < change.index])
|
||||
if change.index in self.keyMap:
|
||||
idx = self.keyMap.index(change.index)
|
||||
del self.target[idx]
|
||||
del self.keyMap[idx]
|
||||
for i in range(idx, len(self.keyMap)):
|
||||
self.keyMap[i] -= 1
|
||||
for i in range(idx, len(self.keyMap)):
|
||||
self.keyMap[i] -= 1
|
||||
|
||||
def _onMonitor(self, value):
|
||||
idx = self.source.index(value)
|
||||
|
|
|
|||
|
|
@ -305,3 +305,31 @@ class ActiveListTest(TestCase):
|
|||
|
||||
del list[1]
|
||||
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