Skip to content

Commit

Permalink
Final v1 of autojoin window
Browse files Browse the repository at this point in the history
  • Loading branch information
leits committed Jan 22, 2024
1 parent f37f8ba commit ef23060
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 44 deletions.
1 change: 0 additions & 1 deletion MeetingBar/ActionsOnEventStart.swift
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ class ActionsOnEventStart: NSObject {
// this is an edge case when the event was already notified for, but scheduled for a later time.
if matchedEvent == nil || matchedEvent?.lastModifiedDate != nextEvent.lastModifiedDate {
if nextEvent.meetingLink != nil {
// nextEvent.openMeeting()
app.openAutJoinWindow(event: nextEvent)
}

Expand Down
17 changes: 17 additions & 0 deletions MeetingBar/EventStores/Event.swift
Original file line number Diff line number Diff line change
Expand Up @@ -311,3 +311,20 @@ func getNextEvent(events: [MBEvent], linkRequired: Bool = false) -> MBEvent? {
}
return nextEvent
}

func getEventDateString(_ event: MBEvent) -> String {
let eventTimeFormatter = DateFormatter()
eventTimeFormatter.locale = I18N.instance.locale

switch Defaults[.timeFormat] {
case .am_pm:
eventTimeFormatter.dateFormat = "h:mm a "
case .military:
eventTimeFormatter.dateFormat = "HH:mm"
}
let eventStartTime = eventTimeFormatter.string(from: event.startDate)
let eventEndTime = eventTimeFormatter.string(from: event.endDate)
let eventDurationMinutes = String(Int(event.endDate.timeIntervalSince(event.startDate) / 60))
let durationTitle = "status_bar_submenu_duration_all_day".loco(eventStartTime, eventEndTime, eventDurationMinutes)
return durationTitle
}
21 changes: 21 additions & 0 deletions MeetingBar/Helpers.swift
Original file line number Diff line number Diff line change
Expand Up @@ -238,3 +238,24 @@ func openLinkFromClipboard() {
"Clipboard has no content, so the meeting cannot be started...")
}
}

func generateFakeEvent() -> MBEvent {
let calendar = MBCalendar(title: "Fake calendar", ID: "fake_cal", source: nil, email: nil, color: .black)

let event = MBEvent(
ID: "test_event",
lastModifiedDate: nil,
title: "Test event",
status: .confirmed,
notes: nil,
location: nil,
url: URL(string: "https://zoom.us/j/5551112222")!,
organizer: nil,
startDate: Calendar.current.date(byAdding: .minute, value: 3, to: Date())!,
endDate: Calendar.current.date(byAdding: .minute, value: 33, to: Date())!,
isAllDay: false,
recurrent: false,
calendar: calendar
)
return event
}
66 changes: 23 additions & 43 deletions MeetingBar/Views/AutoJoinScreen.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,28 +17,36 @@ struct AutoJoinScreen: View {
ZStack {
Rectangle.semiOpaqueWindow()
VStack {
Text(event.title).font(.system(size: 40)).padding(.bottom, 2)
Text(event.meetingLink?.service?.rawValue ?? "").font(.system(size: 16))
VStack {
Text(getEventDateString(event)).padding(.bottom, 2)
if #available(macOS 11.0, *) {
Text(event.startDate, style: .relative).font(.system(size: 16))
}
HStack {
Image(nsImage: getIconForMeetingService(event.meetingLink?.service))
.resizable().frame(width: 25, height: 25)
Text(event.title).font(.title)
}
VStack(spacing: 10) {
Text(getEventDateString(event))
}.padding(15)
HStack(spacing: 40) {
Button("Dismiss") {
self.window?.close()
HStack(spacing: 30) {
Button(action: dismiss) {
Text("general_close".loco()).padding(.vertical, 5).padding(.horizontal, 20)
}
Button("Join event") {
self.event.openMeeting()
self.window?.close()
}.background(Color.accentColor.opacity(1))
Button(action: joinEvent) {
Text("notifications_meetingbar_join_event_action".loco()).padding(.vertical, 5).padding(.horizontal, 25)
}.background(Color.accentColor).cornerRadius(5)
}
}
}
.colorScheme(.dark)
.frame(maxWidth: .infinity, maxHeight: .infinity)
}

func dismiss() {
window?.close()
}

func joinEvent() {
event.openMeeting()
window?.close()
}
}

public extension View {
Expand All @@ -63,34 +71,6 @@ struct VisualEffect: NSViewRepresentable {
func updateNSView(_: NSView, context _: Context) {}
}

func getEventDateString(_ event: MBEvent) -> String {
let formatter = DateIntervalFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .short
return formatter.string(from: event.startDate, to: event.endDate)
}

func generateEvent() -> MBEvent {
let calendar = MBCalendar(title: "Fake calendar", ID: "fake_cal", source: nil, email: nil, color: .black)

let event = MBEvent(
ID: "test_event",
lastModifiedDate: nil,
title: "Test event",
status: .confirmed,
notes: nil,
location: nil,
url: URL(string: "https://zoom.us/j/5551112222")!,
organizer: nil,
startDate: Calendar.current.date(byAdding: .minute, value: 3, to: Date())!,
endDate: Calendar.current.date(byAdding: .minute, value: 33, to: Date())!,
isAllDay: false,
recurrent: false,
calendar: calendar
)
return event
}

#Preview {
AutoJoinScreen(event: generateEvent(), window: nil)
AutoJoinScreen(event: generateFakeEvent(), window: nil)
}

0 comments on commit ef23060

Please sign in to comment.