107 lines
2.2 KiB
Swift
107 lines
2.2 KiB
Swift
//
|
|
// InstalledView.swift
|
|
// Brewer
|
|
//
|
|
// Created by Cédric MAS on 09/07/2024.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct InstalledView: View {
|
|
@State private var brew = Homebrew()
|
|
var body: some View {
|
|
VStack {
|
|
if brew.isLoading {
|
|
ProgressView("Loading...")
|
|
} else if let data = brew.data {
|
|
List {
|
|
if !data.casks.isEmpty {
|
|
Section {
|
|
ForEach(data.casks, id: \.fullToken) { cask in
|
|
NavigationLink {
|
|
CaskDetailView(
|
|
cask: cask, brewListing: brew)
|
|
} label: {
|
|
HStack {
|
|
Text(cask.name.first ?? cask.fullToken)
|
|
Spacer()
|
|
if cask.outdated {
|
|
UpdateButton(name: cask.fullToken)
|
|
} else {
|
|
Text(cask.version)
|
|
}
|
|
}
|
|
.contextMenu {
|
|
UninstallButton(
|
|
name: cask.fullToken,
|
|
brewListing: brew)
|
|
}
|
|
}
|
|
}
|
|
} header: {
|
|
HStack {
|
|
Text("Casks")
|
|
Spacer()
|
|
Text("\(data.casks.count) installed")
|
|
}
|
|
}
|
|
}
|
|
|
|
if !data.formulae.isEmpty {
|
|
Section {
|
|
ForEach(data.formulae, id: \.fullName) { formulae in
|
|
HStack {
|
|
Text(formulae.fullName)
|
|
Spacer()
|
|
if formulae.outdated {
|
|
UpdateButton(name: formulae.fullName)
|
|
} else {
|
|
Text(formulae.versions.stable)
|
|
}
|
|
}
|
|
.contextMenu {
|
|
UninstallButton(
|
|
name: formulae.fullName,
|
|
brewListing: brew)
|
|
}
|
|
}
|
|
} header: {
|
|
HStack {
|
|
Text("Formulae")
|
|
Spacer()
|
|
Text("\(data.formulae.count) installed")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.listStyle(.inset(alternatesRowBackgrounds: true))
|
|
let areOutdated =
|
|
data.casks.filter(\.outdated).count
|
|
+ data.formulae.filter(\.outdated).count
|
|
let _ = UserDefaults.standard.set(
|
|
!(areOutdated > 0), forKey: "isUpToDate")
|
|
if areOutdated > 0 {
|
|
Button {
|
|
|
|
} label: {
|
|
Label(
|
|
"Update all",
|
|
systemImage: "arrow.counterclockwise.circle.fill")
|
|
}
|
|
.buttonStyle(.borderedProminent)
|
|
.tint(.orange)
|
|
}
|
|
} else if let error = brew.errorMessage {
|
|
Text(error)
|
|
.foregroundStyle(.red)
|
|
}
|
|
}.task {
|
|
brew.getInstalled()
|
|
}
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
InstalledView()
|
|
}
|