Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions LDKNodeMonday.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
objects = {

/* Begin PBXBuildFile section */
655574802D398A750064F859 /* LoadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6555747F2D398A750064F859 /* LoadingView.swift */; };
655574822D3994E10064F859 /* ErrorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 655574812D3994E10064F859 /* ErrorView.swift */; };
65875A932CCB9809000D3E70 /* LDKNode in Frameworks */ = {isa = PBXBuildFile; productRef = 65875A922CCB9809000D3E70 /* LDKNode */; };
659EE6952CF8D4990064ED78 /* ImportWalletView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 659EE6942CF8D4990064ED78 /* ImportWalletView.swift */; };
65A406632D070CBD00EA331E /* NetworkSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65A406622D070CBD00EA331E /* NetworkSettingsView.swift */; };
Expand All @@ -31,7 +33,6 @@
AE17E8DE29A402E40058C9C9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE17E8DD29A402E40058C9C9 /* Assets.xcassets */; };
AE17E8E129A402E40058C9C9 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE17E8E029A402E40058C9C9 /* Preview Assets.xcassets */; };
AE17E90D29A42D430058C9C9 /* LightningNodeService.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE17E90C29A42D430058C9C9 /* LightningNodeService.swift */; };
AE186B8E2A1540B700338463 /* StartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE186B8D2A1540B700338463 /* StartView.swift */; };
AE1D9BEC2B2A1FFD00620748 /* BitcoinUI in Frameworks */ = {isa = PBXBuildFile; productRef = AE1D9BEB2B2A1FFD00620748 /* BitcoinUI */; };
AE1D9C0B2B2A251500620748 /* ChannelDetails+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE1D9C0A2B2A251500620748 /* ChannelDetails+Extensions.swift */; };
AE33D3AE2C7BD0EE00AF562B /* URL+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE33D3AD2C7BD0EE00AF562B /* URL+Extensions.swift */; };
Expand All @@ -40,7 +41,6 @@
AE38153B2B6A979E006B2952 /* LightningNodeInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE38153A2B6A979E006B2952 /* LightningNodeInfo.swift */; };
AE4536152C83508E0047D1B2 /* AddressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4536142C83508E0047D1B2 /* AddressView.swift */; };
AE49E84C2A24F96F002623E8 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE49E84B2A24F96F002623E8 /* Constants.swift */; };
AE49E8522A253618002623E8 /* StartViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE49E8512A253618002623E8 /* StartViewModel.swift */; };
AE49E8542A253647002623E8 /* BitcoinViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE49E8532A253647002623E8 /* BitcoinViewModel.swift */; };
AE49E8582A2536B4002623E8 /* ChannelsListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE49E8572A2536B4002623E8 /* ChannelsListViewModel.swift */; };
AE49E85A2A2536D4002623E8 /* ChannelAddViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE49E8592A2536D4002623E8 /* ChannelAddViewModel.swift */; };
Expand Down Expand Up @@ -93,6 +93,8 @@
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
6555747F2D398A750064F859 /* LoadingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadingView.swift; sourceTree = "<group>"; };
655574812D3994E10064F859 /* ErrorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorView.swift; sourceTree = "<group>"; };
659EE6942CF8D4990064ED78 /* ImportWalletView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportWalletView.swift; sourceTree = "<group>"; };
65A406622D070CBD00EA331E /* NetworkSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkSettingsView.swift; sourceTree = "<group>"; };
AE00550D2B479EF000100797 /* OnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingView.swift; sourceTree = "<group>"; };
Expand All @@ -115,15 +117,13 @@
AE17E8DD29A402E40058C9C9 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
AE17E8E029A402E40058C9C9 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
AE17E90C29A42D430058C9C9 /* LightningNodeService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LightningNodeService.swift; sourceTree = "<group>"; };
AE186B8D2A1540B700338463 /* StartView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StartView.swift; sourceTree = "<group>"; };
AE1D9C0A2B2A251500620748 /* ChannelDetails+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ChannelDetails+Extensions.swift"; sourceTree = "<group>"; };
AE33D3AD2C7BD0EE00AF562B /* URL+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URL+Extensions.swift"; sourceTree = "<group>"; };
AE3815352B6A9705006B2952 /* LightningNodesService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LightningNodesService.swift; sourceTree = "<group>"; };
AE3815382B6A978A006B2952 /* LightningNodeServiceError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LightningNodeServiceError.swift; sourceTree = "<group>"; };
AE38153A2B6A979E006B2952 /* LightningNodeInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LightningNodeInfo.swift; sourceTree = "<group>"; };
AE4536142C83508E0047D1B2 /* AddressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddressView.swift; sourceTree = "<group>"; };
AE49E84B2A24F96F002623E8 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
AE49E8512A253618002623E8 /* StartViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StartViewModel.swift; sourceTree = "<group>"; };
AE49E8532A253647002623E8 /* BitcoinViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BitcoinViewModel.swift; sourceTree = "<group>"; };
AE49E8572A2536B4002623E8 /* ChannelsListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelsListViewModel.swift; sourceTree = "<group>"; };
AE49E8592A2536D4002623E8 /* ChannelAddViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelAddViewModel.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -302,9 +302,10 @@
children = (
65A406622D070CBD00EA331E /* NetworkSettingsView.swift */,
AE00550D2B479EF000100797 /* OnboardingView.swift */,
AE186B8D2A1540B700338463 /* StartView.swift */,
AE4C15B12A1316D100AA8917 /* BitcoinView.swift */,
659EE6942CF8D4990064ED78 /* ImportWalletView.swift */,
6555747F2D398A750064F859 /* LoadingView.swift */,
655574812D3994E10064F859 /* ErrorView.swift */,
AE551D402B8ECC2D0034B61E /* Payments */,
AE551D412B8ECC390034B61E /* Send */,
AE551D422B8ECC400034B61E /* Receive */,
Expand All @@ -316,7 +317,6 @@
isa = PBXGroup;
children = (
AE00550F2B479F1100100797 /* OnboardingViewModel.swift */,
AE49E8512A253618002623E8 /* StartViewModel.swift */,
AE49E8532A253647002623E8 /* BitcoinViewModel.swift */,
AE551D452B8ECE180034B61E /* Payments */,
AE43F27A2C7E529C00406326 /* Send */,
Expand Down Expand Up @@ -619,13 +619,13 @@
buildActionMask = 2147483647;
files = (
AE7096352B5C205F0038BE56 /* PriceServiceError.swift in Sources */,
AE186B8E2A1540B700338463 /* StartView.swift in Sources */,
AEDF47F32B3FBAB900145D64 /* Notification+Extensions.swift in Sources */,
AE0055162B4A0E0100100797 /* Logger+Extensions.swift in Sources */,
AE70963C2B5C22270038BE56 /* CurrencyCode.swift in Sources */,
AE80C2002C4AB360006E7193 /* BIP21View.swift in Sources */,
AE01C5B22AB3BF3C00F28C7E /* KeyService.swift in Sources */,
AE49E8642A2537B3002623E8 /* PeersListViewModel.swift in Sources */,
655574822D3994E10064F859 /* ErrorView.swift in Sources */,
AE49E8542A253647002623E8 /* BitcoinViewModel.swift in Sources */,
AE17E90D29A42D430058C9C9 /* LightningNodeService.swift in Sources */,
AEBAA4922A01C34A0042EA82 /* ChannelDetailView.swift in Sources */,
Expand Down Expand Up @@ -682,9 +682,9 @@
AE7D3FAB2A4263AE00EAE730 /* PaymentsView.swift in Sources */,
AE80116D29A59AF4009B9967 /* ChannelAddView.swift in Sources */,
AE551D472B8ECE7D0034B61E /* Payment.swift in Sources */,
655574802D398A750064F859 /* LoadingView.swift in Sources */,
AE51BEFA2B37A2A500BAE452 /* Event+Extensions.swift in Sources */,
AE80116B29A59976009B9967 /* SettingsView.swift in Sources */,
AE49E8522A253618002623E8 /* StartViewModel.swift in Sources */,
AE4C15B22A1316D100AA8917 /* BitcoinView.swift in Sources */,
AEE5B76A2A09C722001E5E59 /* Peer.swift in Sources */,
AE49E84C2A24F96F002623E8 /* Constants.swift in Sources */,
Expand Down
60 changes: 54 additions & 6 deletions LDKNodeMonday/App/LDKNodeMondayApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,63 @@ import SwiftUI

@main
struct LDKNodeMondayApp: App {

@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
@AppStorage("isOnboarding") var isOnboarding: Bool = true

@State private var appState = AppState.loading
@State private var appError: Error?
@State private var navigationPath = NavigationPath()

var body: some Scene {
WindowGroup {
NavigationStack(path: $navigationPath) {
if isOnboarding {
OnboardingView(viewModel: .init())
} else {
StartView(viewModel: .init(), navigationPath: $navigationPath)
switch appState {
case .onboarding:
OnboardingView(viewModel: .init(appState: $appState))
case .wallet:
BitcoinView(
viewModel: .init(appState: $appState, priceClient: .live),
sendNavigationPath: $navigationPath
)
case .error:
ErrorView(error: self.appError)
default:
LoadingView()
}
}
.onChange(of: isOnboarding) { oldValue, newValue in
.onChange(of: appState) { oldValue, newValue in
navigationPath = NavigationPath()
}
.task {
await start()
}
}
}

func start() async {
var backupInfo: BackupInfo?

backupInfo = try? KeyClient.live.getBackupInfo()

if backupInfo != nil {
do {
// TODO: .start could take parameters from backupInfo (seed, network, url, lsp)
try await LightningNodeService.shared.start()
LightningNodeService.shared.listenForEvents()
await MainActor.run {
self.appState = .wallet
}
} catch let error {
debugPrint(error)
await MainActor.run {
self.appError = error
self.appState = .error
}
}
} else {
await MainActor.run {
self.appState = .onboarding
}
}
}
}
Expand All @@ -34,3 +75,10 @@ class AppDelegate: NSObject, UIApplicationDelegate {
try? LightningNodeService.shared.stop()
}
}

public enum AppState {
case onboarding
case wallet
case loading
case error
}
4 changes: 3 additions & 1 deletion LDKNodeMonday/View Model/Home/BitcoinViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import LDKNode
import SwiftUI

class BitcoinViewModel: ObservableObject {
@Binding var appState: AppState
@Published var bitcoinViewError: MondayError?
@Published var networkColor = Color.gray
@Published var status: NodeStatus?
Expand All @@ -33,7 +34,8 @@ class BitcoinViewModel: ObservableObject {
return totalUSD
}

init(priceClient: PriceClient) {
init(appState: Binding<AppState>, priceClient: PriceClient) {
_appState = appState
self.priceClient = priceClient
}

Expand Down
7 changes: 4 additions & 3 deletions LDKNodeMonday/View Model/Home/OnboardingViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import LDKNode
import SwiftUI

class OnboardingViewModel: ObservableObject {
@AppStorage("isOnboarding") var isOnboarding: Bool?
@Binding var appState: AppState
@Published var networkColor = Color.gray
@Published var onboardingViewError: MondayError?
@Published var seedPhrase: String = "" {
Expand Down Expand Up @@ -77,7 +77,8 @@ class OnboardingViewModel: ObservableObject {
}
}

init() {
init(appState: Binding<AppState>) {
_appState = appState

do {
if let networkString = try KeyClient.live.getNetwork() {
Expand Down Expand Up @@ -108,7 +109,7 @@ class OnboardingViewModel: ObservableObject {
try KeyClient.live.saveEsploraURL(selectedEsploraServer.url)
LightningNodeService.shared = LightningNodeService()
DispatchQueue.main.async {
self.isOnboarding = false
self.appState = .wallet
}
} catch let error as NodeError {
let errorString = handleNodeError(error)
Expand Down
54 changes: 0 additions & 54 deletions LDKNodeMonday/View Model/Home/StartViewModel.swift

This file was deleted.

58 changes: 21 additions & 37 deletions LDKNodeMonday/View Model/Profile/SettingsViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import LDKNode
import SwiftUI

class SettingsViewModel: ObservableObject {
@AppStorage("isOnboarding") var isOnboarding: Bool?
@Binding var appState: AppState
@Published var nodeIDError: MondayError?
@Published var nodeID: String = ""
@Published var network: String?
Expand All @@ -19,7 +19,8 @@ class SettingsViewModel: ObservableObject {
@Published var isStatusFinished: Bool = false
let keyClient: KeyClient

init(keyClient: KeyClient = .live) {
init(appState: Binding<AppState>, keyClient: KeyClient = .live) {
_appState = appState
self.keyClient = keyClient
}

Expand Down Expand Up @@ -48,44 +49,27 @@ class SettingsViewModel: ObservableObject {

func delete() {
do {
try LightningNodeService.shared.stop()
try LightningNodeService.shared.deleteWallet()
try KeyClient.live.deleteNetwork()
try KeyClient.live.deleteEsplora()
try LightningNodeService.shared.deleteDocuments()
self.isOnboarding = true
} catch let error as NodeError {
let errorString = handleNodeError(error)
DispatchQueue.main.async {
self.nodeIDError = .init(title: errorString.title, detail: errorString.detail)
if LightningNodeService.shared.status().isRunning {
try LightningNodeService.shared.stop()
}
} catch {
DispatchQueue.main.async {
self.nodeIDError = .init(
title: "Unexpected error",
detail: error.localizedDescription
)
}
}
}

func onboarding() {
do {
try LightningNodeService.shared.stop()
try KeyClient.live.deleteNetwork()
try KeyClient.live.deleteEsplora()
self.isOnboarding = true
} catch let error as NodeError {
let errorString = handleNodeError(error)
try LightningNodeService.shared.deleteDocuments()
try LightningNodeService.shared.deleteWallet()
try self.keyClient.deleteNetwork()
try self.keyClient.deleteEsplora()

DispatchQueue.main.async {
self.nodeIDError = .init(title: errorString.title, detail: errorString.detail)
self.appState = .onboarding
}
} catch {
DispatchQueue.main.async {
self.nodeIDError = .init(
title: "Unexpected error",
detail: error.localizedDescription
)
} catch let error {
if let nodeError = error as? NodeError {
let errorString = handleNodeError(nodeError)
DispatchQueue.main.async {
self.nodeIDError = .init(title: errorString.title, detail: errorString.detail)
}
} else {
DispatchQueue.main.async {
self.nodeIDError = .init(title: "Error", detail: error.localizedDescription)
}
}
}
}
Expand Down
7 changes: 5 additions & 2 deletions LDKNodeMonday/View/Home/BitcoinView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ struct BitcoinView: View {
}
}
) {
SettingsView(viewModel: .init())
SettingsView(viewModel: .init(appState: viewModel.$appState))
}
.alert(isPresented: $showingBitcoinViewErrorAlert) {
Alert(
Expand Down Expand Up @@ -346,6 +346,9 @@ enum NavigationDestination: Hashable {

#if DEBUG
#Preview {
BitcoinView(viewModel: .init(priceClient: .mock), sendNavigationPath: .constant(.init()))
BitcoinView(
viewModel: .init(appState: .constant(.onboarding), priceClient: .mock),
sendNavigationPath: .constant(.init())
)
}
#endif
Loading