Skip to content

Commit e912213

Browse files
committed
^ Loading state of taps
1 parent 89d2538 commit e912213

File tree

5 files changed

+60
-6
lines changed

5 files changed

+60
-6
lines changed

Cork/Localizable.xcstrings

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16419,7 +16419,15 @@
1641916419
},
1642016420
"add-package.search.failed" : {
1642116421
"comment" : "Label for an inline content unavailable view that indicates that a search for packages failed.",
16422-
"isCommentAutoGenerated" : true
16422+
"isCommentAutoGenerated" : true,
16423+
"localizations" : {
16424+
"en" : {
16425+
"stringUnit" : {
16426+
"state" : "translated",
16427+
"value" : "Couldn’t find anything"
16428+
}
16429+
}
16430+
}
1642316431
},
1642416432
"add-package.search.prompt" : {
1642516433
"localizations" : {

Cork/Views/Taps/Tap Details/Tap Details.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ struct TapDetailView: View, Sendable
3030

3131
@InjectedObservable(\.appState) var appState: AppState
3232
@Environment(TapTracker.self) var tapTracker: TapTracker
33-
34-
@State var tapInfo: TapInfo?
3533

3634
@State private var loadingState: TapDetailsLoadingState = .loading
3735

@@ -81,9 +79,13 @@ struct TapDetailView: View, Sendable
8179
.frame(minWidth: 450, minHeight: 400, alignment: .topLeading)
8280
.task(id: tap.id)
8381
{
82+
loadingState = .loading
83+
8484
do
8585
{
86-
tapInfo = try await tap.loadDetails()
86+
let loadedTapInfo: TapInfo = try await tap.loadDetails()
87+
88+
loadingState = .loaded(info: loadedTapInfo)
8789
} catch let tapDetailsLoadingError {
8890
loadingState = .erroredOut(withErrorText: tapDetailsLoadingError.localizedDescription)
8991
}

Modules/Packages/PackagesModels/Logic/Taps/Load Tap Details.swift

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,55 @@ public extension BrewTap
1313
{
1414
enum TapInfoLoadingError: LocalizedError
1515
{
16+
case noJsonReturned
1617
case couldNotReadJson
1718
case couldNotDecodeJson(error: TapInfo.JSONParsingError)
19+
20+
public var errorDescription: String?
21+
{
22+
switch self
23+
{
24+
case .noJsonReturned:
25+
return String(localized: "error.tap-info-loading.json-output-empty")
26+
case .couldNotReadJson:
27+
return String(localized: "error.tap-info-loading.could-not-read-json")
28+
case .couldNotDecodeJson(let error):
29+
return error.localizedDescription
30+
}
31+
}
1832
}
1933

2034
func loadDetails() async throws(BrewTap.TapInfoLoadingError) -> TapInfo
2135
{
36+
37+
appConstants.logger.info("Will start loading tap details for tap \(self.name(withPrecision: .full))")
38+
39+
defer
40+
{
41+
appConstants.logger.info("Finished loading of tap info")
42+
43+
self.setBeingLoadedStatus(to: false)
44+
}
45+
2246
self.setBeingLoadedStatus(to: true)
2347

24-
guard let tapInfoRaw: Data = await shell(AppConstants.shared.brewExecutablePath, ["tap-info", "--json", self.name(withPrecision: .full)]).getJsonFromOutput(failOnAnyErrorsPresent: false)
48+
let tapInfoLoadingResult: [TerminalOutput] = await shell(AppConstants.shared.brewExecutablePath, ["tap-info", "--json", self.name(withPrecision: .full)])
49+
50+
appConstants.logger.info("Result of tap info: \(tapInfoLoadingResult)")
51+
52+
guard !tapInfoLoadingResult.isEmpty else
53+
{
54+
appConstants.logger.error("There was no JSON in tap info call for tap \(self.name(withPrecision: .full))")
55+
56+
throw .noJsonReturned
57+
}
58+
59+
guard let tapInfoRaw: Data = tapInfoLoadingResult.getJsonFromOutput(failOnAnyErrorsPresent: false)
2560
else
2661
{
2762
throw .couldNotReadJson
2863
}
29-
64+
3065
do
3166
{
3267
self.setBeingLoadedStatus(to: false)

Modules/Packages/PackagesModels/Models/Brew Tap.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ public extension BrewTap
2424

2525
public final actor BrewTap: Identifiable, Hashable, ModifiableActor, LoadableActor
2626
{
27+
@Injected(\.appConstants) var appConstants: AppConstants
28+
2729
public struct BrewTapName: Hashable, Equatable, Comparable, Sendable
2830
{
2931
public static func < (lhs: BrewTap.BrewTapName, rhs: BrewTap.BrewTapName) -> Bool

Project.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,13 @@ let corkFeature_brewfiles: ProjectDescription.Target = .target(
210210
sources: [
211211
"Modules/Features/Brewfiles/**/*.swift"
212212
],
213+
dependencies: [
214+
.target(corkSharedTarget),
215+
.target(corkModelsTarget),
216+
.external(name: "FactoryKit"),
217+
.external(name: "Defaults"),
218+
.external(name: "DefaultsMacros"),
219+
],
213220
settings: .settings(configurations: [
214221
.debug(
215222
name: "Debug",

0 commit comments

Comments
 (0)