1
0

qml: swap: like on desktop, use pkh of nostr pubkey as color

This commit is contained in:
Sander van Grieken
2025-07-11 16:33:40 +02:00
parent 62a30c5688
commit 78a7c85f49
2 changed files with 20 additions and 5 deletions

View File

@@ -87,10 +87,13 @@ ElDialog {
Layout.preferredHeight: constants.paddingLarge
Layout.preferredWidth: 1
}
Image {
Rectangle {
Layout.rowSpan: 5
Layout.alignment: Qt.AlignTop
source: Qt.resolvedUrl('../../icons/network.png')
Layout.alignment: Qt.AlignVCenter
Layout.fillHeight: true
Layout.preferredWidth: 10
color: model.color
}
Label {
text: qsTr('Pubkey')
@@ -118,6 +121,7 @@ ElDialog {
Label {
Layout.fillWidth: true
text: model.timestamp
wrapMode: Text.Wrap
}
Label {
text: qsTr('Max Forward')

View File

@@ -5,6 +5,7 @@ from typing import Union, Optional, TYPE_CHECKING, Sequence
from PyQt6.QtCore import (pyqtProperty, pyqtSignal, pyqtSlot, QObject, QTimer, pyqtEnum, QAbstractListModel, Qt,
QModelIndex)
from PyQt6.QtGui import QColor
from electrum.i18n import _
from electrum.bitcoin import DummyAddress
@@ -14,6 +15,7 @@ from electrum.util import (NotEnoughFunds, NoDynamicFeeEstimates, profiler, get_
wait_for2)
from electrum.submarine_swaps import NostrTransport, SwapServerTransport
from electrum.fee_policy import FeePolicy
from electrum.crypto import sha256
from electrum.gui import messages
@@ -34,7 +36,7 @@ class QESwapServerNPubListModel(QAbstractListModel):
# define listmodel rolemap
_ROLE_NAMES= ('npub', 'server_pubkey', 'timestamp', 'percentage_fee', 'mining_fee',
'min_amount', 'max_forward_amount', 'max_reverse_amount', 'pow_bits')
'min_amount', 'max_forward_amount', 'max_reverse_amount', 'pow_bits', 'color')
_ROLE_KEYS = range(Qt.ItemDataRole.UserRole, Qt.ItemDataRole.UserRole + len(_ROLE_NAMES))
_ROLE_MAP = dict(zip(_ROLE_KEYS, [bytearray(x.encode()) for x in _ROLE_NAMES]))
@@ -59,7 +61,7 @@ class QESwapServerNPubListModel(QAbstractListModel):
service = self._services[index.row()]
role_index = role - Qt.ItemDataRole.UserRole
value = service[self._ROLE_NAMES[role_index]]
if isinstance(value, (bool, list, int, str)) or value is None:
if isinstance(value, (bool, list, int, str, QColor)) or value is None:
return value
return str(value)
@@ -68,6 +70,14 @@ class QESwapServerNPubListModel(QAbstractListModel):
self._services = []
self.endResetModel()
@staticmethod
def str_to_color(color_input: str) -> QColor:
input_hash = int.from_bytes(sha256(color_input), byteorder="big")
r = (input_hash & 0xFF0000) >> 16
g = (input_hash & 0x00FF00) >> 8
b = input_hash & 0x0000FF
return QColor(r, g, b)
def offer_to_model(self, x: 'SwapOffer'):
return {
'npub': x.server_npub,
@@ -79,6 +89,7 @@ class QESwapServerNPubListModel(QAbstractListModel):
'max_reverse_amount': x.pairs.max_reverse,
'timestamp': age(x.timestamp),
'pow_bits': x.pow_bits,
'color': self.str_to_color(x.server_pubkey),
}
def updateModel(self, items: Sequence['SwapOffer']):