diff --git a/MeetingBar/ActionsOnEventStart.swift b/MeetingBar/ActionsOnEventStart.swift index d941e05f..4a58d577 100644 --- a/MeetingBar/ActionsOnEventStart.swift +++ b/MeetingBar/ActionsOnEventStart.swift @@ -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) } diff --git a/MeetingBar/AppStore.swift b/MeetingBar/AppStore.swift index b31898b6..a4e5c82d 100644 --- a/MeetingBar/AppStore.swift +++ b/MeetingBar/AppStore.swift @@ -11,7 +11,7 @@ import Foundation import Defaults import SwiftyStoreKit -struct PatronageProducts { +enum PatronageProducts { static let threeMonth = "leits.MeetingBar.patronage.3Month" static let sixMonth = "leits.MeetingBar.patronage.6Month" static let twelveMonth = "leits.MeetingBar.patronage.12Month" diff --git a/MeetingBar/EventStores/Event.swift b/MeetingBar/EventStores/Event.swift index a0932fb0..b3eea9dd 100644 --- a/MeetingBar/EventStores/Event.swift +++ b/MeetingBar/EventStores/Event.swift @@ -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 +} diff --git a/MeetingBar/Helpers.swift b/MeetingBar/Helpers.swift index 66b174ae..65cbbbd7 100644 --- a/MeetingBar/Helpers.swift +++ b/MeetingBar/Helpers.swift @@ -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 +} diff --git a/MeetingBar/Info.plist b/MeetingBar/Info.plist index 92850d0e..adbad292 100644 --- a/MeetingBar/Info.plist +++ b/MeetingBar/Info.plist @@ -2,6 +2,8 @@ + NSCalendarsFullAccessUsageDescription + To get events to show on status bar CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable diff --git a/MeetingBar/Views/AutoJoinScreen.swift b/MeetingBar/Views/AutoJoinScreen.swift index ae3fa387..2a19a908 100644 --- a/MeetingBar/Views/AutoJoinScreen.swift +++ b/MeetingBar/Views/AutoJoinScreen.swift @@ -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 { @@ -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) } diff --git a/MeetingBar/Views/Preferences/CalendarsTab.swift b/MeetingBar/Views/Preferences/CalendarsTab.swift index 5e40b951..2a3a0618 100644 --- a/MeetingBar/Views/Preferences/CalendarsTab.swift +++ b/MeetingBar/Views/Preferences/CalendarsTab.swift @@ -137,7 +137,7 @@ struct CalendarRow: View { .onAppear { isSelected = Defaults[.selectedCalendarIDs].contains(calendar.ID) } - .onReceive([self.isSelected].publisher.first()) { newValue in + .onReceive([isSelected].publisher.first()) { newValue in if newValue { Defaults[.selectedCalendarIDs].append(calendar.ID) } else {