Skip to content

Commit 35b6b51

Browse files
committed
~ More work
1 parent 608a7a0 commit 35b6b51

8 files changed

Lines changed: 203 additions & 160 deletions

File tree

Cork/CorkApp.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,7 @@ struct CorkApp: App
706706
let differentPackages: Set<OutdatedPackage> = await newOutdatedPackages.subtracting(outdatedPackagesTracker.displayableOutdatedPackagesTracker.allDisplayableOutdatedPackages)
707707
AppConstants.shared.logger.debug("Changed packages: \(differentPackages, privacy: .auto)")
708708

709-
sendNotification(title: String(localized: "notification.new-outdated-packages-found.title"), subtitle: differentPackages.map(\.package.name).formatted(.list(type: .and)))
709+
sendNotification(title: String(localized: "notification.new-outdated-packages-found.title"), subtitle: differentPackages.map{$0.package.name}.formatted(.list(type: .and)))
710710

711711
await outdatedPackagesTracker.setOutdatedPackages(to: newOutdatedPackages)
712712

Cork/Views/Start Page/Sub-Views/Outdated Packages/Outdated Package List Box.swift

Lines changed: 11 additions & 147 deletions
Original file line numberDiff line numberDiff line change
@@ -77,15 +77,8 @@ struct OutdatedPackageListBox: View
7777

7878
DisclosureGroup(isExpanded: $isDropdownExpanded)
7979
{
80-
switch outdatedPackagesTracker.outdatedPackageListBoxViewType
81-
{
82-
case .managedOnly:
83-
<#code#>
84-
case .bothManagedAndUnmanaged:
85-
<#code#>
86-
case .unmanagedOnly:
87-
<#code#>
88-
}
80+
OutdatedPackagesList()
81+
/*
8982
switch outdatedPackageListBoxType
9083
{
9184
case .managedOnly:
@@ -106,8 +99,10 @@ struct OutdatedPackageListBox: View
10699
}
107100
}
108101
}
109-
102+
*/
110103
} label: {
104+
// TODO: Fix this
105+
/*
111106
Group
112107
{
113108
if outdatedPackageListBoxType == .unmanagedOnly
@@ -119,6 +114,9 @@ struct OutdatedPackageListBox: View
119114
Text("start-page.updates.list")
120115
}
121116
}
117+
*/
118+
119+
Text("start-page.updates.list")
122120
}
123121

124122
}
@@ -127,33 +125,11 @@ struct OutdatedPackageListBox: View
127125
}
128126
}
129127
.accessibilityLabel("accessibility.label.outdated-packages-box.listing-outdated-packages")
130-
.accessibilityValue("accessibility.value.listing-outdated-packages.\(packagesManagedByHomebrew.count)-managed.\(packagesThatUpdateThemselves.count)-unmanaged")
128+
.accessibilityValue("accessibility.value.listing-outdated-packages.\(outdatedPackagesTracker.displayableOutdatedPackagesTracker.packagesManagedByHomebrew.count)-managed.\(outdatedPackagesTracker.displayableOutdatedPackagesTracker.packagesThatUpdateThemselves.count)-unmanaged")
131129
}
132130

133131
// MARK: - Outdated package list complex
134132

135-
@ViewBuilder
136-
func outdatedPackageListComplex(packagesToShow: Set<OutdatedPackage>) -> some View
137-
{
138-
if packagesToShow.isEmpty
139-
{
140-
Text("update-packages.no-managed-updates")
141-
.font(.subheadline)
142-
.foregroundColor(.secondary)
143-
}
144-
else
145-
{
146-
if outdatedPackageInfoDisplayAmount != .all
147-
{
148-
outdatedPackageOverview_list(packagesToShow: packagesToShow)
149-
}
150-
else
151-
{
152-
outdatedPackageOverview_table(packagesToShow: packagesToShow)
153-
}
154-
}
155-
}
156-
157133
// MARK: - Outdated package list shared view builders
158134

