~ More work

This commit is contained in:
David Bureš 2025-11-10 21:42:19 +01:00
parent 094caff1cb
commit 1ded3d13c1
No known key found for this signature in database
89 changed files with 167 additions and 28 deletions

View File

@ -12,6 +12,7 @@ import SwiftUI
import CorkShared
import Defaults
import DefaultsMacros
import CorkModels
@Observable
class AppDelegate: NSObject, NSApplicationDelegate

View File

@ -11,6 +11,8 @@ import ButtonKit
import CorkShared
import Defaults
import SwiftUI
import CorkModels
import CorkTerminalFunctions
struct ContentView: View, Sendable
{

View File

@ -15,6 +15,8 @@ import Defaults
import SwiftData
import SwiftUI
import UserNotifications
import CorkModels
import CorkTerminalFunctions
@main
struct CorkApp: App
@ -716,7 +718,7 @@ struct CorkApp: App
{
Button
{
openWindow(id: .errorInspectorWindowID, value: PackageLoadingError.packageIsNotAFolder("Hello I am an error", packageURL: .applicationDirectory).localizedDescription)
openWindow(id: .errorInspectorWindowID, value: BrewPackage.PackageLoadingError.packageIsNotAFolder("Hello I am an error", packageURL: .applicationDirectory).localizedDescription)
} label: {
Text("debug.action.show-error-inspector")
}

View File

@ -6,6 +6,7 @@
//
import Foundation
import CorkModels
enum NavigationTargetMainWindow: Hashable
{

View File

@ -9,6 +9,7 @@ import AppIntents
import Foundation
import CorkShared
import CorkModels
import CorkIntents
public struct GetInstalledCasksIntent: AppIntent
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct BrewfileImportProgressView: View
{

View File

@ -10,6 +10,7 @@ import CorkShared
import SwiftUI
import ButtonKit
import Defaults
import CorkModels
struct AddFormulaView: View
{

View File

@ -8,6 +8,7 @@
import SwiftUI
import CorkShared
import Defaults
import CorkModels
struct SearchResultRow: View, Sendable
{
@ -130,7 +131,7 @@ struct SearchResultRow: View, Sendable
do
{
let parsedPackageInfo: BrewPackageDetails = try await searchedForPackage.loadDetails()
let parsedPackageInfo: BrewPackage.BrewPackageDetails = try await searchedForPackage.loadDetails()
description = parsedPackageInfo.description

View File

@ -8,6 +8,7 @@
import SwiftUI
import CorkShared
import Defaults
import CorkModels
struct InstallationInitialView: View
{

View File

@ -8,6 +8,7 @@
import SwiftUI
import CorkShared
import Defaults
import CorkModels
struct TopPackagesSection: View
{

View File

@ -7,6 +7,8 @@
import SwiftUI
import CorkShared
import CorkModels
import CorkTerminalFunctions
struct InstallingPackageView: View
{

View File

@ -7,6 +7,7 @@
import CorkShared
import SwiftUI
import CorkModels
struct PresentingSearchResultsView: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct InstallationSearchingView: View, Sendable
{

View File

@ -7,6 +7,8 @@
import CorkShared
import SwiftUI
import CorkModels
import CorkTerminalFunctions
struct AdoptingAlreadyInstalledCaskView: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct AnotherProcessAlreadyRunningView: View
{

View File

@ -7,6 +7,7 @@
import Foundation
import SwiftUI
import CorkModels
struct BinaryAlreadyExistsView: View, Sendable
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct InstallationFatalErrorView: View
{

View File

@ -9,6 +9,7 @@ import CorkNotifications
import CorkShared
import SwiftUI
import Defaults
import CorkModels
struct InstallationFinishedSuccessfullyView: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct SudoRequiredView: View, Sendable
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct WrongArchitectureView: View, Sendable
{

View File

@ -8,6 +8,7 @@
import CorkShared
import SwiftUI
import Defaults
import CorkModels
struct LicensingView: View
{

View File

@ -7,6 +7,7 @@
import SwiftUI
import Defaults
import CorkModels
struct Licensing_BoughtView: View
{

View File

@ -8,6 +8,7 @@
import SwiftUI
import CorkShared
import Defaults
import CorkModels
struct Licensing_DemoView: View
{

View File

@ -9,6 +9,7 @@ import SwiftUI
import CorkShared
import ButtonKit
import Defaults
import CorkModels
struct Licensing_NotBoughtOrActivatedView: View
{

View File

@ -7,6 +7,7 @@
import SwiftUI
import Defaults
import CorkModels
struct Licensing_SelfCompiledView: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
enum MaintenanceSteps
{

View File

@ -8,6 +8,7 @@
import CorkShared
import SwiftUI
import Defaults
import CorkModels
struct MaintenanceFinishedView: View
{

View File

@ -7,6 +7,8 @@
import SwiftUI
import CorkShared
import CorkModels
import CorkTerminalFunctions
struct MaintenanceRunningView: View
{

View File

@ -7,6 +7,7 @@
import CorkShared
import SwiftUI
import CorkModels
struct MassAdoptionStage_Adopting: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
typealias AdoptionProcessResult = Result<BrewPackagesTracker.AdoptableApp, MassAppAdoptionView.AdoptionAttemptFailure>

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct MenuBarItem: View
{

View File

@ -8,6 +8,7 @@
import SwiftUI
import CorkShared
import CorkNotifications
import CorkModels
struct MenuBar_CachedDownloadsCleanup: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct MenuBar_PackageOverview: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct MenuBar_PackageUpdating: View
{

View File

@ -7,6 +7,8 @@
import CorkShared
import SwiftUI
import CorkModels
import ApplicationInspector
struct PackageDetailView: View, Sendable, DismissablePane
{
@ -39,7 +41,7 @@ struct PackageDetailView: View, Sendable, DismissablePane
var isInPreviewWindow: Bool = false
@State private var packageDetails: BrewPackageDetails? = nil
@State private var packageDetails: BrewPackage.BrewPackageDetails? = nil
@State private var caskExecutable: Application? = nil

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct PackageDependencies: View
{

View File

@ -7,6 +7,7 @@
import SwiftUI
import CorkShared
import CorkModels
struct PackageDetailHeaderComplex: View
{
@ -22,7 +23,7 @@ struct PackageDetailHeaderComplex: View
var isInPreviewWindow: Bool
@Bindable var packageDetails: BrewPackageDetails
@Bindable var packageDetails: BrewPackage.BrewPackageDetails
let isLoadingDetails: Bool

View File

@ -9,6 +9,7 @@ import SwiftUI
import CorkShared
import ButtonKit
import Defaults
import CorkModels
struct PackageModificationButtons: View
{
@ -21,7 +22,7 @@ struct PackageModificationButtons: View
@Environment(OutdatedPackagesTracker.self) var outdatedPackagesTracker: OutdatedPackagesTracker
let package: BrewPackage
@Bindable var packageDetails: BrewPackageDetails
@Bindable var packageDetails: BrewPackage.BrewPackageDetails
let isLoadingDetails: Bool

View File

@ -6,6 +6,8 @@
//
import SwiftUI
import ApplicationInspector
import CorkModels
struct PackageSystemInfo: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct PackageListItem: View
{

View File

@ -7,6 +7,7 @@
import SwiftUI
import ButtonKit
import CorkModels
struct SudoRequiredForRemovalSheet: View, Sendable
{

View File

@ -7,6 +7,7 @@
import SwiftUI
import CorkShared
import CorkModels
struct CheckForOutdatedPackagesButton: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct DeleteCachedDownloadsButton: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct OpenMaintenanceSheetButton: View
{

View File

@ -7,6 +7,7 @@
import SwiftUI
import CorkShared
import CorkModels
struct UpdatePackageButton: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct HomebrewServicesView: View
{

View File

@ -9,6 +9,7 @@ import Foundation
import SwiftUI
import CorkShared
import Defaults
import CorkTerminalFunctions
struct BrewPane: View
{

View File

@ -9,6 +9,7 @@ import Foundation
import SwiftUI
import CorkShared
import Defaults
import CorkModels
struct DiscoverabilityPane: View
{

View File

@ -9,6 +9,7 @@ import CorkShared
import Defaults
import SwiftUI
import UserNotifications
import CorkModels
struct NotificationsPane: View
{

View File

@ -8,6 +8,7 @@
import SwiftUI
import CorkShared
import Defaults
import CorkModels
struct CasksSection: View
{

View File

@ -8,6 +8,7 @@
import SwiftUI
import CorkShared
import Defaults
import CorkModels
struct FormulaeSection: View
{

View File

@ -8,6 +8,7 @@
import SwiftUI
import CorkShared
import Defaults
import CorkModels
struct SidebarContextMenu: View
{

View File

@ -8,6 +8,7 @@
import CorkShared
import SwiftUI
import Defaults
import CorkModels
struct SidebarPackageRow: View
{

View File

@ -8,6 +8,7 @@
import CorkShared
import SwiftUI
import ButtonKit
import CorkModels
struct TapsSection: View
{

View File

@ -8,6 +8,7 @@
import CorkShared
import Defaults
import SwiftUI
import CorkModels
struct SidebarView: View
{

View File

@ -8,6 +8,7 @@
import CorkShared
import SwiftUI
import Defaults
import CorkModels
struct StartPage: View
{

View File

@ -10,6 +10,7 @@ import Defaults
import SwiftUI
import ButtonKit
import SwiftData
import CorkModels
struct AdoptablePackagesSection: View
{
@ -20,7 +21,7 @@ struct AdoptablePackagesSection: View
@State private var isShowingAdoptionWarning: Bool = false
@Query private var excludedApps: [BrewPackagesTracker.ExcludedAdoptableApp]
@Query private var excludedApps: [ExcludedAdoptableApp]
var body: some View
{

View File

@ -7,6 +7,7 @@
import SwiftUI
import CorkShared
import CorkModels
struct BrokenPackageListRow: View
{
@ -14,7 +15,7 @@ struct BrokenPackageListRow: View
@Environment(AppState.self) var appState: AppState
let error: PackageLoadingError
let error: BrewPackage.PackageLoadingError
var body: some View
{

View File

@ -7,6 +7,7 @@
import Charts
import SwiftUI
import CorkModels
struct CachedDownloadsFolderInfoBox: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct LoadingErrorsBox: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct OutdatedPackagesBox: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct LoadingOfOutdatedPackagesFailedListBox: View
{

View File

@ -8,6 +8,7 @@
import SwiftUI
import Defaults
import CorkShared
import CorkModels
struct OutdatedPackageListBox: View
{

View File

@ -7,6 +7,7 @@
import CorkShared
import SwiftUI
import CorkModels
struct OutdatedPackageLoaderBox: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
enum TapAddingStates
{

View File

@ -7,6 +7,7 @@
import SwiftUI
import CorkShared
import CorkModels
struct AddTapAddingView: View
{

View File

@ -7,6 +7,8 @@
import SwiftUI
import CorkShared
import CorkModels
import CorkTerminalFunctions
struct AddTapFinishedView: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct TapDetailsIncludedPackages: View
{

View File

@ -6,12 +6,13 @@
//
import SwiftUI
import CorkModels
struct PackagesIncludedInTapList: View
{
@Environment(\.selectedTap) var selectedTap: BrewTap?
@Environment(BrewPackagesTracker.self) var brewPackagesTracker
@Environment(BrewPackagesTracker.self) var brewPackagesTracker: BrewPackagesTracker
let packages: [MinimalHomebrewPackage]

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct TapDetailsInfo: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct TapDetailsTitle: View
{

View File

@ -8,6 +8,8 @@
import SwiftUI
import CorkShared
import ButtonKit
import CorkModels
import CorkTerminalFunctions
extension EnvironmentValues
{
@ -109,7 +111,15 @@ struct TapDetailView: View, Sendable
do
{
tapInfo = try await parseTapInfo(from: tapInfoRaw)
guard let tapInfoAsData = await tapInfoRaw.data(using: .utf8) else
{
errorOutReason = "Failed to convert String to Data"
erroredOut = true
return
}
tapInfo = try await .init(from: tapInfoAsData)
}
catch let parsingError
{

View File

@ -9,6 +9,7 @@ import CorkNotifications
import CorkShared
import Defaults
import SwiftUI
import CorkModels
struct ErroredOutStageView: View
{

View File

@ -7,6 +7,7 @@
import SwiftUI
import CorkShared
import CorkModels
struct CheckingForUpdatesStateView: View
{

View File

@ -8,6 +8,7 @@
import SwiftUI
import CorkShared
import Defaults
import CorkModels
struct UpdatingPackageTrackerStateView: View
{

View File

@ -6,6 +6,7 @@
//
import SwiftUI
import CorkModels
struct UpdatingPackagesStateView: View
{

View File

@ -7,6 +7,8 @@
import SwiftUI
import CorkShared
import CorkModels
import CorkTerminalFunctions
struct UpdateSomePackagesView: View
{

View File

@ -30,7 +30,7 @@ public enum ConfirmationDialog: Identifiable, Equatable
}
}
var message: LocalizedStringKey
public var message: LocalizedStringKey
{
switch self
{

View File

@ -7,11 +7,11 @@
import Foundation
enum IntentError: LocalizedError
public enum IntentError: LocalizedError
{
case failedWhilePerformingIntent
var errorDescription: String?
public var errorDescription: String?
{
switch self
{

View File

@ -257,7 +257,7 @@ extension BrewPackage
/// Load package details
@MainActor
func loadDetails() async throws -> BrewPackage.BrewPackageDetails
public func loadDetails() async throws -> BrewPackage.BrewPackageDetails
{
let decoder: JSONDecoder = {
let decoder: JSONDecoder = .init()

View File

@ -20,7 +20,7 @@ import CorkTerminalFunctions
public typealias BrewPackages = Set<Result<BrewPackage, BrewPackage.PackageLoadingError>>
/// A representation of a Homebrew package
public struct BrewPackage: Identifiable, Equatable, Hashable, Codable, Sendable
public struct BrewPackage: Identifiable, Equatable, Hashable, Codable, Sendable, Modifiable
{
public init(
name: String,
@ -68,9 +68,9 @@ public struct BrewPackage: Identifiable, Equatable, Hashable, Codable, Sendable
/// Download count for top packages
public let downloadCount: Int?
var isBeingModified: Bool = false
public var isBeingModified: Bool = false
func getFormattedVersions() -> String
public func getFormattedVersions() -> String
{
return versions.formatted(.list(type: .and))
}
@ -393,7 +393,7 @@ extension BrewPackage
}
}
extension FormatStyle where Self == Date.FormatStyle
public extension FormatStyle where Self == Date.FormatStyle
{
static var packageInstallationStyle: Self
{

View File

@ -9,12 +9,21 @@ import Foundation
public struct BrewTap: Identifiable, Hashable, Sendable
{
public let id: UUID = .init()
let name: String
public init(
name: String,
isBeingModified: Bool? = nil
) {
self.id = .init()
self.name = name
self.isBeingModified = isBeingModified ?? false
}
public let id: UUID
public let name: String
var isBeingModified: Bool = false
public var isBeingModified: Bool
mutating func changeBeingModifiedStatus()
public mutating func changeBeingModifiedStatus()
{
isBeingModified.toggle()
}

View File

@ -8,7 +8,7 @@
import Foundation
import CorkShared
extension CachedDownloadsTracker
public extension CachedDownloadsTracker
{
func assignPackageTypeToCachedDownloads(brewPackagesTracker: BrewPackagesTracker)
{

View File

@ -9,6 +9,12 @@ import Foundation
public struct CorruptedPackage: Identifiable, Equatable
{
public let id: UUID = .init()
let name: String
public let id: UUID
public let name: String
public init(name: String)
{
self.id = .init()
self.name = name
}
}

View File

@ -22,9 +22,14 @@ public class OutdatedPackagesTracker
case checkingForUpdates, showingOutdatedPackages, noUpdatesAvailable, erroredOut(reason: String)
}
public var isCheckingForPackageUpdates: Bool = true
public init() {
self.isCheckingForPackageUpdates = true
self.outdatedPackages = .init()
}
public var isCheckingForPackageUpdates: Bool
public var outdatedPackages: Set<OutdatedPackage> = .init()
public var outdatedPackages: Set<OutdatedPackage>
public var errorOutReason: String?

View File

@ -6,7 +6,6 @@
//
import Foundation
import CorkModels
/// Decodable tap info
public struct TapInfo: Codable

View File

@ -0,0 +1,14 @@
//
// Modifiable.swift
// CorkModels
//
// Created by David Bureš - P on 10.11.2025.
//
import Foundation
/// Defines a model that can be modified, and reflect the status of the modification in the UI
public protocol Modifiable: Sendable
{
var isBeingModified: Bool { get set }
}

View File

@ -12,6 +12,12 @@ import CorkShared
@Observable @MainActor
public class CachedDownloadsTracker
{
public init()
{
self.cachedDownloads = .init()
self.cachedDownloadsTemp = .init()
}
public var cachedDownloads: [CachedDownload] = .init()
private var cachedDownloadsTemp: [CachedDownload] = .init()

View File

@ -11,7 +11,12 @@ import Observation
@Observable @MainActor
public class TapTracker
{
var addedTaps: [BrewTap] = .init()
public init()
{
self.addedTaps = .init()
}
public var addedTaps: [BrewTap]
}
public extension TapTracker