Skip to content

Commit 0043405

Browse files
committed
Added ordering by build result as proposed in #7.
1 parent ea76718 commit 0043405

4 files changed

Lines changed: 27 additions & 21 deletions

File tree

CCMenu/Source/Menu Bar Extra/MenuBarExtraMenu.swift

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -60,23 +60,20 @@ struct MenuBarExtraMenu: View {
6060
case .sortedAlphabetically:
6161
return filtered.sorted(by: { $0.name.lowercased() < $1.name.lowercased() })
6262
case .sortedByBuildTime:
63-
return filtered.sorted(by: {p1, p2 in
64-
let r1 = p1.status.lastBuild?.result
65-
let r2 = p2.status.lastBuild?.result
63+
return filtered.sorted(by: { $0.status.lastBuild?.timestamp ?? Date.distantPast >
64+
$1.status.lastBuild?.timestamp ?? Date.distantPast})
65+
case .sortedByBuildResult:
66+
return filtered.sorted(by: { p1, p2 in
67+
let r1 = p1.status.lastBuild?.result ?? BuildResult.unknown
68+
let r2 = p2.status.lastBuild?.result ?? BuildResult.unknown
6669
if (r1 != r2) {
67-
if (r1 == nil) {
68-
return false
69-
}
70-
else if (r2 == nil) {
71-
return true
72-
}
73-
let resultOrder = [
74-
BuildResult.failure, BuildResult.success,
75-
BuildResult.unknown, BuildResult.other
76-
]
77-
return resultOrder.firstIndex(of: r1!)! < resultOrder.firstIndex(of: r2!)!
78-
}
79-
return p1.status.lastBuild?.timestamp ?? Date.distantFuture > p2.status.lastBuild?.timestamp ?? Date.distantFuture
70+
let resultOrder: [BuildResult] = [ .failure, .success, .other, .unknown ]
71+
return (resultOrder.firstIndex(of: r1) ?? Int.max) <
72+
(resultOrder.firstIndex(of: r2) ?? Int.max)
73+
} else {
74+
return p1.status.lastBuild?.timestamp ?? Date.distantPast >
75+
p2.status.lastBuild?.timestamp ?? Date.distantFuture
76+
}
8077
})
8178
}
8279
}

CCMenu/Source/Miscellaneous/UserDefaultsExtension.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ enum MenuSortOrder: Int, CaseIterable, Identifiable {
1010
case // Int raw values for compatibility with legacy defaults
1111
asArranged,
1212
sortedAlphabetically,
13-
sortedByBuildTime
13+
sortedByBuildTime,
14+
sortedByBuildResult
1415

15-
// TODO: Wasn't there a way to do without this?
1616
var id: Self { self }
1717
}
1818

@@ -22,7 +22,6 @@ enum AppIconVisibility: String, CaseIterable, Identifiable {
2222
sometimes,
2323
always
2424

25-
// TODO: Wasn't there a way to do without this?
2625
var id: Self { self }
2726
}
2827

@@ -82,8 +81,6 @@ extension AppStorage {
8281
self.init(wrappedValue: wrappedValue, key.rawValue, store: UserDefaults.active)
8382
}
8483

85-
// TODO: Find out how to combine the following cases, which are all RawRepresentable
86-
8784
init(wrappedValue: Value, _ key: DefaultsKey) where Value == MenuSortOrder {
8885
self.init(wrappedValue: wrappedValue, key.rawValue, store: UserDefaults.active)
8986
}

CCMenu/Source/Settings/AppearanceSettings.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ struct AppearanceSettings: View {
5555
.accessibilityIdentifier("Order alphabetically")
5656
Text("ordered by last build time").tag(MenuSortOrder.sortedByBuildTime)
5757
.accessibilityIdentifier("Order last build time")
58+
Text("ordered by last build result").tag(MenuSortOrder.sortedByBuildResult)
59+
.accessibilityIdentifier("Order last build result")
5860
}
5961
.pickerStyle(.radioGroup)
6062
.labelsHidden()

CCMenuUITests/MenuTests.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,16 @@ class MenuTests: XCTestCase {
6969
XCTAssertEqual("connectfour", menu.menuItems.element(boundBy: 1).title)
7070
XCTAssertEqual("ccmenu", menu.menuItems.element(boundBy: 2).title)
7171

72+
// Open settings and set order to last build result
73+
menu.menuItems["Settings..."].click()
74+
window.radioButtons["Order last build result"].click()
75+
76+
// Make sure the pipelines are shown in desired order
77+
TestHelper.openMenu(app: app)
78+
XCTAssertEqual("connectfour", menu.menuItems.element(boundBy: 0).title)
79+
XCTAssertEqual("ccmenu2 | Build and test", menu.menuItems.element(boundBy: 1).title)
80+
XCTAssertEqual("ccmenu", menu.menuItems.element(boundBy: 2).title)
81+
7282
// Chose to hide pipelines with successful builds
7383
menu.menuItems["Settings..."].click()
7484
XCTAssert(window.checkBoxes["Hide successful builds"].isSelected == false)

0 commit comments

Comments
 (0)