Merge iOS and Mac app into one
This commit is contained in:
53
ABS Client/Audiobookshelf swift/Views/ContentView.swift
Normal file
53
ABS Client/Audiobookshelf swift/Views/ContentView.swift
Normal file
@@ -0,0 +1,53 @@
|
||||
import SwiftUI
|
||||
|
||||
struct ContentView: View {
|
||||
@Environment(AppState.self) private var app
|
||||
#if os(iOS)
|
||||
@State private var splashVisible = true
|
||||
#endif
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
mainContent
|
||||
#if os(iOS)
|
||||
if splashVisible {
|
||||
SplashView()
|
||||
.zIndex(10)
|
||||
.transition(.opacity.animation(.easeOut(duration: 0.55)))
|
||||
}
|
||||
#endif
|
||||
}
|
||||
.task { await boot() }
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
private var mainContent: some View {
|
||||
Group {
|
||||
if app.auth.isLoggedIn {
|
||||
MainView()
|
||||
} else {
|
||||
LoginView()
|
||||
}
|
||||
}
|
||||
#if os(iOS)
|
||||
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||
#else
|
||||
.frame(minWidth: 900, minHeight: 600)
|
||||
#endif
|
||||
}
|
||||
|
||||
private func boot() async {
|
||||
#if os(iOS)
|
||||
// Run bootstrap and minimum splash time in parallel;
|
||||
// dismiss splash only after BOTH complete.
|
||||
await withTaskGroup(of: Void.self) { group in
|
||||
group.addTask { await app.bootstrap() }
|
||||
group.addTask { try? await Task.sleep(for: .seconds(1.2)) }
|
||||
await group.waitForAll()
|
||||
}
|
||||
withAnimation { splashVisible = false }
|
||||
#else
|
||||
await app.bootstrap()
|
||||
#endif
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user