Ver código fonte

Sync meeting-consent language changes to settings instantly.

Co-authored-by: Cursor <cursoragent@cursor.com>
huzaifahayat12 2 meses atrás
pai
commit
792f3f6cd1
1 arquivos alterados com 26 adições e 0 exclusões
  1. 26 0
      meetings_app/ViewController.swift

+ 26 - 0
meetings_app/ViewController.swift

@@ -510,6 +510,8 @@ final class ViewController: NSViewController {
     private let aiCompanionPreferredLanguage1DefaultsKey = "aiCompanion.preferredLanguage1"
     private let aiCompanionPreferredLanguage2DefaultsKey = "aiCompanion.preferredLanguage2"
     private weak var activeMeetingConsentWindow: NSWindow?
+    private weak var meetingConsentPrimaryLanguagePopup: NSPopUpButton?
+    private weak var meetingConsentSecondaryLanguagePopup: NSPopUpButton?
     private var didTapInlineMeetingConsentClose = false
     private let ratingEligibleUsageSeconds: TimeInterval = 30 * 60
     private let meetingTranscriptionService = MeetingTranscriptionService()
@@ -1350,6 +1352,8 @@ private extension ViewController {
         let language1Popup = NSPopUpButton(frame: .zero, pullsDown: false)
         language1Popup.translatesAutoresizingMaskIntoConstraints = false
         language1Popup.controlSize = .regular
+        language1Popup.target = self
+        language1Popup.action = #selector(meetingConsentSpeechLanguageChanged(_:))
         for option in speechOptions {
             language1Popup.addItem(withTitle: option.displayName)
             language1Popup.lastItem?.representedObject = option.identifier
@@ -1363,6 +1367,8 @@ private extension ViewController {
         let language2Popup = NSPopUpButton(frame: .zero, pullsDown: false)
         language2Popup.translatesAutoresizingMaskIntoConstraints = false
         language2Popup.controlSize = .regular
+        language2Popup.target = self
+        language2Popup.action = #selector(meetingConsentSpeechLanguageChanged(_:))
         language2Popup.addItem(withTitle: "None")
         language2Popup.lastItem?.representedObject = ""
         for option in speechOptions {
@@ -1415,6 +1421,8 @@ private extension ViewController {
         alert.accessoryView = languageContainer
         didTapInlineMeetingConsentClose = false
         activeMeetingConsentWindow = alert.window
+        meetingConsentPrimaryLanguagePopup = language1Popup
+        meetingConsentSecondaryLanguagePopup = language2Popup
         if let contentView = alert.window.contentView {
             let topCloseButton = NSButton(title: "✕", target: self, action: #selector(meetingConsentInlineCloseTapped(_:)))
             topCloseButton.translatesAutoresizingMaskIntoConstraints = false
@@ -1434,6 +1442,8 @@ private extension ViewController {
         }
         let response = alert.runModal()
         activeMeetingConsentWindow = nil
+        meetingConsentPrimaryLanguagePopup = nil
+        meetingConsentSecondaryLanguagePopup = nil
 
         if didTapInlineMeetingConsentClose {
             return .dismissed
@@ -1465,6 +1475,22 @@ private extension ViewController {
         consentWindow.orderOut(nil)
     }
 
+    @objc private func meetingConsentSpeechLanguageChanged(_ sender: NSPopUpButton) {
+        guard let primary = meetingConsentPrimaryLanguagePopup?.selectedItem?.representedObject as? String,
+              primary.isEmpty == false else { return }
+
+        var secondary: String? = meetingConsentSecondaryLanguagePopup?.selectedItem?.representedObject as? String
+        if secondary?.isEmpty == true {
+            secondary = nil
+        }
+        if let secondaryValue = secondary,
+           secondaryValue.replacingOccurrences(of: "_", with: "-").lowercased() == primary.replacingOccurrences(of: "_", with: "-").lowercased() {
+            secondary = nil
+            meetingConsentSecondaryLanguagePopup?.selectItem(at: 0)
+        }
+        updateAiCompanionPreferredSpeechLanguages(primary: primary, secondary: secondary)
+    }
+
     private func loadAiCompanionLocalRecordings() {
         guard let raw = UserDefaults.standard.data(forKey: aiCompanionLocalRecordingsDefaultsKey) else {
             aiCompanionLocalRecordings = []