]> git.immae.eu Git - github/bastienwirtz/homer.git/commitdiff
Refactors created function (splits logic for getting message) and adds timeout accord...
authorluixal <luixal@gmail.com>
Thu, 7 Jan 2021 20:23:13 +0000 (21:23 +0100)
committerluixal <luixal@gmail.com>
Thu, 7 Jan 2021 20:23:13 +0000 (21:23 +0100)
docs/configuration.md
src/components/Message.vue

index 93fa8989f6ee7df13be74d670fac973b39b0948e..8bff54f7889633b42ba6b423e350c743902d7cef 100644 (file)
@@ -69,12 +69,14 @@ message:
   # mapping: # allows to map fields from the remote format to the one expected by Homer
   #   title: 'id' # use value from field 'id' as title
   #   content: 'value' # value from field 'value' as content
+  # refreshInterval: 10000 # time interval to refresh message
   #
   # Real example using chucknorris.io for showing Chuck Norris facts as messages:
   # url: https://api.chucknorris.io/jokes/random
   # mapping:
   #   title: 'id'
   #   content: 'value'
+  # refreshInterval: 10000
   style: "is-warning"
   title: "Optional message!"
   icon: "fa fa-exclamation-triangle"
index df203ae2e846cabc727d55e5bf63a45cfc46bbcc..72106c25450761f95cbf8011608ad636b9ec3864 100644 (file)
@@ -29,20 +29,27 @@ export default {
   created: async function () {
     // Look for a new message if an endpoint is provided.
     this.message = Object.assign({}, this.item);
-    if (this.item && this.item.url) {
-      let fetchedMessage = await this.getMessage(this.item.url);
-      if (this.item.mapping) fetchedMessage = this.mapRemoteMessage(fetchedMessage);
-      // keep the original config value if no value is provided by the endpoint
-      for (const prop of ["title", "style", "content"]) {
-        if (prop in fetchedMessage && fetchedMessage[prop] !== null) {
-          this.message[prop] = fetchedMessage[prop];
-        }
-      }
-    }
+    await this.getMessage();
     this.show = this.message.title || this.message.content;
   },
+
   methods: {
-    getMessage: function (url) {
+    getMessage: async function() {
+      if (this.item && this.item.url) {
+        let fetchedMessage = await this.downloadMessage(this.item.url);
+        if (this.item.mapping) fetchedMessage = this.mapRemoteMessage(fetchedMessage);
+        // keep the original config value if no value is provided by the endpoint
+        for (const prop of ["title", "style", "content"]) {
+          if (prop in fetchedMessage && fetchedMessage[prop] !== null) {
+            this.message[prop] = fetchedMessage[prop];
+          }
+        }
+      }
+      console.log(this.item.refreshInterval);
+      if (this.item.refreshInterval) setTimeout(this.getMessage, this.item.refreshInterval);
+    },
+
+    downloadMessage: function (url) {
       return fetch(url).then(function (response) {
         if (response.status != 200) {
           return;