Преглед изворни кода

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 месеци
родитељ
комит
7118d8ce30

+ 11 - 1
meetings_app/StatusBar/StatusBarController.swift

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

+ 10 - 0
meetings_app/ViewController.swift

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

+ 1 - 0
meetings_app/Widgets/DesktopWidgetView.swift

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