Browse Source

Call pushManager.subscribe only if enabled

nimbleghost 2 năm trước cách đây
mục cha
commit
2f5acee798
2 tập tin đã thay đổi với 26 bổ sung6 xóa
  1. 18 5
      web/src/app/Notifier.js
  2. 8 1
      web/src/app/SubscriptionManager.js

+ 18 - 5
web/src/app/Notifier.js

@@ -55,13 +55,26 @@ class Notifier {
 
     const pushManager = await this.pushManager();
 
-    return (
-      (await pushManager.getSubscription()) ??
-      pushManager.subscribe({
+    const existingSubscription = await pushManager.getSubscription();
+
+    if (existingSubscription) {
+      return existingSubscription;
+    }
+
+    // create a new subscription only if web push is enabled
+    // it is possible that web push was previously enabled and then disabled again
+    // in which case there would be an existingSubscription.
+    // but if it was _not_ enabled previously, we reach here, and only create a new
+    // subscription if it is now enabled.
+
+    if (await this.pushEnabled()) {
+      return pushManager.subscribe({
         userVisibleOnly: true,
         applicationServerKey: urlB64ToUint8Array(config.web_push_public_key),
-      })
-    );
+      });
+    }
+
+    return undefined;
   }
 
   async pushManager() {

+ 8 - 1
web/src/app/SubscriptionManager.js

@@ -114,7 +114,14 @@ class SubscriptionManager {
   async refreshWebPushSubscriptions(presetTopics) {
     const topics = presetTopics ?? (await this.webPushTopics());
 
-    await api.updateWebPushSubscriptions(topics, await notifier.getBrowserSubscription());
+    const browserSubscription = await notifier.getBrowserSubscription();
+
+    if (!browserSubscription) {
+      console.log("[SubscriptionManager] No browser subscription currently exists, so web push was never enabled. Skipping.");
+      return;
+    }
+
+    await api.updateWebPushSubscriptions(topics, browserSubscription);
   }
 
   async updateState(subscriptionId, state) {