Parcourir la Source

Update status menu visibility for premium meetings

Show top meetings only when the user is signed in with premium access, and refresh status bar state immediately on auth and entitlement changes.

Made-with: Cursor
huzaifahayat12 il y a 1 mois
Parent
commit
7118d8ce30

+ 11 - 1
meetings_app/StatusBar/StatusBarController.swift

@@ -5,6 +5,7 @@ final class StatusBarController: NSObject {
5
     private let authService = GoogleOAuthService.shared
5
     private let authService = GoogleOAuthService.shared
6
     private let statusItem: NSStatusItem
6
     private let statusItem: NSStatusItem
7
     private var observers: [NSObjectProtocol] = []
7
     private var observers: [NSObjectProtocol] = []
8
+    private var hasPremiumAccess = false
8
 
9
 
9
     override init() {
10
     override init() {
10
         statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
11
         statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
@@ -29,6 +30,13 @@ final class StatusBarController: NSObject {
29
         observers.append(center.addObserver(forName: .widgetSignInRequested, object: nil, queue: .main) { [weak self] _ in
30
         observers.append(center.addObserver(forName: .widgetSignInRequested, object: nil, queue: .main) { [weak self] _ in
30
             self?.rebuildMenu()
31
             self?.rebuildMenu()
31
         })
32
         })
33
+        observers.append(center.addObserver(forName: .statusBarPremiumAccessChanged, object: nil, queue: .main) { [weak self] notification in
34
+            guard let self else { return }
35
+            if let hasPremium = notification.userInfo?["hasPremiumAccess"] as? Bool {
36
+                self.hasPremiumAccess = hasPremium
37
+            }
38
+            self.rebuildMenu()
39
+        })
32
     }
40
     }
33
 
41
 
34
     deinit {
42
     deinit {
@@ -50,7 +58,7 @@ final class StatusBarController: NSObject {
50
         addOpenSidebarItem(title: "Settings", pageRaw: 4, to: menu)
58
         addOpenSidebarItem(title: "Settings", pageRaw: 4, to: menu)
51
 
59
 
52
         let signedIn = authService.loadTokens() != nil
60
         let signedIn = authService.loadTokens() != nil
53
-        if signedIn {
61
+        if signedIn && hasPremiumAccess {
54
             let topMeetings = WidgetMeetingStore.load().prefix(3).map { $0 }
62
             let topMeetings = WidgetMeetingStore.load().prefix(3).map { $0 }
55
             menu.addItem(.separator())
63
             menu.addItem(.separator())
56
             let header = NSMenuItem(title: "Top meetings", action: nil, keyEquivalent: "")
64
             let header = NSMenuItem(title: "Top meetings", action: nil, keyEquivalent: "")
@@ -71,7 +79,9 @@ final class StatusBarController: NSObject {
71
                     menu.addItem(item)
79
                     menu.addItem(item)
72
                 }
80
                 }
73
             }
81
             }
82
+        }
74
 
83
 
84
+        if signedIn {
75
             menu.addItem(.separator())
85
             menu.addItem(.separator())
76
             let signOutItem = NSMenuItem(title: "Sign Out", action: #selector(signOutClicked), keyEquivalent: "")
86
             let signOutItem = NSMenuItem(title: "Sign Out", action: #selector(signOutClicked), keyEquivalent: "")
77
             signOutItem.target = self
87
             signOutItem.target = self

+ 10 - 0
meetings_app/ViewController.swift

@@ -445,6 +445,11 @@ final class ViewController: NSViewController {
445
             guard let self else { return }
445
             guard let self else { return }
446
             self.handlePremiumAccessChanged(hasPremiumAccess)
446
             self.handlePremiumAccessChanged(hasPremiumAccess)
447
         }
447
         }
448
+        NotificationCenter.default.post(
449
+            name: .statusBarPremiumAccessChanged,
450
+            object: nil,
451
+            userInfo: ["hasPremiumAccess": storeKitCoordinator.hasPremiumAccess]
452
+        )
448
         migrateLegacyRatingStateIfNeeded()
453
         migrateLegacyRatingStateIfNeeded()
449
         beginUsageTrackingSessionIfNeeded()
454
         beginUsageTrackingSessionIfNeeded()
450
         observeAppLifecycleForUsageTrackingIfNeeded()
455
         observeAppLifecycleForUsageTrackingIfNeeded()
@@ -1564,6 +1569,11 @@ private extension ViewController {
1564
     private func handlePremiumAccessChanged(_ hasPremiumAccess: Bool) {
1569
     private func handlePremiumAccessChanged(_ hasPremiumAccess: Bool) {
1565
         let hadPremiumAccess = lastKnownPremiumAccess
1570
         let hadPremiumAccess = lastKnownPremiumAccess
1566
         lastKnownPremiumAccess = hasPremiumAccess
1571
         lastKnownPremiumAccess = hasPremiumAccess
1572
+        NotificationCenter.default.post(
1573
+            name: .statusBarPremiumAccessChanged,
1574
+            object: nil,
1575
+            userInfo: ["hasPremiumAccess": hasPremiumAccess]
1576
+        )
1567
         premiumUpgradeRatingPromptWorkItem?.cancel()
1577
         premiumUpgradeRatingPromptWorkItem?.cancel()
1568
         refreshPaywallStoreUI()
1578
         refreshPaywallStoreUI()
1569
         refreshScheduleCardsForPremiumStateChange()
1579
         refreshScheduleCardsForPremiumStateChange()

+ 1 - 0
meetings_app/Widgets/DesktopWidgetView.swift

@@ -359,6 +359,7 @@ extension Notification.Name {
359
     static let widgetRefreshRequested = Notification.Name("widgetRefreshRequested")
359
     static let widgetRefreshRequested = Notification.Name("widgetRefreshRequested")
360
     static let widgetOpenMeetingLinkRequested = Notification.Name("widgetOpenMeetingLinkRequested")
360
     static let widgetOpenMeetingLinkRequested = Notification.Name("widgetOpenMeetingLinkRequested")
361
     static let statusBarOpenSidebarPage = Notification.Name("statusBarOpenSidebarPage")
361
     static let statusBarOpenSidebarPage = Notification.Name("statusBarOpenSidebarPage")
362
+    static let statusBarPremiumAccessChanged = Notification.Name("statusBarPremiumAccessChanged")
362
     static let statusBarSignOutRequested = Notification.Name("statusBarSignOutRequested")
363
     static let statusBarSignOutRequested = Notification.Name("statusBarSignOutRequested")
363
     static let meetingsSnapshotUpdated = Notification.Name("meetingsSnapshotUpdated")
364
     static let meetingsSnapshotUpdated = Notification.Name("meetingsSnapshotUpdated")
364
 }
365
 }