Skip to content

Commit

Permalink
Merge pull request #906 from breez/swap-bg-improve
Browse files Browse the repository at this point in the history
Use swap event to complete swap in the background
  • Loading branch information
roeierez authored Mar 28, 2024
2 parents 20acb4a + fd219cc commit d444310
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class RedeemSwapJob(
private val fgService: SdkForegroundService,
private val payload: String,
private val logger: ServiceLogger,
private var bitcoinAddress: String? = null,
) : Job {
companion object {
private const val TAG = "RedeemSwapJob"
Expand All @@ -33,32 +34,43 @@ class RedeemSwapJob(
override fun start(breezSDK: BlockingBreezServices) {
try {
val request = Json.decodeFromString(AddressTxsConfirmedRequest.serializer(), payload)
this.bitcoinAddress = request.address
breezSDK.redeemSwap(request.address)
logger.log(TAG, "Found swap for ${request.address}", "INFO")
notifyChannel(
context,
NOTIFICATION_CHANNEL_SWAP_TX_CONFIRMED,
getString(
context,
SWAP_TX_CONFIRMED_NOTIFICATION_TITLE,
DEFAULT_SWAP_TX_CONFIRMED_NOTIFICATION_TITLE
),
)
} catch (e: Exception) {
logger.log(TAG, "Failed to process swap notification: ${e.message}", "WARN")
notifyChannel(
context,
NOTIFICATION_CHANNEL_SWAP_TX_CONFIRMED,
getString(
context,
SWAP_TX_CONFIRMED_NOTIFICATION_FAILURE_TITLE,
DEFAULT_SWAP_TX_CONFIRMED_NOTIFICATION_FAILURE_TITLE
),
)
logger.log(TAG, "Failed to manually reedeem swap notification: ${e.message}", "WARN")
}
}

fgService.shutdown()
override fun onEvent(e: BreezEvent) {
this.bitcoinAddress?.let {address ->
when (e) {
is BreezEvent.SwapUpdated -> {
val swapInfo = e.details
logger.log(TAG, "Received swap updated event: ${swapInfo.bitcoinAddress} current address: ${address} status: ${swapInfo.status}", "TRACE")
if (swapInfo.bitcoinAddress == address) {
if (swapInfo.paidMsat.toLong() > 0) {
notifySuccessAndShutdown(address)
}
}
}

else -> {}
}
}
}

override fun onEvent(e: BreezEvent) {}
private fun notifySuccessAndShutdown(address: String) {
logger.log(TAG, "Swap address ${address} redeemed succesfully", "INFO")
notifyChannel(
context,
NOTIFICATION_CHANNEL_SWAP_TX_CONFIRMED,
getString(
context,
SWAP_TX_CONFIRMED_NOTIFICATION_TITLE,
DEFAULT_SWAP_TX_CONFIRMED_NOTIFICATION_TITLE
),
)
fgService.shutdown()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class RedeemSwapTask : TaskProtocol {
internal var contentHandler: ((UNNotificationContent) -> Void)?
internal var bestAttemptContent: UNMutableNotificationContent?
internal var logger: ServiceLogger
internal var receivedPayment: Payment? = nil
internal var swapAddress: String? = nil

init(payload: String, logger: ServiceLogger, contentHandler: ((UNNotificationContent) -> Void)? = nil, bestAttemptContent: UNMutableNotificationContent? = nil) {
self.payload = payload
Expand All @@ -21,26 +21,46 @@ class RedeemSwapTask : TaskProtocol {
self.logger = logger
}

public func onEvent(e: BreezEvent) {}
public func onEvent(e: BreezEvent) {
if let address = self.swapAddress {
switch e {
case .swapUpdated(details: let swapInfo):
self.logger.log(tag: TAG, line: "Received swap updated event: \(swapInfo.bitcoinAddress), current address: \(address) status: \(swapInfo.status)\n", level: "INFO")
if address == swapInfo.bitcoinAddress {
if (swapInfo.paidMsat > 0) {
self.logger.log(tag: TAG, line: "Swap address \(swapInfo.bitcoinAddress) redeemed succesfully", level: "INFO")
let successRedeemSwap = ResourceHelper.shared.getString(key: Constants.SWAP_TX_CONFIRMED_NOTIFICATION_TITLE, fallback: Constants.DEFAULT_SWAP_TX_CONFIRMED_NOTIFICATION_TITLE)
self.displayPushNotification(title: successRedeemSwap, logger: self.logger, threadIdentifier: Constants.NOTIFICATION_THREAD_SWAP_TX_CONFIRMED)
}
}
break
default:
break
}
}
}

func start(breezSDK: BlockingBreezServices) throws {
var addressTxsConfirmedRequest: AddressTxsConfirmedRequest? = nil
do {
addressTxsConfirmedRequest = try JSONDecoder().decode(AddressTxsConfirmedRequest.self, from: self.payload.data(using: .utf8)!)
let addressTxsConfirmedRequest = try JSONDecoder().decode(AddressTxsConfirmedRequest.self, from: self.payload.data(using: .utf8)!)
swapAddress = addressTxsConfirmedRequest.address
} catch let e {
self.logger.log(tag: TAG, line: "failed to decode payload: \(e)", level: "ERROR")
self.onShutdown()
throw e
}


guard let address = swapAddress else {
self.logger.log(tag: TAG, line: "Failed to process swap notification: swap address not in payload", level: "ERROR")
self.onShutdown()
return
}

do {
try breezSDK.redeemSwap(swapAddress: addressTxsConfirmedRequest!.address)
self.logger.log(tag: TAG, line: "Found swap for \(addressTxsConfirmedRequest!.address)", level: "DEBUG")
let successRedeemSwap = ResourceHelper.shared.getString(key: Constants.SWAP_TX_CONFIRMED_NOTIFICATION_TITLE, fallback: Constants.DEFAULT_SWAP_TX_CONFIRMED_NOTIFICATION_TITLE)
self.displayPushNotification(title: successRedeemSwap, logger: self.logger, threadIdentifier: Constants.NOTIFICATION_THREAD_SWAP_TX_CONFIRMED)
try breezSDK.redeemSwap(swapAddress: address)
self.logger.log(tag: TAG, line: "Found swap for \(address)", level: "DEBUG")
} catch let e {
self.logger.log(tag: TAG, line: "Failed to process swap notification: \(e)", level: "ERROR")
self.onShutdown()
self.logger.log(tag: TAG, line: "Failed to manually redeem swap notification: \(e)", level: "ERROR")
}
}

Expand Down

0 comments on commit d444310

Please sign in to comment.