Skip to content

Commit

Permalink
Rework brew actions
Browse files Browse the repository at this point in the history
Move brew actions (install, update, etc.) into CaskManager (formerly CaskData). This way the processes don't run on the views.
  • Loading branch information
milanvarady committed Jan 1, 2025
1 parent 40aee0b commit 3ea36bd
Show file tree
Hide file tree
Showing 40 changed files with 716 additions and 596 deletions.
54 changes: 41 additions & 13 deletions Applite.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
418E9EF42AACD9C000046A58 /* CircularProgress in Frameworks */ = {isa = PBXBuildFile; productRef = 418E9EF32AACD9C000046A58 /* CircularProgress */; };
418F331C28EB3D540023D76F /* AppGridView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418F331B28EB3D540023D76F /* AppGridView.swift */; };
418F332428EC8BA10023D76F /* Cask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418F332328EC8BA10023D76F /* Cask.swift */; };
418F332628EC921D0023D76F /* CaskData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418F332528EC921D0023D76F /* CaskData.swift */; };
418F332628EC921D0023D76F /* CaskManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418F332528EC921D0023D76F /* CaskManager.swift */; };
4191392C29159B5C00F1D75D /* CaskDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4191392B29159B5C00F1D75D /* CaskDTO.swift */; };
419256062D1C546D00D9EF10 /* askpass.js in Resources */ = {isa = PBXBuildFile; fileRef = 419256052D1C546D00D9EF10 /* askpass.js */; };
419256082D1C734600D9EF10 /* Shell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419256072D1C734600D9EF10 /* Shell.swift */; };
Expand Down Expand Up @@ -91,14 +91,19 @@
419256622D1E15EA00D9EF10 /* UpdateView+UpdateUnavailable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419256612D1E15EA00D9EF10 /* UpdateView+UpdateUnavailable.swift */; };
419256642D1E164600D9EF10 /* UpdateView+ToolbarItems.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419256632D1E164600D9EF10 /* UpdateView+ToolbarItems.swift */; };
419256682D1E18D100D9EF10 /* AlertManagerViewModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419256672D1E18D100D9EF10 /* AlertManagerViewModifier.swift */; };
4192566B2D1F286B00D9EF10 /* Cask+BrewFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4192566A2D1F286B00D9EF10 /* Cask+BrewFunctions.swift */; };
4192566B2D1F286B00D9EF10 /* CaskManager+BrewFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4192566A2D1F286B00D9EF10 /* CaskManager+BrewFunctions.swift */; };
4192566E2D1F293700D9EF10 /* Cask+LaunchApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4192566D2D1F293700D9EF10 /* Cask+LaunchApp.swift */; };
419256702D1F299E00D9EF10 /* Cask+ProtocolConformances.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4192566F2D1F299E00D9EF10 /* Cask+ProtocolConformances.swift */; };
419256832D22055200D9EF10 /* CaskInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419256822D22055200D9EF10 /* CaskInfo.swift */; };
4192568A2D22D67400D9EF10 /* SidebarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419256892D22D67400D9EF10 /* SidebarItem.swift */; };
4192568C2D22D7FC00D9EF10 /* AppMigrationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4192568B2D22D7FC00D9EF10 /* AppMigrationView.swift */; };
4192568F2D22DC9E00D9EF10 /* FontExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4192568E2D22DC9E00D9EF10 /* FontExtension.swift */; };
419256912D23F93E00D9EF10 /* Card.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419256902D23F93E00D9EF10 /* Card.swift */; };
419256942D24255000D9EF10 /* CaskLoadError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419256932D24255000D9EF10 /* CaskLoadError.swift */; };
419256962D2430C500D9EF10 /* CaskManager+LoadData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419256952D2430C500D9EF10 /* CaskManager+LoadData.swift */; };
419256982D24311B00D9EF10 /* CaskManager+RefreshOutdated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419256972D24311B00D9EF10 /* CaskManager+RefreshOutdated.swift */; };
4192569B2D24335900D9EF10 /* CaskTaskError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4192569A2D24335900D9EF10 /* CaskTaskError.swift */; };
4192569D2D2433E200D9EF10 /* CaskProgressState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4192569C2D2433E200D9EF10 /* CaskProgressState.swift */; };
419256A12D25ACC300D9EF10 /* CategoryViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419256A02D25ACC300D9EF10 /* CategoryViewModel.swift */; };
419506A42964A27F00FE5802 /* SetupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419506A32964A27F00FE5802 /* SetupView.swift */; };
419506A62964A5EF00FE5802 /* BrewPathSelectorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419506A52964A5EF00FE5802 /* BrewPathSelectorView.swift */; };
4196C8F528F9CB2600EADDDA /* DiscoverView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4196C8F428F9CB2600EADDDA /* DiscoverView.swift */; };
Expand Down Expand Up @@ -151,7 +156,7 @@
4189CE40293C980E009C836D /* BigButtonStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BigButtonStyle.swift; sourceTree = "<group>"; };
418F331B28EB3D540023D76F /* AppGridView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppGridView.swift; sourceTree = "<group>"; };
418F332328EC8BA10023D76F /* Cask.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cask.swift; sourceTree = "<group>"; };
418F332528EC921D0023D76F /* CaskData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaskData.swift; sourceTree = "<group>"; };
418F332528EC921D0023D76F /* CaskManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaskManager.swift; sourceTree = "<group>"; };
4191392B29159B5C00F1D75D /* CaskDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaskDTO.swift; sourceTree = "<group>"; };
419256052D1C546D00D9EF10 /* askpass.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = askpass.js; sourceTree = "<group>"; };
419256072D1C734600D9EF10 /* Shell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Shell.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -194,14 +199,19 @@
419256612D1E15EA00D9EF10 /* UpdateView+UpdateUnavailable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UpdateView+UpdateUnavailable.swift"; sourceTree = "<group>"; };
419256632D1E164600D9EF10 /* UpdateView+ToolbarItems.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UpdateView+ToolbarItems.swift"; sourceTree = "<group>"; };
419256672D1E18D100D9EF10 /* AlertManagerViewModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertManagerViewModifier.swift; sourceTree = "<group>"; };
4192566A2D1F286B00D9EF10 /* Cask+BrewFunctions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Cask+BrewFunctions.swift"; sourceTree = "<group>"; };
4192566A2D1F286B00D9EF10 /* CaskManager+BrewFunctions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CaskManager+BrewFunctions.swift"; sourceTree = "<group>"; };
4192566D2D1F293700D9EF10 /* Cask+LaunchApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Cask+LaunchApp.swift"; sourceTree = "<group>"; };
4192566F2D1F299E00D9EF10 /* Cask+ProtocolConformances.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Cask+ProtocolConformances.swift"; sourceTree = "<group>"; };
419256822D22055200D9EF10 /* CaskInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaskInfo.swift; sourceTree = "<group>"; };
419256892D22D67400D9EF10 /* SidebarItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarItem.swift; sourceTree = "<group>"; };
4192568B2D22D7FC00D9EF10 /* AppMigrationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppMigrationView.swift; sourceTree = "<group>"; };
4192568E2D22DC9E00D9EF10 /* FontExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FontExtension.swift; sourceTree = "<group>"; };
419256902D23F93E00D9EF10 /* Card.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Card.swift; sourceTree = "<group>"; };
419256932D24255000D9EF10 /* CaskLoadError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaskLoadError.swift; sourceTree = "<group>"; };
419256952D2430C500D9EF10 /* CaskManager+LoadData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CaskManager+LoadData.swift"; sourceTree = "<group>"; };
419256972D24311B00D9EF10 /* CaskManager+RefreshOutdated.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CaskManager+RefreshOutdated.swift"; sourceTree = "<group>"; };
4192569A2D24335900D9EF10 /* CaskTaskError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaskTaskError.swift; sourceTree = "<group>"; };
4192569C2D2433E200D9EF10 /* CaskProgressState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaskProgressState.swift; sourceTree = "<group>"; };
419256A02D25ACC300D9EF10 /* CategoryViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CategoryViewModel.swift; sourceTree = "<group>"; };
419506A32964A27F00FE5802 /* SetupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetupView.swift; sourceTree = "<group>"; };
419506A52964A5EF00FE5802 /* BrewPathSelectorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrewPathSelectorView.swift; sourceTree = "<group>"; };
419506A729696A5300FE5802 /* Applite-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Applite-Info.plist"; sourceTree = SOURCE_ROOT; };
Expand Down Expand Up @@ -379,8 +389,8 @@
41483CCA29101C7200BB10C2 /* Cask Models */ = {
isa = PBXGroup;
children = (
419256922D24253800D9EF10 /* Cask Manager */,
419256692D1F284100D9EF10 /* Cask */,
418F332528EC921D0023D76F /* CaskData.swift */,
419256822D22055200D9EF10 /* CaskInfo.swift */,
4191392B29159B5C00F1D75D /* CaskDTO.swift */,
4166EE7C28F73B2300CE305A /* BrewAnalytics.swift */,
Expand All @@ -392,6 +402,7 @@
isa = PBXGroup;
children = (
41483CCC29101C9900BB10C2 /* Category.swift */,
419256A02D25ACC300D9EF10 /* CategoryViewModel.swift */,
);
path = Categories;
sourceTree = "<group>";
Expand Down Expand Up @@ -567,13 +578,25 @@
isa = PBXGroup;
children = (
418F332328EC8BA10023D76F /* Cask.swift */,
4192566A2D1F286B00D9EF10 /* Cask+BrewFunctions.swift */,
4192566D2D1F293700D9EF10 /* Cask+LaunchApp.swift */,
4192566F2D1F299E00D9EF10 /* Cask+ProtocolConformances.swift */,
);
path = Cask;
sourceTree = "<group>";
};
419256922D24253800D9EF10 /* Cask Manager */ = {
isa = PBXGroup;
children = (
418F332528EC921D0023D76F /* CaskManager.swift */,
419256952D2430C500D9EF10 /* CaskManager+LoadData.swift */,
4192566A2D1F286B00D9EF10 /* CaskManager+BrewFunctions.swift */,
419256972D24311B00D9EF10 /* CaskManager+RefreshOutdated.swift */,
4192569C2D2433E200D9EF10 /* CaskProgressState.swift */,
419256932D24255000D9EF10 /* CaskLoadError.swift */,
4192569A2D24335900D9EF10 /* CaskTaskError.swift */,
);
path = "Cask Manager";
sourceTree = "<group>";
};
4196C8F628F9CB4100EADDDA /* App Views */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -741,12 +764,14 @@
4192568F2D22DC9E00D9EF10 /* FontExtension.swift in Sources */,
419506A42964A27F00FE5802 /* SetupView.swift in Sources */,
4192561E2D1DEBE700D9EF10 /* AppView+UninstallButton.swift in Sources */,
4192569B2D24335900D9EF10 /* CaskTaskError.swift in Sources */,
41524B99295E352200D0046A /* SettingsView.swift in Sources */,
415563A02A9265CE00AE2F2E /* CaskExportType.swift in Sources */,
41524B9E295FA36E00D0046A /* DebounceObject.swift in Sources */,
419256292D1DF1CF00D9EF10 /* SetupView+BrewPathSelection.swift in Sources */,
415563A22A98BB2500AE2F2E /* ErrorWindowView.swift in Sources */,
4196C8FE28F9E13600EADDDA /* UpdateView.swift in Sources */,
419256982D24311B00D9EF10 /* CaskManager+RefreshOutdated.swift in Sources */,
41062C992A3A263F00FD48EA /* UninstallSelfView.swift in Sources */,
419256372D1DF34200D9EF10 /* SettingsView+ProxySettings.swift in Sources */,
414074F528DF53E80073EB22 /* AppliteApp.swift in Sources */,
Expand All @@ -762,23 +787,25 @@
419256272D1DF1AC00D9EF10 /* SetupView+BrewTypeSelection.swift in Sources */,
4192560A2D1C9FF800D9EF10 /* StringExtension.swift in Sources */,
4191392C29159B5C00F1D75D /* CaskDTO.swift in Sources */,
419256702D1F299E00D9EF10 /* Cask+ProtocolConformances.swift in Sources */,
413E60C22BBFF98A00978F6A /* AppIconView.swift in Sources */,
418989AD2A33A5C4004AC23B /* BrewManagementView.swift in Sources */,
418989B22A35D651004AC23B /* isBrewPathValid.swift in Sources */,
419256A12D25ACC300D9EF10 /* CategoryViewModel.swift in Sources */,
419256832D22055200D9EF10 /* CaskInfo.swift in Sources */,
4192560D2D1CA02C00D9EF10 /* ShellError.swift in Sources */,
4192566B2D1F286B00D9EF10 /* Cask+BrewFunctions.swift in Sources */,
4192566B2D1F286B00D9EF10 /* CaskManager+BrewFunctions.swift in Sources */,
4192561A2D1DEB2100D9EF10 /* AppView+OpenAndManageView.swift in Sources */,
4192562C2D1DF20600D9EF10 /* SetupView+BrewInstall.swift in Sources */,
41062C952A3794EA00FD48EA /* BrewPaths.swift in Sources */,
4192565B2D1E0ECF00D9EF10 /* DiscoverSectionView+Placeholder.swift in Sources */,
41483CCD29101C9900BB10C2 /* Category.swift in Sources */,
4192569D2D2433E200D9EF10 /* CaskProgressState.swift in Sources */,
418F331C28EB3D540023D76F /* AppGridView.swift in Sources */,
419256332D1DF2E000D9EF10 /* SettingsView+BrewPath.swift in Sources */,
419256962D2430C500D9EF10 /* CaskManager+LoadData.swift in Sources */,
419256552D1E0E2500D9EF10 /* DiscoverSectionView+CategoryHeader.swift in Sources */,
41062C972A3A20F900FD48EA /* UninstallSelf.swift in Sources */,
418F332628EC921D0023D76F /* CaskData.swift in Sources */,
418F332628EC921D0023D76F /* CaskManager.swift in Sources */,
4178CF922A8689AF0037F270 /* ExportCasks.swift in Sources */,
4192562E2D1DF22500D9EF10 /* SetupView+AllSet.swift in Sources */,
4192568C2D22D7FC00D9EF10 /* AppMigrationView.swift in Sources */,
Expand All @@ -793,6 +820,7 @@
419256082D1C734600D9EF10 /* Shell.swift in Sources */,
4192563E2D1DF3E900D9EF10 /* ContentView+DetailView.swift in Sources */,
419256162D1DEA0A00D9EF10 /* AppView+IconAndDescriptionView.swift in Sources */,
419256942D24255000D9EF10 /* CaskLoadError.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -1027,7 +1055,7 @@
repositoryURL = "https://github.com/onevcat/Kingfisher";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 7.11.0;
minimumVersion = 8.1.0;
};
};
4189CE372937CD41009C836D /* XCRemoteSwiftPackageReference "SwiftUI-Shimmer" */ = {
Expand Down
4 changes: 2 additions & 2 deletions Applite/AppliteApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import Kingfisher

@main
struct AppliteApp: App {
@StateObject var caskData = CaskData()
@StateObject var caskManager = CaskManager()

@AppStorage(Preferences.colorSchemePreference.rawValue) var colorSchemePreference: ColorSchemePreference = .system
@AppStorage(Preferences.setupComplete.rawValue) var setupComplete: Bool = false
Expand Down Expand Up @@ -42,7 +42,7 @@ struct AppliteApp: App {
WindowGroup {
if setupComplete {
ContentView()
.environmentObject(caskData)
.environmentObject(caskManager)
.frame(minWidth: 970, minHeight: 520)
.preferredColorScheme(selectedColorScheme)
} else {
Expand Down
31 changes: 31 additions & 0 deletions Applite/Model/Cask Models/Cask Manager/CaskLoadError.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
//
// CaskLoadError.swift
// Applite
//
// Created by Milán Várady on 2024.12.31.
//

import Foundation

enum CaskLoadError: LocalizedError {
case failedToLoadCategoryJSON
case failedToLoadFromCache

var errorDescription: String? {
switch self {
case .failedToLoadCategoryJSON:
return "Failed to load categories"
case .failedToLoadFromCache:
return "Failed to load app catalog from cache"
}
}

var failureReason: String? {
switch self {
case .failedToLoadCategoryJSON:
return "Couldn't load category JSON file"
case .failedToLoadFromCache:
return "The file doesn't exist or couldn't be read"
}
}
}
Loading

0 comments on commit 3ea36bd

Please sign in to comment.