qml: swap: like on desktop, use pkh of nostr pubkey as color
This commit is contained in:
@@ -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')
|
||||
|
||||
@@ -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']):
|
||||
|
||||
Reference in New Issue
Block a user