|
|
@@ -42,20 +42,26 @@ final class StatusBarController: NSObject {
|
|
42
|
42
|
openAppItem.target = self
|
|
43
|
43
|
menu.addItem(openAppItem)
|
|
44
|
44
|
|
|
|
45
|
+ menu.addItem(.separator())
|
|
|
46
|
+ addOpenSidebarItem(title: "Join Meetings", pageRaw: 0, to: menu)
|
|
|
47
|
+ addOpenSidebarItem(title: "Schedule", pageRaw: 1, to: menu)
|
|
|
48
|
+ addOpenSidebarItem(title: "Calendar", pageRaw: 2, to: menu)
|
|
|
49
|
+ addOpenSidebarItem(title: "Widgets", pageRaw: 3, to: menu)
|
|
|
50
|
+ addOpenSidebarItem(title: "Settings", pageRaw: 4, to: menu)
|
|
|
51
|
+
|
|
45
|
52
|
let signedIn = authService.loadTokens() != nil
|
|
46
|
53
|
if signedIn {
|
|
47
|
54
|
let topMeetings = WidgetMeetingStore.load().prefix(3).map { $0 }
|
|
|
55
|
+ menu.addItem(.separator())
|
|
|
56
|
+ let header = NSMenuItem(title: "Top meetings", action: nil, keyEquivalent: "")
|
|
|
57
|
+ header.isEnabled = false
|
|
|
58
|
+ menu.addItem(header)
|
|
|
59
|
+
|
|
48
|
60
|
if topMeetings.isEmpty {
|
|
49
|
61
|
let empty = NSMenuItem(title: "No upcoming meetings", action: nil, keyEquivalent: "")
|
|
50
|
62
|
empty.isEnabled = false
|
|
51
|
|
- menu.addItem(.separator())
|
|
52
|
63
|
menu.addItem(empty)
|
|
53
|
64
|
} else {
|
|
54
|
|
- menu.addItem(.separator())
|
|
55
|
|
- let header = NSMenuItem(title: "Top meetings", action: nil, keyEquivalent: "")
|
|
56
|
|
- header.isEnabled = false
|
|
57
|
|
- menu.addItem(header)
|
|
58
|
|
-
|
|
59
|
65
|
for meeting in topMeetings {
|
|
60
|
66
|
let title = "\(meeting.timeText) \(meeting.title)"
|
|
61
|
67
|
let item = NSMenuItem(title: title, action: #selector(meetingClicked(_:)), keyEquivalent: "")
|
|
|
@@ -102,6 +108,14 @@ final class StatusBarController: NSObject {
|
|
102
|
108
|
}
|
|
103
|
109
|
}
|
|
104
|
110
|
|
|
|
111
|
+ @objc private func openSidebarPageClicked(_ sender: NSMenuItem) {
|
|
|
112
|
+ guard let pageRaw = sender.representedObject as? Int else { return }
|
|
|
113
|
+ bringAppToFront()
|
|
|
114
|
+ DispatchQueue.main.asyncAfter(deadline: .now() + 0.15) {
|
|
|
115
|
+ NotificationCenter.default.post(name: .statusBarOpenSidebarPage, object: nil, userInfo: ["page": pageRaw])
|
|
|
116
|
+ }
|
|
|
117
|
+ }
|
|
|
118
|
+
|
|
105
|
119
|
@objc private func meetingClicked(_ sender: NSMenuItem) {
|
|
106
|
120
|
guard let link = sender.representedObject as? String,
|
|
107
|
121
|
let url = URL(string: link.trimmingCharacters(in: .whitespacesAndNewlines)) else { return }
|
|
|
@@ -125,5 +139,12 @@ final class StatusBarController: NSObject {
|
|
125
|
139
|
window.makeKeyAndOrderFront(nil)
|
|
126
|
140
|
}
|
|
127
|
141
|
}
|
|
|
142
|
+
|
|
|
143
|
+ private func addOpenSidebarItem(title: String, pageRaw: Int, to menu: NSMenu) {
|
|
|
144
|
+ let item = NSMenuItem(title: title, action: #selector(openSidebarPageClicked(_:)), keyEquivalent: "")
|
|
|
145
|
+ item.target = self
|
|
|
146
|
+ item.representedObject = pageRaw
|
|
|
147
|
+ menu.addItem(item)
|
|
|
148
|
+ }
|
|
128
|
149
|
}
|
|
129
|
150
|
|