diff --git a/src/hub.js b/src/hub.js index 145a30e6bc8cad44a1fd03e4ec1a85ba4ce3ae92..82f4bce700d252d931aa9a52a4e28d1b887fa1e7 100644 --- a/src/hub.js +++ b/src/hub.js @@ -153,7 +153,6 @@ AFRAME.registerInputActivator("reverseY", ReverseY); AFRAME.registerInputMappings(inputConfig, true); const concurrentLoadDetector = new ConcurrentLoadDetector(); - concurrentLoadDetector.start(); store.init(); @@ -307,6 +306,13 @@ async function runBotMode(scene, entryManager) { } document.addEventListener("DOMContentLoaded", async () => { + const subscriptions = new Subscriptions(); + navigator.serviceWorker.register("/hub.service.js"); + navigator.serviceWorker.ready.then(registration => { + subscriptions.setRegistration(registration); + remountUI({ subscriptions }); + }); + const scene = document.querySelector("a-scene"); const hubChannel = new HubChannel(store); const entryManager = new SceneEntryManager(hubChannel); @@ -385,6 +391,8 @@ document.addEventListener("DOMContentLoaded", async () => { .join() .receive("ok", async data => { hubChannel.setPhoenixChannel(hubPhxChannel); + subscriptions.setHubInfo(hubId, hubChannel); + remountUI({ subscriptions }); await handleHubChannelJoined(entryManager, hubChannel, data); }) .receive("error", res => { @@ -494,15 +502,8 @@ document.addEventListener("DOMContentLoaded", async () => { retPhxChannel .join() .receive("ok", async data => { - const vapidPublicKey = data.vapid_public_key; - console.log("Load service"); - navigator.serviceWorker.register("/hub.service.js"); - console.log("222"); - navigator.serviceWorker.ready.then(serviceWorkerRegistration => { - console.log("333"); - const subscriptions = new Subscriptions(hubId, hubChannel, vapidPublicKey, store, serviceWorkerRegistration); - remountUI({ subscriptions }); - }); + subscriptions.setVapidPublicKey(data.vapid_public_key); + remountUI({ subscriptions }); }) .receive("error", res => console.error(res)); diff --git a/src/storage/store.js b/src/storage/store.js index 0db7decb6ec37c4256ae4941115a938820544b24..1b6d575ddd3f030a9b8e43897bfa907ba2842ffa 100644 --- a/src/storage/store.js +++ b/src/storage/store.js @@ -38,13 +38,6 @@ export const SCHEMA = { properties: { lastUsedMicDeviceId: { type: "string" } } - }, - - // Map of sid -> { endpoint: "<endpoint>" } - // If entry exists, it means there is a subscription to that room, wired to that endpoint. - subscriptions: { - type: "object", - additionalProperties: true } }, diff --git a/src/subscriptions.js b/src/subscriptions.js index 09b9dfbdde7e94f96b2f3f65159e470492e8d0b1..18f42702ce920ed343213062841e3ce6a9246d0c 100644 --- a/src/subscriptions.js +++ b/src/subscriptions.js @@ -13,29 +13,43 @@ function urlBase64ToUint8Array(base64String) { return outputArray; } +// In local storage: Map of sid -> { endpoint: "<endpoint>" } +// If entry exists, it means there is a subscription to that room, wired to that endpoint. +const LOCAL_STORE_KEY = "___hubs_subscriptions"; + export default class Subscriptions { - constructor(hubId, hubChannel, vapidPublicKey, store, registration) { - this.store = store; + setHubInfo = (hubId, hubChannel) => { this.hubId = hubId; this.hubChannel = hubChannel; + }; + + setRegistration = registration => { this.registration = registration; - this.vapidPublicKey = vapidPublicKey; - } + }; setVapidPublicKey = vapidPublicKey => { this.vapidPublicKey = vapidPublicKey; }; + getSubscriptionsFromStorage = () => { + return JSON.parse(localStorage.getItem(LOCAL_STORE_KEY) || "{}"); + }; + + setSubscriptionsToStorage = subscriptions => { + return localStorage.setItem(LOCAL_STORE_KEY, JSON.stringify(subscriptions)); + }; + isSubscribed = () => { - return !!this.store.subscriptions[this.hubId]; + console.log("WAT"); + return this.getSubscriptionsFromStorage()[this.hubId]; }; toggle = async () => { - console.log("toggle"); - const subscriptions = this.store.subscriptions; + const subscriptions = this.getSubscriptionsFromStorage(); if (this.isSubscribed()) { - console.log("Send channel unsubscribe"); + const endpoint = subscriptions[this.hubId].endpoint; + console.log("De-register push subscription with reticulum for endpoint " + endpoint); delete subscriptions[this.hubId]; @@ -43,9 +57,7 @@ export default class Subscriptions { console.log("Remove push subscription from browser"); } } else { - console.log("Get current"); let subscription = await this.registration.pushManager.getSubscription(); - console.log(subscription); if (!subscription) { const convertedVapidKey = urlBase64ToUint8Array(this.vapidPublicKey); @@ -56,11 +68,10 @@ export default class Subscriptions { }); } - console.log(JSON.stringify(subscription)); - const endpoint = subscription.endpoint; - subscriptions[this.hubId] = { endpoint }; + subscriptions[this.hubId] = JSON.parse(JSON.stringify(subscription)); + console.log("Register push subscription with reticulum"); } - this.store.update({ subscriptions }); + this.setSubscriptionsToStorage(subscriptions); }; }