소스 검색

Sync meeting-consent language changes to settings instantly.

Co-authored-by: Cursor <cursoragent@cursor.com>
huzaifahayat12 1 개월 전
부모
커밋
792f3f6cd1
1개의 변경된 파일26개의 추가작업 그리고 0개의 파일을 삭제
  1. 26 0
      meetings_app/ViewController.swift

+ 26 - 0
meetings_app/ViewController.swift

@@ -510,6 +510,8 @@ final class ViewController: NSViewController {
510 510
     private let aiCompanionPreferredLanguage1DefaultsKey = "aiCompanion.preferredLanguage1"
511 511
     private let aiCompanionPreferredLanguage2DefaultsKey = "aiCompanion.preferredLanguage2"
512 512
     private weak var activeMeetingConsentWindow: NSWindow?
513
+    private weak var meetingConsentPrimaryLanguagePopup: NSPopUpButton?
514
+    private weak var meetingConsentSecondaryLanguagePopup: NSPopUpButton?
513 515
     private var didTapInlineMeetingConsentClose = false
514 516
     private let ratingEligibleUsageSeconds: TimeInterval = 30 * 60
515 517
     private let meetingTranscriptionService = MeetingTranscriptionService()
@@ -1350,6 +1352,8 @@ private extension ViewController {
1350 1352
         let language1Popup = NSPopUpButton(frame: .zero, pullsDown: false)
1351 1353
         language1Popup.translatesAutoresizingMaskIntoConstraints = false
1352 1354
         language1Popup.controlSize = .regular
1355
+        language1Popup.target = self
1356
+        language1Popup.action = #selector(meetingConsentSpeechLanguageChanged(_:))
1353 1357
         for option in speechOptions {
1354 1358
             language1Popup.addItem(withTitle: option.displayName)
1355 1359
             language1Popup.lastItem?.representedObject = option.identifier
@@ -1363,6 +1367,8 @@ private extension ViewController {
1363 1367
         let language2Popup = NSPopUpButton(frame: .zero, pullsDown: false)
1364 1368
         language2Popup.translatesAutoresizingMaskIntoConstraints = false
1365 1369
         language2Popup.controlSize = .regular
1370
+        language2Popup.target = self
1371
+        language2Popup.action = #selector(meetingConsentSpeechLanguageChanged(_:))
1366 1372
         language2Popup.addItem(withTitle: "None")
1367 1373
         language2Popup.lastItem?.representedObject = ""
1368 1374
         for option in speechOptions {
@@ -1415,6 +1421,8 @@ private extension ViewController {
1415 1421
         alert.accessoryView = languageContainer
1416 1422
         didTapInlineMeetingConsentClose = false
1417 1423
         activeMeetingConsentWindow = alert.window
1424
+        meetingConsentPrimaryLanguagePopup = language1Popup
1425
+        meetingConsentSecondaryLanguagePopup = language2Popup
1418 1426
         if let contentView = alert.window.contentView {
1419 1427
             let topCloseButton = NSButton(title: "✕", target: self, action: #selector(meetingConsentInlineCloseTapped(_:)))
1420 1428
             topCloseButton.translatesAutoresizingMaskIntoConstraints = false
@@ -1434,6 +1442,8 @@ private extension ViewController {
1434 1442
         }
1435 1443
         let response = alert.runModal()
1436 1444
         activeMeetingConsentWindow = nil
1445
+        meetingConsentPrimaryLanguagePopup = nil
1446
+        meetingConsentSecondaryLanguagePopup = nil
1437 1447
 
1438 1448
         if didTapInlineMeetingConsentClose {
1439 1449
             return .dismissed
@@ -1465,6 +1475,22 @@ private extension ViewController {
1465 1475
         consentWindow.orderOut(nil)
1466 1476
     }
1467 1477
 
1478
+    @objc private func meetingConsentSpeechLanguageChanged(_ sender: NSPopUpButton) {
1479
+        guard let primary = meetingConsentPrimaryLanguagePopup?.selectedItem?.representedObject as? String,
1480
+              primary.isEmpty == false else { return }
1481
+
1482
+        var secondary: String? = meetingConsentSecondaryLanguagePopup?.selectedItem?.representedObject as? String
1483
+        if secondary?.isEmpty == true {
1484
+            secondary = nil
1485
+        }
1486
+        if let secondaryValue = secondary,
1487
+           secondaryValue.replacingOccurrences(of: "_", with: "-").lowercased() == primary.replacingOccurrences(of: "_", with: "-").lowercased() {
1488
+            secondary = nil
1489
+            meetingConsentSecondaryLanguagePopup?.selectItem(at: 0)
1490
+        }
1491
+        updateAiCompanionPreferredSpeechLanguages(primary: primary, secondary: secondary)
1492
+    }
1493
+
1468 1494
     private func loadAiCompanionLocalRecordings() {
1469 1495
         guard let raw = UserDefaults.standard.data(forKey: aiCompanionLocalRecordingsDefaultsKey) else {
1470 1496
             aiCompanionLocalRecordings = []