159135
@ViewBuilder
@@ -173,7 +149,7 @@ struct OutdatedPackageListBox: View
173149
} label: {
174150
Text("start-page.updated.action.deselect-all")
175151
}
176-
.disabled(packagesMarkedForUpdating.isEmpty)
152+
.disabled(outdatedPackagesTracker.displayableOutdatedPackagesTracker.packagesMarkedForUpdating.isEmpty)
177153
.modify
178154
{ viewProxy in
179155
if outdatedPackageInfoDisplayAmount != .all
@@ -205,7 +181,7 @@ struct OutdatedPackageListBox: View
205181
} label: {
206182
Text("start-page.updated.action.select-all")
207183
}
208-
.disabled(packagesMarkedForUpdating.count == outdatedPackagesTracker.displayableOutdatedPackagesTracker.allDisplayableOutdatedPackages.count)
184+
.disabled(outdatedPackagesTracker.displayableOutdatedPackagesTracker.areAllOutdatedPackagesMarkedForUpdating)
209185
.modify
210186
{ viewProxy in
211187
if outdatedPackageInfoDisplayAmount != .all
@@ -222,54 +198,6 @@ struct OutdatedPackageListBox: View
222198

223199
// MARK: - Outdated package list view builders
224200

225-
@ViewBuilder
226-
func outdatedPackageOverview_list(packagesToShow: Set<OutdatedPackage>) -> some View
227-
{
228-
List
229-
{
230-
Section
231-
{
232-
ForEach(packagesToShow.sorted(by: { $0.package.installedOn! < $1.package.installedOn! }))
233-
{ outdatedPackage in
234-
Toggle(isOn: Binding<Bool>(
235-
get: {
236-
outdatedPackage.isMarkedForUpdating
237-
}, set: { toggleState in
238-
outdatedPackagesTracker.outdatedPackages = Set(outdatedPackagesTracker.outdatedPackages.map
239-
{ modifiedElement in
240-
var copyOutdatedPackage: OutdatedPackage = modifiedElement
241-
if copyOutdatedPackage.id == outdatedPackage.id
242-
{
243-
copyOutdatedPackage.isMarkedForUpdating = toggleState
244-
}
245-
return copyOutdatedPackage
246-
})
247-
}
248-
))
249-
{
250-
OutdatedPackageListBoxRow(outdatedPackage: outdatedPackage)
251-
.contextMenu
252-
{
253-
PreviewPackageButton(packageToPreview: .init(
254-
name: outdatedPackage.package.name,
255-
type: outdatedPackage.package.type,
256-
installedIntentionally: outdatedPackage.package.installedIntentionally
257-
))
258-
}
259-
}
260-
}
261-
} header: {
262-
HStack(alignment: .center, spacing: 10)
263-
{
264-
deselectAllButton
265-
266-
selectAllButton
267-
}
268-
}
269-
}
270-
.listStyle(.bordered(alternatesRowBackgrounds: true))
271-
}
272-
273201
@ViewBuilder
274202
func outdatedPackageOverview_table(packagesToShow: Set<OutdatedPackage>) -> some View
275203
{
@@ -343,67 +271,3 @@ struct OutdatedPackageListBox: View
343271
}
344272
}
345273
}
346-
347-
// MARK: - List row
348-
349-
private struct OutdatedPackageListBoxRow: View
350-
{
351-
@Default(.outdatedPackageInfoDisplayAmount) var outdatedPackageInfoDisplayAmount: OutdatedPackageInfoAmount
352-
@Default(.showOldVersionsInOutdatedPackageList) var showOldVersionsInOutdatedPackageList: Bool
353-
354-
let outdatedPackage: OutdatedPackage
355-
356-
@State private var isExpanded: Bool = false
357-
358-
var body: some View
359-
{
360-
VStack(alignment: .leading)
361-
{
362-
switch outdatedPackageInfoDisplayAmount
363-
{
364-
case .none:
365-
outdatedPackageDetails_none
366-
case .versionOnly:
367-
outdatedPackageDetails_versionOnly
368-
case .all:
369-
EmptyView()
370-
}
371-
}
372-
}
373-
374-
// MARK: - Various types of outdated package displays
375-
376-
@ViewBuilder
377-
var outdatedPackageDetails_none: some View
378-
{
379-
SanitizedPackageName(package: outdatedPackage.package, shouldShowVersion: true)
380-
}
381-
382-
@ViewBuilder
383-
var outdatedPackageDetails_versionOnly: some View
384-
{
385-
HStack(alignment: .center)
386-
{
387-
SanitizedPackageName(package: outdatedPackage.package, shouldShowVersion: true)
388-
389-
HStack(alignment: .center)
390-
{
391-
let installedVersions: String = outdatedPackage.installedVersions.formatted(.list(type: .and))
392-
let newerVersion: String = outdatedPackage.newerVersion
393-
394-
let pillForegroundColor: NSColor = .secondaryLabelColor
395-
let pillBackgroundColor: NSColor = .quinaryLabel
396-
397-
if showOldVersionsInOutdatedPackageList
398-
{
399-
400-
PillText(text: "\(installedVersions)\(newerVersion)", backgroundColor: pillBackgroundColor, textColor: pillForegroundColor)
401-
}
402-
else
403-
{
404-
PillText(text: "\(newerVersion)", backgroundColor: pillBackgroundColor, textColor: pillForegroundColor)
405-
}
406-
}
407-
}
408-
}
409-
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
//
2+
// Outdated Packages List - List.swift
3+
// Cork
4+
//
5+
// Created by David Bureš - P on 06.01.2026.
6+
//
7+
8+
import SwiftUI
9+
import CorkModels
10+
import Defaults
11+
12+
struct OutdatedPackagesList_List: View
13+
{
14+
@Environment(OutdatedPackagesTracker.self) var outdatedPackagesTracker: OutdatedPackagesTracker
15+
16+
let packageUpdatingType: OutdatedPackage.PackageUpdatingType
17+
18+
var body: some View
19+
{
20+
switch packageUpdatingType
21+
{
22+
case .homebrew:
23+
list_homebrewUpdating
24+
case .selfUpdating:
25+
EmptyView() // TODO: Implement self-updating packages
26+
}
27+
}
28+
29+
@ViewBuilder
30+
var list_homebrewUpdating: some View
31+
{
32+
List
33+
{
34+
Section
35+
{
36+
ForEach(outdatedPackagesTracker.displayableOutdatedPackagesTracker.packagesManagedByHomebrew.sorted(by: { $0.package.installedOn! < $1.package.installedOn! }))
37+
{ outdatedPackage in
38+
Toggle(isOn: Bindable(outdatedPackage).isMarkedForUpdating)
39+
{
40+
OutdatedPackageListBoxRow(outdatedPackage: outdatedPackage)
41+
}
42+
}
43+
} header: {
44+
// TODO: Implement this
45+
/*
46+
HStack(alignment: .center, spacing: 10)
47+
{
48+
deselectAllButton
49+
50+
selectAllButton
51+
}
52+
*/
53+
}
54+
}
55+
.listStyle(.bordered(alternatesRowBackgrounds: true))
56+
}
57+
}
58+
59+
private struct OutdatedPackageListBoxRow: View
60+
{
61+
@Default(.outdatedPackageInfoDisplayAmount) var outdatedPackageInfoDisplayAmount
62+
@Default(.showOldVersionsInOutdatedPackageList) var showOldVersionsInOutdatedPackageList
63+
64+
let outdatedPackage: OutdatedPackage
65+
66+
@State private var isExpanded: Bool = false
67+
68+
var body: some View
69+
{
70+
VStack(alignment: .leading)
71+
{
72+
switch outdatedPackageInfoDisplayAmount
73+
{
74+
case .none:
75+
outdatedPackageDetails_none
76+
case .versionOnly:
77+
outdatedPackageDetails_versionOnly
78+
case .all:
79+
EmptyView()
80+
}
81+
}
82+
.contextMenu
83+
{
84+
PreviewPackageButton(packageToPreview: .init(
85+
name: outdatedPackage.package.name,
86+
type: outdatedPackage.package.type,
87+
installedIntentionally: outdatedPackage.package.installedIntentionally
88+
))
89+
}
90+
}
91+
92+
// MARK: - Various types of outdated package displays
93+
94+
@ViewBuilder
95+
var outdatedPackageDetails_none: some View
96+
{
97+
SanitizedPackageName(package: outdatedPackage.package, shouldShowVersion: true)
98+
}
99+
100+
@ViewBuilder
101+
var outdatedPackageDetails_versionOnly: some View
102+
{
103+
HStack(alignment: .center)
104+
{
105+
SanitizedPackageName(package: outdatedPackage.package, shouldShowVersion: true)
106+
107+
HStack(alignment: .center)
108+
{
109+
let installedVersions: String = outdatedPackage.installedVersions.formatted(.list(type: .and))
110+
let newerVersion: String = outdatedPackage.newerVersion
111+
112+
let pillForegroundColor: NSColor = .secondaryLabelColor
113+
let pillBackgroundColor: NSColor = .quinaryLabel
114+
115+
if showOldVersionsInOutdatedPackageList
116+
{
117+
118+
PillText(text: "\(installedVersions)\(newerVersion)", backgroundColor: pillBackgroundColor, textColor: pillForegroundColor)
119+
}
120+
else
121+
{
122+
PillText(text: "\(newerVersion)", backgroundColor: pillBackgroundColor, textColor: pillForegroundColor)
123+
}
124+
}
125+
}
126+
}
127+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//
2+
// Outdated Packages List - Table.swift
3+
// Cork
4+
//
5+
// Created by David Bureš - P on 06.01.2026.
6+
//
7+
8+
import SwiftUI
9+
10+
struct OutdatedPackagesList_Table: View
11+
{
12+
var body: some View
13+
{
14+
Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
15+
}
16+
}

0 commit comments

Comments
 (0)