1
0

qml: swaphelper: update offer model properly

This commit is contained in:
Sander van Grieken
2025-06-05 20:55:08 +02:00
committed by f321x
parent 3a39abc415
commit 89cab31b81
2 changed files with 36 additions and 10 deletions

View File

@@ -54,9 +54,6 @@ ElDialog {
Connections { Connections {
target: swaphelper target: swaphelper
function onOffersUpdated() { function onOffersUpdated() {
listview.model = null
listview.model = swaphelper.availableSwapServers
listview.forceLayout()
if (dialog.selectedPubkey) { if (dialog.selectedPubkey) {
listview.currentIndex = swaphelper.availableSwapServers.indexFor(dialog.selectedPubkey) listview.currentIndex = swaphelper.availableSwapServers.indexFor(dialog.selectedPubkey)
} }

View File

@@ -66,9 +66,8 @@ class QESwapServerNPubListModel(QAbstractListModel):
self._services = [] self._services = []
self.endResetModel() self.endResetModel()
def initModel(self, items: Sequence['SwapOffer']): def offer_to_model(self, x: 'SwapOffer'):
self.beginInsertRows(QModelIndex(), len(items), len(items)) return {
self._services = [{
'npub': x.server_npub, 'npub': x.server_npub,
'percentage_fee': x.pairs.percentage, 'percentage_fee': x.pairs.percentage,
'mining_fee': x.pairs.mining_fee, 'mining_fee': x.pairs.mining_fee,
@@ -76,9 +75,39 @@ class QESwapServerNPubListModel(QAbstractListModel):
'max_forward_amount': x.pairs.max_forward, 'max_forward_amount': x.pairs.max_forward,
'max_reverse_amount': x.pairs.max_reverse, 'max_reverse_amount': x.pairs.max_reverse,
'timestamp': age(x.timestamp), 'timestamp': age(x.timestamp),
} for x in items] }
self.endInsertRows()
self.countChanged.emit() def updateModel(self, items: Sequence['SwapOffer']):
offers = items.copy()
remove = []
for i, x in enumerate(self._services):
if matches := list(filter(lambda offer: offer.server_npub == x['npub'], offers)):
# update
self._services[i] = self.offer_to_model(matches[0])
index = self.index(i, 0)
self.dataChanged.emit(index, index, self._ROLE_KEYS)
offers.remove(matches[0])
else:
# add offer to remove items
remove.append(i)
# # remove offers from model
for ri in reversed(remove):
self.beginRemoveRows(QModelIndex(), ri, ri)
self._services.pop(ri)
self.endRemoveRows()
# add new offers
if offers:
self.beginInsertRows(QModelIndex(), len(self._services), len(self._services) + len(offers) - 1)
for offer in offers:
self._services.append(self.offer_to_model(offer))
self.endInsertRows()
if offers or remove:
self.countChanged.emit()
@pyqtSlot(str, result=int) @pyqtSlot(str, result=int)
def indexFor(self, npub: str): def indexFor(self, npub: str):
@@ -337,7 +366,7 @@ class QESwapHelper(AuthMixin, QObject, QtEventListener):
return self._available_swapservers return self._available_swapservers
def on_offers_updated(self): def on_offers_updated(self):
self.availableSwapServers.initModel(self.recent_offers) self.availableSwapServers.updateModel(self.recent_offers)
@pyqtSlot(result=bool) @pyqtSlot(result=bool)
def isNostr(self): def isNostr(self):