Skip to content

Commit 89d2538

Browse files
committed
Merge branch 'adjusted-terminal-output-matching.navigation' into main.adjusted-terminal-output-matching
2 parents b2cee6d + 0606d8b commit 89d2538

File tree

14 files changed

+161
-70
lines changed

14 files changed

+161
-70
lines changed

Cork/ContentView.swift

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ struct ContentView: View, Sendable
3232
@Environment(\.openWindow) var openWindow: OpenWindowAction
3333

3434
@InjectedObservable(\.appState) var appState: AppState
35+
@InjectedObservable(\.navigationManager) var navigationManager
3536

3637
@Environment(BrewPackagesTracker.self) var brewPackagesTracker: BrewPackagesTracker
3738
@Environment(TapTracker.self) var tapTracker: TapTracker
@@ -97,25 +98,22 @@ struct ContentView: View, Sendable
9798
NavigationSplitView(columnVisibility: self.$columnVisibility)
9899
{
99100
let _ = print("Parent appState: \(ObjectIdentifier(appState))")
100-
let _ = print("Parent navigationManager: \(ObjectIdentifier(appState.navigationManager))")
101-
101+
let _ = print("Parent navigationManager: \(ObjectIdentifier(navigationManager))")
102+
102103
SidebarView()
103104
} detail: {
104-
NavigationStack(path: Bindable(appState).navigationManager.path)
105+
switch navigationManager.openedScreen
105106
{
107+
case .package(let package):
108+
PackageDetailView(package: package)
109+
.frame(minWidth: 600, minHeight: 500)
110+
case .tap(let tap):
111+
TapDetailView(tap: tap)
112+
.frame(minWidth: 600, minHeight: 500)
113+
case nil:
106114
StartPage()
107115
.frame(minWidth: 600, minHeight: 500)
108116
}
109-
.navigationDestination(for: AppState.NavigationManager.DetailDestination.self)
110-
{ destination in
111-
switch destination
112-
{
113-
case .package(let package):
114-
PackageDetailView(package: package)
115-
case .tap(let tap):
116-
TapDetailView(tap: tap)
117-
}
118-
}
119117
}
120118
.navigationTitle("app-name")
121119
.navigationSubtitle("navigation.installed-packages.count-\(self.brewPackagesTracker.numberOfInstalledPackages)")
@@ -705,4 +703,3 @@ private extension ContentView
705703
await self.topPackagesTracker.loadTopPackages(numberOfDays: self.discoverabilityDaySpan.rawValue, appState: self.appState)
706704
}
707705
}
708-

Cork/CorkApp.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ struct CorkApp: App
2626
@NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate: AppDelegate
2727

2828
@InjectedObservable(\.appState) var appState: AppState
29+
@InjectedObservable(\.navigationManager) var navigationManager
2930
@InjectedObservable(\.brewfileManager) var brewfileManager: BrewfileManager
3031

31-
3232
@State var brewPackagesTracker: BrewPackagesTracker = .init()
3333
@State var tapTracker: TapTracker = .init()
3434

@@ -418,11 +418,11 @@ struct CorkApp: App
418418
{
419419
Button
420420
{
421-
appState.navigationManager.dismissScreen()
421+
navigationManager.dismissScreen()
422422
} label: {
423423
Label("action.go-to-status-page.menu-bar", systemImage: "house")
424424
}
425-
.disabled(!appState.navigationManager.isAnyScreenOpened)
425+
.disabled(!navigationManager.isAnyScreenOpened)
426426
Divider()
427427
}
428428

Cork/Protocols/View/Dismissable Pane.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ import FactoryKit
1212

1313
protocol DismissablePane: View
1414
{
15-
/// Has to be loaded from the `@Environment`
16-
var appState: AppState { get }
17-
1815
/// Dismisss this pane from the detail view
1916
func dismissPane()
2017
}
@@ -23,6 +20,8 @@ extension DismissablePane
2320
{
2421
func dismissPane()
2522
{
26-
self.appState.navigationManager.dismissScreen()
23+
let navigationManager: CorkModels.NavigationManager = Container.shared.navigationManager.resolve()
24+
25+
navigationManager.dismissScreen()
2726
}
2827
}

