66//
77
88import BetterProgress
9+ import CorkShared
910import CorkTerminalFunctions
1011import Foundation
11- import CorkShared
1212import SwiftUI
1313
1414@Observable
@@ -52,8 +52,9 @@ public class InstallationProgressTracker: @MainActor TerminalOutputStreamable
5252
5353 public enum FormulaInstallMatcher : TerminalOutputMatchable
5454 {
55- public enum StandardCases : TerminalOutputCase , StageDisplayable , Sendable
55+ public enum StandardCases : TerminalOutputCase , Sendable
5656 {
57+
5758 public static let allCases : [ InstallationProgressTracker . FormulaInstallMatcher . StandardCases ] = [
5859 . findingDependencies,
5960 . downloadingDependencies(
@@ -71,7 +72,7 @@ public class InstallationProgressTracker: @MainActor TerminalOutputStreamable
7172 package : . init( createEmpty: true )
7273 )
7374 ]
74-
75+
7576 case findingDependencies
7677 case downloadingDependencies(
7778 dependencyName: String
@@ -104,10 +105,11 @@ public class InstallationProgressTracker: @MainActor TerminalOutputStreamable
104105 [ " Installing \( package . name) " ]
105106 }
106107 }
107-
108+
108109 public var stageDescription : LocalizedStringKey
109110 {
110- switch self {
111+ switch self
112+ {
111113 case . findingDependencies:
112114 return " add-package.install.loading-dependencies "
113115 case . downloadingDependencies( let dependencyName) :
@@ -143,24 +145,19 @@ public class InstallationProgressTracker: @MainActor TerminalOutputStreamable
143145 {
144146 public enum StandardCases : TerminalOutputCase , StageDisplayable , Sendable
145147 {
146- public static let allCases : [ InstallationProgressTracker . CaskInstallMatcher . StandardCases ] = [
147- . downloadingCask( . init( createEmpty: true ) ) ,
148- . installingCask( . init( createEmpty: true ) ) ,
149- . movingCask( . init( createEmpty: true ) ) ,
150- . linkingAppToCask( . init( createEmpty: true ) )
151- ]
148+ public typealias Argument = MinimalHomebrewPackage
152149
153- case downloadingCask( MinimalHomebrewPackage )
154- case installingCask( MinimalHomebrewPackage )
155- case movingCask( MinimalHomebrewPackage )
156- case linkingAppToCask( MinimalHomebrewPackage )
150+ case downloadingCask
151+ case installingCask
152+ case movingCask
153+ case linkingAppToCask
157154
158155 public var patterns : [ String ]
159156 {
160157 switch self
161158 {
162159 case . downloadingCask:
163- [ " Downloading " ]
160+ [ " Downloading " , " Fetching downloads " ]
164161 case . installingCask:
165162 [ " Installing Cask " , " Purging files " ]
166163 case . movingCask:
@@ -169,19 +166,25 @@ public class InstallationProgressTracker: @MainActor TerminalOutputStreamable
169166 [ " Linking binary " ]
170167 }
171168 }
172-
173- public var stageDescription : LocalizedStringKey
174- {
175- switch self
169+
170+ @ ViewBuilder
171+ public func view ( _ arguments : [ MinimalHomebrewPackage ] ) -> some View {
172+ if let caskToInstall = arguments . first ( where : { $0 . type == . cask } )
176173 {
177- case . downloadingCask( let caskToInstall) :
178- return " add-package.install.downloading-cask- \( caskToInstall. name) "
179- case . installingCask( let caskToInstall) :
180- return " add-package.install.installing-cask- \( caskToInstall. name) "
181- case . movingCask( let caskToInstall) :
182- return " add-package.install.moving-cask- \( caskToInstall. name) "
183- case . linkingAppToCask( let caskToInstall) :
184- return " add-package.install.linking-cask-binary. \( caskToInstall. name) "
174+ switch self
175+ {
176+ case . downloadingCask:
177+ Text ( " add-package.install.downloading-cask- \( caskToInstall. name ( withPrecision: . precise) ) " )
178+ case . installingCask:
179+ Text ( " add-package.install.installing-cask- \( caskToInstall. name ( withPrecision: . precise) ) " )
180+ case . movingCask:
181+ Text ( " add-package.install.moving-cask- \( caskToInstall. name ( withPrecision: . precise) ) " )
182+ case . linkingAppToCask:
183+ Text ( " add-package.install.linking-cask-binary. \( caskToInstall. name ( withPrecision: . precise) ) " )
184+ }
185+ } else
186+ {
187+ EmptyView ( )
185188 }
186189 }
187190 }
@@ -214,7 +217,7 @@ public class InstallationProgressTracker: @MainActor TerminalOutputStreamable
214217 case formula( FormulaInstallMatcher . StandardCases )
215218 case cask( CaskInstallMatcher . StandardCases )
216219 }
217-
220+
218221 public func insertOutput( _ output: CorkTerminalFunctions . TerminalOutput )
219222 {
220223 self . outputs. append ( output)
@@ -251,13 +254,14 @@ public class InstallationProgressTracker: @MainActor TerminalOutputStreamable
251254 return . init( totalItems: Self . CaskInstallMatcher. StandardCases. allCases. count)
252255 }
253256 } ( )
254-
257+
255258 let installStageType : InstallStageType = {
256- switch packageToInstall. type {
259+ switch packageToInstall. type
260+ {
257261 case . formula:
258262 return . formula( . findingDependencies)
259263 case . cask:
260- return . cask( . downloadingCask( packageToInstall ) )
264+ return . cask( . downloadingCask)
261265 }
262266 } ( )
263267
0 commit comments