blob: 3fadf0c041322d40f4163871b702c4303291a710 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
import SwiftUI
#Preview { ContentView().environmentObject(CharacterFetcher()) }
@main
struct HoloBarApp: App {
@StateObject private var fetcher = CharacterFetcher()
@State private var showAvatars = false
var body: some Scene {
Window("HoloBar", id: "main") {
ContentView().environmentObject(fetcher)
}
MenuBarExtra {
VStack {
if fetcher.characters.isEmpty {
Text("Loading …")
} else {
ForEach(fetcher.characters) { character in
Button(action: {
NSWorkspace.shared.open(character.profileURL)
}) {
HStack {
if showAvatars {
AsyncImage(url: character.avatarURL) { phase in
if let image = phase.image {
image
.resizable()
.scaledToFill()
} else if phase.error != nil {
Image(systemName: "person.crop.circle.badge.exclamationmark")
.resizable()
.scaledToFit()
.foregroundStyle(.gray)
} else {
Image(systemName: "person.crop.circle")
.resizable()
.scaledToFit()
.foregroundStyle(.gray)
}
}
}
Text(character.name)
}
}
}
}
Divider()
#if DEBUG
Button("Simulate Day Change") {
NotificationCenter.default.post(name: .NSCalendarDayChanged, object: nil)
}
#endif
Button("Show UI") {
for window in NSApp.windows {
if window.identifier?.rawValue == "main" {
window.makeKeyAndOrderFront(nil)
return
}
}
}
Button("\(showAvatars ? "Hide" : "Show") Avatars") {
showAvatars.toggle()
}
Button("Refresh", action: fetcher.refreshCharactersForToday)
Button("Quit", action: { NSApplication.shared.terminate(nil) })
}
.onReceive(NotificationCenter.default.publisher(for: .NSCalendarDayChanged)) { _ in
fetcher.refreshCharactersForToday()
}
} label: {
Text("HL")
}
}
}
|