From d99f12dbe8685eea3d97fc2eb4d9681360c5a41b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Mu=CC=88ller?= Date: Thu, 21 Mar 2024 09:11:03 +0100 Subject: [PATCH] Sort by status first, then by built time --- .../Menu Bar Extra/MenuBarExtraMenu.swift | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/CCMenu/Source/Menu Bar Extra/MenuBarExtraMenu.swift b/CCMenu/Source/Menu Bar Extra/MenuBarExtraMenu.swift index 5cb9fd5..6d11bd3 100644 --- a/CCMenu/Source/Menu Bar Extra/MenuBarExtraMenu.swift +++ b/CCMenu/Source/Menu Bar Extra/MenuBarExtraMenu.swift @@ -61,8 +61,24 @@ struct MenuBarExtraMenu: View { case .sortedAlphabetically: return filtered.sorted(by: { $0.name.lowercased() < $1.name.lowercased() }) case .sortedByBuildTime: - return filtered.sorted(by: { $0.status.lastBuild?.timestamp ?? Date.distantPast > - $1.status.lastBuild?.timestamp ?? Date.distantPast}) + return filtered.sorted(by: {p1, p2 in + let r1 = p1.status.lastBuild?.result + let r2 = p2.status.lastBuild?.result + if (r1 != r2) { + if (r1 == nil) { + return false + } + else if (r2 == nil) { + return true + } + let resultOrder = [ + BuildResult.failure, BuildResult.success, + BuildResult.unknown, BuildResult.other + ] + return resultOrder.firstIndex(of: r1!)! < resultOrder.firstIndex(of: r2!)! + } + return p1.status.lastBuild?.timestamp ?? Date.distantFuture > p2.status.lastBuild?.timestamp ?? Date.distantFuture + }) } }