Эх сурвалжийг харах

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 3 сар өмнө
parent
commit
7118d8ce30

+ 11 - 1
meetings_app/StatusBar/StatusBarController.swift

@@ -5,6 +5,7 @@ final class StatusBarController: NSObject {
     private let authService = GoogleOAuthService.shared
     private let statusItem: NSStatusItem
     private var observers: [NSObjectProtocol] = []
+    private var hasPremiumAccess = false
 
     override init() {
         statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
@@ -29,6 +30,13 @@ final class StatusBarController: NSObject {
         observers.append(center.addObserver(forName: .widgetSignInRequested, object: nil, queue: .main) { [weak self] _ in
             self?.rebuildMenu()
         })
+        observers.append(center.addObserver(forName: .statusBarPremiumAccessChanged, object: nil, queue: .main) { [weak self] notification in
+            guard let self else { return }
+            if let hasPremium = notification.userInfo?["hasPremiumAccess"] as? Bool {
+                self.hasPremiumAccess = hasPremium
+            }
+            self.rebuildMenu()
+        })
     }
 
     deinit {
@@ -50,7 +58,7 @@ final class StatusBarController: NSObject {
         addOpenSidebarItem(title: "Settings", pageRaw: 4, to: menu)
 
         let signedIn = authService.loadTokens() != nil
-        if signedIn {
+        if signedIn && hasPremiumAccess {
             let topMeetings = WidgetMeetingStore.load().prefix(3).map { $0 }
             menu.addItem(.separator())
             let header = NSMenuItem(title: "Top meetings", action: nil, keyEquivalent: "")
@@ -71,7 +79,9 @@ final class StatusBarController: NSObject {
                     menu.addItem(item)
                 }
             }
+        }
 
+        if signedIn {
             menu.addItem(.separator())
             let signOutItem = NSMenuItem(title: "Sign Out", action: #selector(signOutClicked), keyEquivalent: "")
             signOutItem.target = self

+ 10 - 0
meetings_app/ViewController.swift

@@ -445,6 +445,11 @@ final class ViewController: NSViewController {
             guard let self else { return }
             self.handlePremiumAccessChanged(hasPremiumAccess)
         }
+        NotificationCenter.default.post(
+            name: .statusBarPremiumAccessChanged,
+            object: nil,
+            userInfo: ["hasPremiumAccess": storeKitCoordinator.hasPremiumAccess]
+        )
         migrateLegacyRatingStateIfNeeded()
         beginUsageTrackingSessionIfNeeded()
         observeAppLifecycleForUsageTrackingIfNeeded()
@@ -1564,6 +1569,11 @@ private extension ViewController {
     private func handlePremiumAccessChanged(_ hasPremiumAccess: Bool) {
         let hadPremiumAccess = lastKnownPremiumAccess
         lastKnownPremiumAccess = hasPremiumAccess
+        NotificationCenter.default.post(
+            name: .statusBarPremiumAccessChanged,
+            object: nil,
+            userInfo: ["hasPremiumAccess": hasPremiumAccess]
+        )
         premiumUpgradeRatingPromptWorkItem?.cancel()
         refreshPaywallStoreUI()
         refreshScheduleCardsForPremiumStateChange()

+ 1 - 0
meetings_app/Widgets/DesktopWidgetView.swift

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