// Copyright © 2015 Abhishek Banthia import Cocoa import EventKit class MenubarHandler: NSObject { @objc func titleForMenubar() -> String? { if let nextEvent = checkForUpcomingEvents() { return nextEvent } guard let menubarTitles = DataStore.shared().retrieve(key: CLMenubarFavorites) as? [Data] else { return nil } // If the menubar is in compact mode, we don't need any of the below calculations; exit early if DataStore.shared().shouldDisplay(.menubarCompactMode) { return nil } if menubarTitles.isEmpty == false { let titles = menubarTitles.map({ (data) -> String? in let timezone = TimezoneData.customObject(from: data) let operationsObject = TimezoneDataOperations(with: timezone!) return "\(operationsObject.menuTitle().trimmingCharacters(in: NSCharacterSet.whitespacesAndNewlines))" }) let titlesStringified = titles.compactMap { $0 } return titlesStringified.joined(separator: " ") } return nil } private func checkForUpcomingEvents() -> String? { if DataStore.shared().shouldDisplay(.showMeetingInMenubar) { let filteredDates = EventCenter.sharedCenter().eventsForDate let autoupdatingCal = EventCenter.sharedCenter().autoupdatingCalendar guard let events = filteredDates[autoupdatingCal.startOfDay(for: Date())] else { return nil } for event in events { if event.event.startDate.timeIntervalSinceNow > 0 && !event.isAllDay { let timeForEventToStart = event.event.startDate.timeIntervalSinceNow / 60 if timeForEventToStart > 30 { print("Our next event: \(event.event.title ?? "Error") starts in \(timeForEventToStart) mins") continue } return EventCenter.sharedCenter().format(event: event.event) } } } return nil } }