|
@@ -109,7 +109,7 @@ class ViewController: NSViewController {
|
|
|
case meetings = "Meetings"
|
|
case meetings = "Meetings"
|
|
|
case scheduler = "Scheduler"
|
|
case scheduler = "Scheduler"
|
|
|
case widgets = "Widgets"
|
|
case widgets = "Widgets"
|
|
|
- case aiCompanion = "Ai Assistant"
|
|
|
|
|
|
|
+ case aiCompanion = "AI Companion"
|
|
|
case settings = "Settings"
|
|
case settings = "Settings"
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -428,7 +428,7 @@ class ViewController: NSViewController {
|
|
|
case custom = "Custom date"
|
|
case custom = "Custom date"
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private var aiCompanionRecordingFilter: AiCompanionRecordingFilter = .all
|
|
|
|
|
|
|
+ private var aiCompanionRecordingFilter: AiCompanionRecordingFilter = .today
|
|
|
private weak var aiCompanionFilterPopup: NSPopUpButton?
|
|
private weak var aiCompanionFilterPopup: NSPopUpButton?
|
|
|
private weak var aiCompanionFilterFromPicker: NSDatePicker?
|
|
private weak var aiCompanionFilterFromPicker: NSDatePicker?
|
|
|
private weak var aiCompanionFilterToPicker: NSDatePicker?
|
|
private weak var aiCompanionFilterToPicker: NSDatePicker?
|
|
@@ -1905,7 +1905,7 @@ class ViewController: NSViewController {
|
|
|
private func requestMeetingRecordingConsent(title: String) -> MeetingRecordingConsentChoice {
|
|
private func requestMeetingRecordingConsent(title: String) -> MeetingRecordingConsentChoice {
|
|
|
let alert = NSAlert()
|
|
let alert = NSAlert()
|
|
|
alert.messageText = "Record this meeting locally?"
|
|
alert.messageText = "Record this meeting locally?"
|
|
|
- alert.informativeText = "With your consent, the app will record meeting audio on this Mac and show it in Ai Assistant after the meeting."
|
|
|
|
|
|
|
+ alert.informativeText = "With your consent, the app will record meeting audio on this Mac and show it in AI Companion after the meeting."
|
|
|
alert.addButton(withTitle: "Allow and Continue")
|
|
alert.addButton(withTitle: "Allow and Continue")
|
|
|
alert.addButton(withTitle: "Continue Without Recording")
|
|
alert.addButton(withTitle: "Continue Without Recording")
|
|
|
alert.window.title = title
|
|
alert.window.title = title
|
|
@@ -4972,7 +4972,7 @@ class ViewController: NSViewController {
|
|
|
settingsNotificationsBlock = notificationsBlock
|
|
settingsNotificationsBlock = notificationsBlock
|
|
|
stack.setCustomSpacing(24, after: notificationsBlock)
|
|
stack.setCustomSpacing(24, after: notificationsBlock)
|
|
|
|
|
|
|
|
- let transcriptionTitle = textLabel("Ai Assistant transcription", font: .systemFont(ofSize: 16, weight: .semibold), color: primaryText)
|
|
|
|
|
|
|
+ let transcriptionTitle = textLabel("AI Companion transcription", font: .systemFont(ofSize: 16, weight: .semibold), color: primaryText)
|
|
|
let transcriptionSubtitle = textLabel(
|
|
let transcriptionSubtitle = textLabel(
|
|
|
"Preferred languages are used for Apple on-device speech recognition after each meeting recording.",
|
|
"Preferred languages are used for Apple on-device speech recognition after each meeting recording.",
|
|
|
font: .systemFont(ofSize: 12, weight: .regular),
|
|
font: .systemFont(ofSize: 12, weight: .regular),
|
|
@@ -6851,7 +6851,7 @@ class ViewController: NSViewController {
|
|
|
homeSidebarRowViews = [:]
|
|
homeSidebarRowViews = [:]
|
|
|
homeSidebarIconViews = [:]
|
|
homeSidebarIconViews = [:]
|
|
|
homeSidebarLabels = [:]
|
|
homeSidebarLabels = [:]
|
|
|
- let sidebar = makeSidebar(items: ["Home", "Meetings", "Scheduler", "Widgets", "Ai Assistant", "Settings"], selected: selectedHomeSidebarItem, style: .home)
|
|
|
|
|
|
|
+ let sidebar = makeSidebar(items: ["Home", "Meetings", "Scheduler", "Widgets", "AI Companion", "Settings"], selected: selectedHomeSidebarItem, style: .home)
|
|
|
let content = NSView()
|
|
let content = NSView()
|
|
|
content.wantsLayer = true
|
|
content.wantsLayer = true
|
|
|
content.layer?.backgroundColor = NSColor.clear.cgColor
|
|
content.layer?.backgroundColor = NSColor.clear.cgColor
|
|
@@ -7811,7 +7811,7 @@ class ViewController: NSViewController {
|
|
|
root.addSubview(container)
|
|
root.addSubview(container)
|
|
|
|
|
|
|
|
// Header row: recordings list (AI Companion mode).
|
|
// Header row: recordings list (AI Companion mode).
|
|
|
- let title = makeLabel("Ai Assistant", size: 28, color: primaryText, weight: .bold, centered: false)
|
|
|
|
|
|
|
+ let title = makeLabel("AI Companion", size: 28, color: primaryText, weight: .bold, centered: false)
|
|
|
let subtitle = makeLabel("Get notes from your previous meetings", size: 13, color: secondaryText, weight: .regular, centered: false)
|
|
let subtitle = makeLabel("Get notes from your previous meetings", size: 13, color: secondaryText, weight: .regular, centered: false)
|
|
|
let count = makeLabel("0 recordings", size: 12, color: secondaryText, weight: .medium, centered: false)
|
|
let count = makeLabel("0 recordings", size: 12, color: secondaryText, weight: .medium, centered: false)
|
|
|
let titleStack = NSStackView(views: [title, subtitle, count])
|
|
let titleStack = NSStackView(views: [title, subtitle, count])
|
|
@@ -7852,7 +7852,7 @@ class ViewController: NSViewController {
|
|
|
let categoryFilter = NSPopUpButton()
|
|
let categoryFilter = NSPopUpButton()
|
|
|
categoryFilter.translatesAutoresizingMaskIntoConstraints = false
|
|
categoryFilter.translatesAutoresizingMaskIntoConstraints = false
|
|
|
categoryFilter.addItems(withTitles: AiCompanionRecordingFilter.allCases.map(\.rawValue))
|
|
categoryFilter.addItems(withTitles: AiCompanionRecordingFilter.allCases.map(\.rawValue))
|
|
|
- categoryFilter.selectItem(withTitle: AiCompanionRecordingFilter.all.rawValue)
|
|
|
|
|
|
|
+ categoryFilter.selectItem(withTitle: AiCompanionRecordingFilter.today.rawValue)
|
|
|
categoryFilter.target = self
|
|
categoryFilter.target = self
|
|
|
categoryFilter.action = #selector(aiCompanionFilterPresetChanged(_:))
|
|
categoryFilter.action = #selector(aiCompanionFilterPresetChanged(_:))
|
|
|
|
|
|
|
@@ -8077,8 +8077,8 @@ class ViewController: NSViewController {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@objc private func aiCompanionFilterResetTapped() {
|
|
@objc private func aiCompanionFilterResetTapped() {
|
|
|
- aiCompanionRecordingFilter = .all
|
|
|
|
|
- aiCompanionFilterPopup?.selectItem(withTitle: AiCompanionRecordingFilter.all.rawValue)
|
|
|
|
|
|
|
+ aiCompanionRecordingFilter = .today
|
|
|
|
|
+ aiCompanionFilterPopup?.selectItem(withTitle: AiCompanionRecordingFilter.today.rawValue)
|
|
|
aiCompanionFilterFromPicker?.dateValue = Date()
|
|
aiCompanionFilterFromPicker?.dateValue = Date()
|
|
|
aiCompanionFilterToPicker?.dateValue = Date()
|
|
aiCompanionFilterToPicker?.dateValue = Date()
|
|
|
updateAiCompanionDatePickersEnabledState()
|
|
updateAiCompanionDatePickersEnabledState()
|
|
@@ -8905,7 +8905,7 @@ class ViewController: NSViewController {
|
|
|
guard let index = aiCompanionSelectedIndex,
|
|
guard let index = aiCompanionSelectedIndex,
|
|
|
aiCompanionSummaries.indices.contains(index) else {
|
|
aiCompanionSummaries.indices.contains(index) else {
|
|
|
aiCompanionDetailEmptyLabel?.stringValue = aiCompanionSummaries.isEmpty
|
|
aiCompanionDetailEmptyLabel?.stringValue = aiCompanionSummaries.isEmpty
|
|
|
- ? "Run an Ai Assistant-enabled meeting to see notes here."
|
|
|
|
|
|
|
+ ? "Run an AI Companion-enabled meeting to see notes here."
|
|
|
: "Select a meeting on the left to view its AI notes."
|
|
: "Select a meeting on the left to view its AI notes."
|
|
|
aiCompanionDetailEmptyLabel?.isHidden = false
|
|
aiCompanionDetailEmptyLabel?.isHidden = false
|
|
|
return
|
|
return
|
|
@@ -10045,7 +10045,7 @@ class ViewController: NSViewController {
|
|
|
return "calendar.badge.clock"
|
|
return "calendar.badge.clock"
|
|
|
case "Widgets":
|
|
case "Widgets":
|
|
|
return filled ? "rectangle.grid.2x2.fill" : "rectangle.grid.2x2"
|
|
return filled ? "rectangle.grid.2x2.fill" : "rectangle.grid.2x2"
|
|
|
- case "Ai Assistant":
|
|
|
|
|
|
|
+ case "AI Companion":
|
|
|
return filled ? "sparkles" : "sparkles"
|
|
return filled ? "sparkles" : "sparkles"
|
|
|
case "Settings":
|
|
case "Settings":
|
|
|
// `gearshape.fill` may not exist on all macOS versions; handled via safe image assignment.
|
|
// `gearshape.fill` may not exist on all macOS versions; handled via safe image assignment.
|