Merge pull request #8675 from accumulator/address_delete
qml: implement delete address for imported wallets
This commit is contained in:
@@ -16,6 +16,7 @@ Pane {
|
||||
property string address
|
||||
|
||||
signal addressDetailsChanged
|
||||
signal addressDeleted
|
||||
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
@@ -192,6 +193,7 @@ Pane {
|
||||
Label {
|
||||
Layout.columnSpan: 2
|
||||
Layout.topMargin: constants.paddingSmall
|
||||
visible: addressdetails.pubkeys.length
|
||||
text: qsTr('Public keys')
|
||||
color: Material.accentColor
|
||||
}
|
||||
@@ -215,9 +217,10 @@ Pane {
|
||||
icon.source: '../../icons/share.png'
|
||||
enabled: modelData
|
||||
onClicked: {
|
||||
var dialog = app.genericShareDialog.createObject(root,
|
||||
{ title: qsTr('Public key'), text: modelData }
|
||||
)
|
||||
var dialog = app.genericShareDialog.createObject(root, {
|
||||
title: qsTr('Public key'),
|
||||
text: modelData
|
||||
})
|
||||
dialog.open()
|
||||
}
|
||||
}
|
||||
@@ -301,6 +304,25 @@ Pane {
|
||||
dialog.open()
|
||||
}
|
||||
}
|
||||
FlatButton {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: 1
|
||||
visible: addressdetails.canDelete
|
||||
text: qsTr('Delete')
|
||||
onClicked: {
|
||||
var confirmdialog = app.messageDialog.createObject(root, {
|
||||
text: qsTr('Are you sure you want to delete this address from the wallet?'),
|
||||
yesno: true
|
||||
})
|
||||
confirmdialog.accepted.connect(function () {
|
||||
addressdetails.deleteAddress()
|
||||
addressDeleted()
|
||||
app.stack.pop()
|
||||
})
|
||||
confirmdialog.open()
|
||||
}
|
||||
icon.source: '../../icons/delete.png'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -176,6 +176,10 @@ Pane {
|
||||
// update listmodel when details change
|
||||
listview.backingModel.updateAddress(model.address)
|
||||
})
|
||||
page.addressDeleted.connect(function() {
|
||||
// update listmodel when address removed
|
||||
listview.backingModel.deleteAddress(model.address)
|
||||
})
|
||||
} else {
|
||||
loader.toggle()
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ class QEAddressDetails(AuthMixin, QObject):
|
||||
self._privkey = None
|
||||
self._derivationPath = None
|
||||
self._numtx = 0
|
||||
self._candelete = False
|
||||
|
||||
self._historyModel = None
|
||||
|
||||
@@ -79,6 +80,10 @@ class QEAddressDetails(AuthMixin, QObject):
|
||||
def numTx(self):
|
||||
return self._numtx
|
||||
|
||||
@pyqtProperty(bool, notify=detailsChanged)
|
||||
def canDelete(self):
|
||||
return self._candelete
|
||||
|
||||
|
||||
frozenChanged = pyqtSignal()
|
||||
@pyqtProperty(bool, notify=frozenChanged)
|
||||
@@ -126,6 +131,11 @@ class QEAddressDetails(AuthMixin, QObject):
|
||||
|
||||
self.detailsChanged.emit()
|
||||
|
||||
@pyqtSlot()
|
||||
def deleteAddress(self):
|
||||
assert self.canDelete
|
||||
self._wallet.wallet.delete_address(self._address)
|
||||
|
||||
def update(self):
|
||||
if self._wallet is None:
|
||||
self._logger.error('wallet undefined')
|
||||
@@ -143,4 +153,5 @@ class QEAddressDetails(AuthMixin, QObject):
|
||||
if self._wallet.derivationPrefix:
|
||||
self._derivationPath = self._derivationPath.replace('m', self._wallet.derivationPrefix)
|
||||
self._numtx = self._wallet.wallet.adb.get_address_history_len(self._address)
|
||||
self._candelete = self.wallet.wallet.can_delete_address()
|
||||
self.detailsChanged.emit()
|
||||
|
||||
@@ -216,6 +216,9 @@ class QEAddressCoinListModel(QAbstractListModel):
|
||||
|
||||
self._dirty = False
|
||||
|
||||
if self._filterModel is not None:
|
||||
self._filterModel.invalidate()
|
||||
|
||||
@pyqtSlot(str)
|
||||
def updateAddress(self, address):
|
||||
for i, a in enumerate(self._items):
|
||||
@@ -223,6 +226,21 @@ class QEAddressCoinListModel(QAbstractListModel):
|
||||
self.do_update(i, a)
|
||||
return
|
||||
|
||||
@pyqtSlot(str)
|
||||
def deleteAddress(self, address):
|
||||
first = -1
|
||||
last = -1
|
||||
for i, a in enumerate(self._items):
|
||||
if a['address'] == address:
|
||||
if first < 0:
|
||||
first = i
|
||||
last = i
|
||||
if not first >= 0:
|
||||
return
|
||||
self.beginRemoveRows(QModelIndex(), first, last)
|
||||
self._items = self._items[0:first] + self._items[last+1:]
|
||||
self.endRemoveRows()
|
||||
|
||||
def updateCoin(self, outpoint):
|
||||
for i, a in enumerate(self._items):
|
||||
if a.get('outpoint') == outpoint:
|
||||
|
||||
@@ -709,11 +709,15 @@ class QEWallet(AuthMixin, QObject, QtEventListener):
|
||||
@pyqtSlot(str)
|
||||
def importAddresses(self, addresslist):
|
||||
self.wallet.import_addresses(addresslist.split())
|
||||
if self._addressCoinModel:
|
||||
self._addressCoinModel.setDirty()
|
||||
self.dataChanged.emit()
|
||||
|
||||
@pyqtSlot(str)
|
||||
def importPrivateKeys(self, keyslist):
|
||||
self.wallet.import_private_keys(keyslist.split(), self.password)
|
||||
if self._addressCoinModel:
|
||||
self._addressCoinModel.setDirty()
|
||||
self.dataChanged.emit()
|
||||
|
||||
@pyqtSlot(str)
|
||||
|
||||
@@ -3127,7 +3127,8 @@ class Simple_Wallet(Abstract_Wallet):
|
||||
pass
|
||||
|
||||
def get_public_keys(self, address: str) -> Sequence[str]:
|
||||
return [self.get_public_key(address)]
|
||||
pk = self.get_public_key(address)
|
||||
return [pk] if pk else []
|
||||
|
||||
|
||||
class Imported_Wallet(Simple_Wallet):
|
||||
|
||||
Reference in New Issue
Block a user