Add invw.org
[kiosk.git] / recipe_renderer_and_trigger.py
index 025d3c05983e244e4a055620610870d0eec7e037..9cf81b0e837297fc2acea2123f16353b2ab6890c 100644 (file)
@@ -13,9 +13,10 @@ import renderer
 import trigger
 
 
-logger = logging.getLogger(__file__)
+logger = logging.getLogger(__name__)
 
-RECIPE_PAGE = os.path.join(constants.pages_dir, "recipe_1_82400.html")
+RECIPE_PAGE = "recipe-unwrapped_1_82400.html"
+RECIPE_PATH = os.path.join(constants.pages_dir, RECIPE_PAGE)
 
 
 class RecipeTrigger(trigger.trigger):
@@ -44,12 +45,81 @@ class RecipeRenderer(renderer.abstaining_renderer):
             logger.debug(f"Read {url} from {self.url_location}, writing the page")
 
             if url and len(url) > 0:
-                with file_writer.file_writer(RECIPE_PAGE) as f:
-                    f.write('<IFRAME SRC="{url}"></IFRAME>')
+                with file_writer.file_writer(RECIPE_PATH) as f:
+                    f.write(
+                        """
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Current Recipe</title>
+    <style>
+      #recipe {
+          height: 100%;
+      }
+      html,
+      body {
+          height: 100%;
+          margin: 0;
+          padding: 0;
+      }
+    </style>
+    <script>
+      const sleep = (milliseconds) => {
+          return new Promise(resolve => setTimeout(resolve, milliseconds))
+      }
+
+      function iframeRef( frameRef ) {
+        return frameRef.contentWindow
+          ? frameRef.contentWindow.document
+          : frameRef.contentDocument
+      }
+
+      function countdown() {
+          setTimeout(
+              function() {
+                  var now = new Date();
+                  var deltaMs = now.getTime() - loadedDate.getTime();
+                  var totalMs = 120000;
+                  var remainingMs = (totalMs - deltaMs);
+
+                  if (remainingMs <= 0) {
+                      // Reload unconditionally every two minutes.
+                      window.location.reload(true);
+                  }
+
+                  // Get rid of the recipe title bar, it's too big.
+                  var recipe = iframeRef(document.getElementById('embedded'))
+                  recipe.getElementById('id_main_nav').style.visibility = 'hidden';
+
+                  // Brief sleep before doing it all over again.
+                  sleep(1000).then(() => {
+                      countdown();
+                  });
+              }, 1000)
+      }
+    </script>
+  </head>
+                       """
+                    )
+                    f.write(
+                        f"""
+  <body onload='javascript:loadedDate = new Date(); countdown();'>
+    <span>
+      <div id="recipe">
+        <IFRAME ID='embedded' WIDTH=100% HEIGHT=100% SRC="{url}"></IFRAME>
+      </div>
+    </span>
+  </body>
+</html>
+                       """
+                    )
                     triggered = True
 
         if not triggered:
-            file_utils.remove(RECIPE_PAGE)
-            logger.debug("Signaling the trigger")
+            logger.debug("We are no longer triggered.")
+            if file_utils.does_path_exist(RECIPE_PATH):
+                file_utils.remove(RECIPE_PATH)
+        else:
+            logger.debug("We are triggered.")
         globals.put("recipe_page_triggered", triggered)
         return True