Bläddra i källkod

HUE-6077 [frontend] Support for pause/resume of huePubSub topics

Enrico Berti 8 år sedan
förälder
incheckning
f558fa6dfb
1 ändrade filer med 33 tillägg och 5 borttagningar
  1. 33 5
      desktop/core/src/desktop/static/desktop/js/hue.utils.js

+ 33 - 5
desktop/core/src/desktop/static/desktop/js/hue.utils.js

@@ -423,12 +423,16 @@ var huePubSub = (function () {
   var hOP = topics.hasOwnProperty;
 
   return {
-    subscribe: function (topic, listener) {
+    subscribe: function (topic, listener, app) {
       if (!hOP.call(topics, topic)) {
         topics[topic] = [];
       }
 
-      var index = topics[topic].push(listener) - 1;
+      var index = topics[topic].push({
+        listener: listener,
+        app: app,
+        status: 'running'
+      }) - 1;
 
       return {
         remove: function () {
@@ -436,11 +440,11 @@ var huePubSub = (function () {
         }
       };
     },
-    subscribeOnce: function (topic, listener) {
+    subscribeOnce: function (topic, listener, app) {
       var ephemeral = this.subscribe(topic, function () {
         listener.apply(listener, arguments);
         ephemeral.remove();
-      });
+      }, app);
 
     },
     publish: function (topic, info) {
@@ -449,11 +453,35 @@ var huePubSub = (function () {
       }
 
       topics[topic].forEach(function (item) {
-        item(info);
+        if (item.status === 'running') {
+          item.listener(info);
+        }
       });
     },
     getTopics: function () {
       return topics;
+    },
+    pauseAppSubscribers: function (app) {
+      if (app) {
+        Object.keys(topics).forEach(function (topicName) {
+          topics[topicName].forEach(function (topic) {
+            if (topic.app === app) {
+              topic.status = 'paused';
+            }
+          });
+        });
+      }
+    },
+    resumeAppSubscribers: function (app) {
+      if (app) {
+        Object.keys(topics).forEach(function (topicName) {
+          topics[topicName].forEach(function (topic) {
+            if (topic.app === app) {
+              topic.status = 'running';
+            }
+          });
+        });
+      }
     }
   };
 })();