diff --git a/electrum/gui/qml/components/ChannelDetails.qml b/electrum/gui/qml/components/ChannelDetails.qml index 1b0e333f5..2197ec5b1 100644 --- a/electrum/gui/qml/components/ChannelDetails.qml +++ b/electrum/gui/qml/components/ChannelDetails.qml @@ -24,7 +24,7 @@ Pane { text: qsTr('Backup'); enabled: false onTriggered: {} - //icon.source: '../../icons/wallet.png' + icon.source: '../../icons/file.png' } } MenuItem { @@ -36,7 +36,30 @@ Pane { var dialog = closechannel.createObject(root, { 'channelid': channelid }) dialog.open() } - //icon.source: '../../icons/wallet.png' + icon.source: '../../icons/closebutton.png' + } + } + MenuItem { + icon.color: 'transparent' + action: Action { + text: qsTr('Delete channel'); + enabled: channeldetails.canDelete + onTriggered: { + var dialog = app.messageDialog.createObject(root, + { + 'text': qsTr('Are you sure you want to delete this channel? This will purge associated transactions from your wallet history.'), + 'yesno': true + } + ) + dialog.yesClicked.connect(function() { + channeldetails.deleteChannel() + app.stack.pop() + Daemon.currentWallet.historyModel.init_model() // needed here? + Daemon.currentWallet.channelModel.remove_channel(channelid) + }) + dialog.open() + } + icon.source: '../../icons/delete.png' } } MenuItem { diff --git a/electrum/gui/qml/qechanneldetails.py b/electrum/gui/qml/qechanneldetails.py index f3080ee3a..527083fb4 100644 --- a/electrum/gui/qml/qechanneldetails.py +++ b/electrum/gui/qml/qechanneldetails.py @@ -134,6 +134,10 @@ class QEChannelDetails(QObject): def canForceClose(self): return ChanCloseOption.LOCAL_FCLOSE in self._channel.get_close_options() + @pyqtProperty(bool, notify=channelChanged) + def canDelete(self): + return self._channel.can_be_deleted() + @pyqtProperty(str, notify=channelChanged) def message_force_close(self, notify=channelChanged): return _(messages.MSG_REQUEST_FORCE_CLOSE) @@ -173,3 +177,7 @@ class QEChannelDetails(QObject): loop = self._wallet.wallet.network.asyncio_loop coro = do_close(closetype, self._channel.channel_id) asyncio.run_coroutine_threadsafe(coro, loop) + + @pyqtSlot() + def deleteChannel(self): + self._wallet.wallet.lnworker.remove_channel(self._channel.channel_id) diff --git a/electrum/gui/qml/qechannellistmodel.py b/electrum/gui/qml/qechannellistmodel.py index 272c68d52..8d98063a9 100644 --- a/electrum/gui/qml/qechannellistmodel.py +++ b/electrum/gui/qml/qechannellistmodel.py @@ -149,4 +149,15 @@ class QEChannelListModel(QAbstractListModel): self.beginInsertRows(QModelIndex(), 0, 0) self.channels.insert(0,item) self.endInsertRows() - self.numOpenChannelsChanged.emit() + + @pyqtSlot(str) + def remove_channel(self, cid): + i = 0 + for channel in self.channels: + if cid == channel['cid']: + self._logger.debug(cid) + self.beginRemoveRows(QModelIndex(), i, i) + self.channels.remove(channel) + self.endRemoveRows() + return + i = i + 1 diff --git a/electrum/gui/qml/qetransactionlistmodel.py b/electrum/gui/qml/qetransactionlistmodel.py index 6b18d6e3b..934a5ce31 100644 --- a/electrum/gui/qml/qetransactionlistmodel.py +++ b/electrum/gui/qml/qetransactionlistmodel.py @@ -102,6 +102,7 @@ class QETransactionListModel(QAbstractListModel): return date.strftime(dfmt[section]) # initial model data + @pyqtSlot() def init_model(self): history = self.wallet.get_full_history(onchain_domain=self.onchain_domain, include_lightning=self.include_lightning)