Cork/Views/Packages/Package Details/Package Details.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,8 @@ struct PackageDetailView: View, Sendable, DismissablePane
138138
.frame(minWidth: 450, minHeight: 400, alignment: .topLeading)
139139
.task(id: package.id)
140140
{
141+
AppConstants.shared.logger.info("Will start loading of details for package \(package.name(withPrecision: .general))")
142+
141143
isLoadingDetails = true
142144
defer
143145
{

Cork/Views/Sidebar/Components/Sidebar Package Row.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@ struct SidebarPackageRow: View
1818
@Default(.enableSwipeActions) var enableSwipeActions: Bool
1919

2020
@InjectedObservable(\.appState) var appState: AppState
21+
@InjectedObservable(\.navigationManager) var navigationManager
22+
2123
@Environment(BrewPackagesTracker.self) var brewPackagesTracker: BrewPackagesTracker
2224
@Environment(OutdatedPackagesTracker.self) var outdatedPackagesTracker: OutdatedPackagesTracker
2325

2426
var body: some View
2527
{
26-
NavigationLink(value: AppState.NavigationManager.DetailDestination.package(package: package))
28+
NavigationLink(value: NavigationManager.DetailDestination.package(package: package))
2729
{
2830
PackageListItem(packageItem: package)
2931
}

Cork/Views/Sidebar/Components/Taps Section.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import FactoryKit
1414
struct TapsSection: View
1515
{
1616
@InjectedObservable(\.appState) var appState: AppState
17+
@InjectedObservable(\.navigationManager) var navigationManager
18+
1719
@Environment(TapTracker.self) var tapTracker: TapTracker
1820

1921
let searchText: String
@@ -40,7 +42,7 @@ struct TapsSection: View
4042
{
4143
ForEach(displayedTaps.sorted(by: { $0.nameInternal < $1.nameInternal }))
4244
{ tap in
43-
NavigationLink(value: AppState.NavigationManager.DetailDestination.tap(tap: tap))
45+
NavigationLink(value: NavigationManager.DetailDestination.tap(tap: tap))
4446
{
4547
Text(tap.name(withPrecision: .full))
4648

Cork/Views/Sidebar/Sidebar View.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ struct SidebarView: View
1616
@Default(.allowMoreCompleteUninstallations) var allowMoreCompleteUninstallations: Bool
1717

1818
@InjectedObservable(\.appState) var appState: AppState
19+
@InjectedObservable(\.navigationManager) var navigationManager
1920

2021
@State private var isShowingSearchField: Bool = false
2122
@State private var searchText: String = ""
@@ -41,9 +42,9 @@ struct SidebarView: View
4142
var body: some View
4243
{
4344
let _ = print("Sidebar appState: \(ObjectIdentifier(appState))")
44-
let _ = print("Sidebar navigationManager \(ObjectIdentifier(appState.navigationManager))")
45+
let _ = print("Sidebar navigationManager \(ObjectIdentifier(navigationManager))")
4546
/// Navigation selection enables "Home" button behaviour. [2023.09]
46-
List(selection: Bindable(appState).navigationManager.path)
47+
List(selection: Bindable(navigationManager).openedScreen)
4748
{
4849
if currentTokens.isEmpty || currentTokens.contains(.formula) || currentTokens.contains(.intentionallyInstalledPackage)
4950
{
@@ -85,13 +86,13 @@ struct SidebarView: View
8586
{
8687
Button
8788
{
88-
appState.navigationManager.dismissScreen()
89+
navigationManager.dismissScreen()
8990
} label: {
9091
Label("action.go-to-status-page", systemImage: "house")
9192
}
9293
.help("action.go-to-status-page")
9394
.disabled(
94-
!appState.navigationManager.isAnyScreenOpened || !searchText.isEmpty || !currentTokens.isEmpty
95+
!navigationManager.isAnyScreenOpened || !searchText.isEmpty || !currentTokens.isEmpty
9596
)
9697
.accessibilityLabel("accessibility.label.return-to-status-page")
9798
}

Modules/Packages/PackagesModels/App State.swift

Lines changed: 1 addition & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import Foundation
1111
import Observation
1212
@preconcurrency import UserNotifications
1313
import SwiftUI
14+
import SwiftNavigation
1415

1516
/// Class that holds the global state of the app, excluding services
1617
@Observable @MainActor
@@ -32,45 +33,6 @@ public final class AppState
3233

3334
public var licensingState: LicensingState = .notBoughtOrHasNotActivatedDemo
3435

35-
/// Class for controlling the opened panes, and providing information about the status of the currently opened pane
36-
@Observable @MainActor
37-
public final class NavigationManager
38-
{
39-
/// Possible things to show in the detail pane
40-
/// Can be either a ``BrewPackage`` for a Formula or Cask, or ``BrewTap`` for a Tap
41-
public enum DetailDestination: Hashable
42-
{
43-
case package(package: BrewPackage)
44-
case tap(tap: BrewTap)
45-
}
46-
47-
/// Which pane is opened in the detail
48-
public var openedScreen: DetailDestination?
49-
50-
public var path: [DetailDestination] = .init()
51-
52-
/// Dismiss the currently opened screen and return to the status page
53-
public func dismissScreen()
54-
{
55-
self.openedScreen = nil
56-
}
57-
58-
/// Check whether any panes are currently opened
59-
public var isAnyScreenOpened: Bool
60-
{
61-
if self.openedScreen == nil
62-
{
63-
return false
64-
}
65-
else
66-
{
67-
return true
68-
}
69-
}
70-
}
71-
72-
public var navigationManager: NavigationManager = .init()
73-
7436
// MARK: - Notifications
7537

7638
public var notificationEnabledInSystemSettings: Bool?

Modules/Packages/PackagesModels/Dependencies/Navigation Manager Dependency.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,15 @@
88
import Foundation
99
import FactoryKit
1010

11+
public extension Container
12+
{
13+
@MainActor
14+
var navigationManager: Factory<NavigationManager>
15+
{
16+
Factory(self)
17+
{
18+
NavigationManager()
19+
}
20+
.singleton
21+
}
22+
}

Modules/Packages/PackagesModels/Logic/Packages/Load Up Package Info.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ import CorkShared
99
import Foundation
1010
import CorkTerminalFunctions
1111

12-
enum BrewPackageInfoLoadingError: LocalizedError
12+
public enum BrewPackageInfoLoadingError: LocalizedError
1313
{
1414
case didNotGetAnyTerminalOutput, standardErrorNotEmpty(presentError: String), couldNotConvertOutputToData, couldNotRetrievePackageFromOutput, couldNotDecodeOutput(presentError: String)
1515

16-
var errorDescription: String?
16+
public var errorDescription: String?
1717
{
1818
switch self
1919
{
@@ -257,7 +257,7 @@ extension BrewPackage
257257

258258
/// Load package details
259259
@MainActor
260-
public func loadDetails() async throws -> BrewPackage.BrewPackageDetails
260+
public func loadDetails() async throws(BrewPackageInfoLoadingError) -> BrewPackage.BrewPackageDetails
261261
{
262262
let decoder: JSONDecoder = {
263263
let decoder: JSONDecoder = .init()
@@ -312,6 +312,8 @@ extension BrewPackage
312312

313313
throw BrewPackageInfoLoadingError.couldNotConvertOutputToData
314314
}
315+
316+
AppConstants.shared.logger.debug("Converted package details JSON to parseable data. Data size: \(decodableData.count)")
315317

316318
// MARK: - Decoding
317319

0 commit comments

Comments
 (0)