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 {
target: swaphelper
function onOffersUpdated() {
listview.model = null
listview.model = swaphelper.availableSwapServers
listview.forceLayout()
if (dialog.selectedPubkey) {
listview.currentIndex = swaphelper.availableSwapServers.indexFor(dialog.selectedPubkey)
}

View File

@@ -66,9 +66,8 @@ class QESwapServerNPubListModel(QAbstractListModel):
self._services = []
self.endResetModel()
def initModel(self, items: Sequence['SwapOffer']):
self.beginInsertRows(QModelIndex(), len(items), len(items))
self._services = [{
def offer_to_model(self, x: 'SwapOffer'):
return {
'npub': x.server_npub,
'percentage_fee': x.pairs.percentage,
'mining_fee': x.pairs.mining_fee,
@@ -76,9 +75,39 @@ class QESwapServerNPubListModel(QAbstractListModel):
'max_forward_amount': x.pairs.max_forward,
'max_reverse_amount': x.pairs.max_reverse,
'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)
def indexFor(self, npub: str):
@@ -337,7 +366,7 @@ class QESwapHelper(AuthMixin, QObject, QtEventListener):
return self._available_swapservers
def on_offers_updated(self):
self.availableSwapServers.initModel(self.recent_offers)
self.availableSwapServers.updateModel(self.recent_offers)
@pyqtSlot(result=bool)
def isNostr(self):