mirror of
https://github.com/aljazceru/breez-sdk-liquid.git
synced 2025-12-18 14:34:24 +01:00
* Flutter uniffi * Set on-demand resources * Do not build non-uniffi libraries * Change iosLibName * Add BreezSDKLiquid as on demand resources * Use downloaded framework * Add Sources to published flutter package * Set OTHER_LDFLAGS * Add logging * Refactor library initialization logic and throw an error if initialization fails * Do not statically link framework on production * Use uniFFI headers to generate FlutterBreezLiquidBindings * Re add frb header * Correct the library name * Remove static_framework * Move source header files * Copy iOS podspecs to macOS folder * Update version of macOS podspecs * Remove Windows & Linux support * Remove CMake scripts * Remove breez_sdk_liquid.podspec from version script * Cleanup older build scripts used by melos & just recipes * Remove softlink & copy recipes Add recipe descriptions * Rename link-uniffi recipe to link-headers Make sure headers are linked after uniffi is built - Remove just gen recipe Add recipe descriptions * Set package versions on production files as well when publishing * Include bindings project on melos script hooks * Flutter uniffi * Set on-demand resources * Do not build non-uniffi libraries * Change iosLibName * Add BreezSDKLiquid as on demand resources * Use downloaded framework * Add Sources to published flutter package * Set OTHER_LDFLAGS * Add logging * Refactor library initialization logic and throw an error if initialization fails * Do not statically link framework on production * Use uniFFI headers to generate FlutterBreezLiquidBindings * Re add frb header * Correct the library name * Remove static_framework * Move source header files * Copy iOS podspecs to macOS folder * Update version of macOS podspecs * Remove Windows & Linux support * Remove CMake scripts * Remove breez_sdk_liquid.podspec from version script * Cleanup older build scripts used by melos & just recipes * Remove softlink & copy recipes Add recipe descriptions * Rename link-uniffi recipe to link-headers Make sure headers are linked after uniffi is built - Remove just gen recipe Add recipe descriptions * Set package versions on production files as well when publishing * Include bindings project on melos script hooks * chore: just version * fix: remove unused files on "Set package version" step * copy FFI header files * [WIP] Add macOS support * remove example app on Flutter plugin * Link headers before running ffigen on CI workflow * macOS: add macos/Sources folder to .gitignore . * macOS: Copy iOS sources to macOS sources after downloading bindings * macOS: copy sources & framework file to macos folder on build-uniffi-swift script * import breez_sdk_liquidFFI header on plugin file Update flutter_breez_liquid.c * cleanup header file artifacts --------- Co-authored-by: Ross Savage <hello@satimoto.com>
95 lines
4.1 KiB
Swift
95 lines
4.1 KiB
Swift
import UserNotifications
|
|
import os.log
|
|
|
|
open class SDKNotificationService: UNNotificationServiceExtension {
|
|
fileprivate let TAG = "SDKNotificationService"
|
|
|
|
var liquidSDK: BindingLiquidSdk?
|
|
var contentHandler: ((UNNotificationContent) -> Void)?
|
|
var bestAttemptContent: UNMutableNotificationContent?
|
|
var currentTask: TaskProtocol?
|
|
public var logger: ServiceLogger = ServiceLogger(logStream: nil)
|
|
|
|
override public init() { }
|
|
|
|
override open func didReceive(
|
|
_ request: UNNotificationRequest,
|
|
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void
|
|
) {
|
|
self.logger.log(tag: TAG, line: "Notification received", level: "INFO")
|
|
self.contentHandler = contentHandler
|
|
self.bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
|
|
|
|
guard let connectRequest = self.getConnectRequest() else {
|
|
if let content = bestAttemptContent {
|
|
contentHandler(content)
|
|
}
|
|
return
|
|
}
|
|
|
|
if let currentTask = self.getTaskFromNotification() {
|
|
self.currentTask = currentTask
|
|
|
|
DispatchQueue.main.async { [self] in
|
|
do {
|
|
logger.log(tag: TAG, line: "Breez Liquid SDK is not connected, connecting...", level: "INFO")
|
|
liquidSDK = try BreezSDKLiquidConnector.register(connectRequest: connectRequest, listener: currentTask)
|
|
logger.log(tag: TAG, line: "Breez Liquid SDK connected successfully", level: "INFO")
|
|
try currentTask.start(liquidSDK: liquidSDK!)
|
|
} catch {
|
|
logger.log(tag: TAG, line: "Breez Liquid SDK connection failed \(error)", level: "ERROR")
|
|
shutdown()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
open func getConnectRequest() -> ConnectRequest? {
|
|
return nil
|
|
}
|
|
|
|
open func getTaskFromNotification() -> TaskProtocol? {
|
|
guard let content = bestAttemptContent else { return nil }
|
|
guard let notificationType = content.userInfo[Constants.MESSAGE_DATA_TYPE] as? String else { return nil }
|
|
self.logger.log(tag: TAG, line: "Notification payload: \(content.userInfo)", level: "INFO")
|
|
self.logger.log(tag: TAG, line: "Notification type: \(notificationType)", level: "INFO")
|
|
|
|
guard let payload = content.userInfo[Constants.MESSAGE_DATA_PAYLOAD] as? String else {
|
|
contentHandler!(content)
|
|
return nil
|
|
}
|
|
|
|
self.logger.log(tag: TAG, line: "\(notificationType) data string: \(payload)", level: "INFO")
|
|
switch(notificationType) {
|
|
case Constants.MESSAGE_TYPE_SWAP_UPDATED:
|
|
return SwapUpdatedTask(payload: payload, logger: self.logger, contentHandler: contentHandler, bestAttemptContent: bestAttemptContent)
|
|
case Constants.MESSAGE_TYPE_LNURL_PAY_INFO:
|
|
return LnurlPayInfoTask(payload: payload, logger: self.logger, contentHandler: contentHandler, bestAttemptContent: bestAttemptContent)
|
|
case Constants.MESSAGE_TYPE_LNURL_PAY_INVOICE:
|
|
return LnurlPayInvoiceTask(payload: payload, logger: self.logger, contentHandler: contentHandler, bestAttemptContent: bestAttemptContent)
|
|
default:
|
|
return nil
|
|
}
|
|
}
|
|
|
|
override open func serviceExtensionTimeWillExpire() {
|
|
self.logger.log(tag: TAG, line: "serviceExtensionTimeWillExpire()", level: "INFO")
|
|
|
|
// iOS calls this function just before the extension will be terminated by the system.
|
|
// Use this as an opportunity to deliver your "best attempt" at modified content,
|
|
// otherwise the original push payload will be used.
|
|
self.shutdown()
|
|
}
|
|
|
|
private func shutdown() -> Void {
|
|
self.logger.log(tag: TAG, line: "shutting down...", level: "INFO")
|
|
BreezSDKLiquidConnector.unregister()
|
|
self.logger.log(tag: TAG, line: "task unregistered", level: "INFO")
|
|
self.currentTask?.onShutdown()
|
|
}
|
|
|
|
public func setServiceLogger(logger: Logger) {
|
|
self.logger = ServiceLogger(logStream: logger)
|
|
}
|
|
}
|