Skip to content

Commit f1837ef

Browse files
committed
fix: sort qml swap provider list by PoW
This change orders the list of swapproviders in the qml gui by the `pow_bits` value in the announcement by inserting the orders at the correct index in the list instead of just appending new incoming offers.
1 parent 6f50414 commit f1837ef

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

electrum/gui/qml/qeswaphelper.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import asyncio
2+
import bisect
23
from enum import IntEnum
34
from typing import Union, Optional, TYPE_CHECKING, Sequence
45

@@ -33,7 +34,7 @@ class QESwapServerNPubListModel(QAbstractListModel):
3334

3435
# define listmodel rolemap
3536
_ROLE_NAMES= ('npub', 'server_pubkey', 'timestamp', 'percentage_fee', 'mining_fee',
36-
'min_amount', 'max_forward_amount', 'max_reverse_amount')
37+
'min_amount', 'max_forward_amount', 'max_reverse_amount', 'pow_bits')
3738
_ROLE_KEYS = range(Qt.ItemDataRole.UserRole, Qt.ItemDataRole.UserRole + len(_ROLE_NAMES))
3839
_ROLE_MAP = dict(zip(_ROLE_KEYS, [bytearray(x.encode()) for x in _ROLE_NAMES]))
3940

@@ -77,6 +78,7 @@ def offer_to_model(self, x: 'SwapOffer'):
7778
'max_forward_amount': x.pairs.max_forward,
7879
'max_reverse_amount': x.pairs.max_reverse,
7980
'timestamp': age(x.timestamp),
81+
'pow_bits': x.pow_bits,
8082
}
8183

8284
def updateModel(self, items: Sequence['SwapOffer']):
@@ -103,10 +105,16 @@ def updateModel(self, items: Sequence['SwapOffer']):
103105

104106
# add new offers
105107
if offers:
106-
self.beginInsertRows(QModelIndex(), len(self._services), len(self._services) + len(offers) - 1)
107108
for offer in offers:
108-
self._services.append(self.offer_to_model(offer))
109-
self.endInsertRows()
109+
# offers are sorted by pow_bits
110+
insertion_index = bisect.bisect_left(
111+
self._services,
112+
-offer.pow_bits, # negate the values to get ascending order
113+
key=lambda service: -service['pow_bits'],
114+
)
115+
self.beginInsertRows(QModelIndex(), insertion_index, insertion_index)
116+
self._services.insert(insertion_index, self.offer_to_model(offer))
117+
self.endInsertRows()
110118

111119
if offers or remove:
112120
self.countChanged.emit()

0 commit comments

Comments
 (0)