implement remaining config options
[ppt-control.git] / ppt_control / ppt_control.py
index f942b328f2c2a637ef94015b184a54fc1eaa9941..5ff80efbee1277b7dfad8630091a5933565cac62 100755 (executable)
@@ -40,7 +40,6 @@ global ws_label
 global http_server\r
 scheduler = None\r
 current_slideshow = None\r
-CACHEDIR = r'''C:\Windows\Temp\ppt-cache'''\r
 interface_root = None\r
 CONFIG_FILE = r'''..\ppt-control.ini'''\r
 LOGFILE = r'''..\ppt-control.log'''\r
@@ -81,7 +80,7 @@ class Handler(server.SimpleHTTPRequestHandler):
             black = 0\r
             if current_slideshow:\r
                 try:\r
-                    path = CACHEDIR + "\\" + current_slideshow.name()\r
+                    path = config.prefs["Main"]["cache"] + "\\" + current_slideshow.name()\r
                 except Exception as e:\r
                     path = os.path.join(os.path.dirname(os.path.realpath(__file__)), r'''\static\black.jpg''') + '/'\r
                     logger.warning("Failed to get current slideshow name: ", e)\r
@@ -103,7 +102,7 @@ class Handler(server.SimpleHTTPRequestHandler):
 \r
 def run_http():\r
     global http_server\r
-    http_server = server.HTTPServer(("", 80), Handler)\r
+    http_server = server.HTTPServer((config.prefs["HTTP"]["interface"], config.prefs.getint("HTTP", "port")), Handler)\r
     http_server.serve_forever()\r
 \r
 STATE_DEFAULT = {"connected": 0, "current": 0, "total": 0, "visible": 0, "name": ""}\r
@@ -190,7 +189,6 @@ async def ws_receive(websocket, path):
                 notify_state()\r
             else:\r
                 logger.error("Received unnsupported event: {}", data)\r
-            message = ""\r
     finally:\r
         USERS.remove(websocket)\r
 \r
@@ -209,7 +207,7 @@ def run_ws():
     ws_queue = asyncio.Queue()\r
     global loop\r
     loop = asyncio.get_event_loop()\r
-    start_server = websockets.serve(ws_handler, "0.0.0.0", 5678, ping_interval=None)\r
+    start_server = websockets.serve(ws_handler, config.prefs["WebSocket"]["interface"], config.prefs.getint("WebSocket", "port"), ping_interval=None)\r
     asyncio.get_event_loop().run_until_complete(start_server)\r
     asyncio.get_event_loop().run_forever()\r
 \r
@@ -236,7 +234,7 @@ def start_ws():
     logger.info("Started websocket server")\r
 \r
 class Slideshow:\r
-    def __init__(self, instance):\r
+    def __init__(self, instance, blackwhite):\r
         self.instance = instance\r
         if self.instance is None:\r
             raise ValueError("PPT instance cannot be None")\r
@@ -249,6 +247,8 @@ class Slideshow:
             raise ValueError("PPT instance has no  active presentation")\r
         self.presentation = self.instance.ActivePresentation\r
 \r
+        self.blackwhite = blackwhite\r
+\r
         self.export_current_next()\r
 \r
     def unload(self):\r
@@ -336,7 +336,10 @@ class Slideshow:
     def black(self):\r
         try:\r
             self.refresh()\r
-            self.view.State = 3\r
+            if self.blackwhite == "both" and self.view.State == 4:\r
+                self.view.state = 1\r
+            else:\r
+                self.view.State = 3\r
             self.export_current_next()\r
         except (ValueError, pywintypes.com_error):\r
             self.unload()\r
@@ -344,7 +347,10 @@ class Slideshow:
     def white(self):\r
         try:\r
             self.refresh()\r
-            self.view.State = 4\r
+            if self.blackwhite == "both" and self.view.State == 3:\r
+                self.view.state = 1\r
+            else:\r
+                self.view.State = 4\r
             self.export_current_next()\r
         except (ValueError, pywintypes.com_error):\r
             self.unload()\r
@@ -371,14 +377,14 @@ class Slideshow:
         self.export(self.current_slide() + 2)\r
 \r
     def export(self, slide):\r
-        destination = CACHEDIR + "\\" + self.name() + "\\" + str(slide) + ".jpg"\r
+        destination = config.prefs["Main"]["cache"] + "\\" + self.name() + "\\" + str(slide) + ".jpg"\r
         os.makedirs(os.path.dirname(destination), exist_ok=True)\r
         if not os.path.exists(destination) or time.time() - os.path.getmtime(destination) > config.prefs.getint("Main", "cache_timeout"):\r
             if slide <= self.total_slides():\r
                 attempts = 0\r
                 while attempts < 3:\r
                     try:\r
-                        self.presentation.Slides(slide).Export(destination, "JPG")\r
+                        self.presentation.Slides(slide).Export(destination, config.prefs["Main"]["cache_format"])\r
                         break\r
                     except:\r
                         pass\r
@@ -430,7 +436,7 @@ def connect_ppt():
         try:\r
             instance = get_ppt_instance()\r
             global current_slideshow\r
-            current_slideshow = Slideshow(instance)\r
+            current_slideshow = Slideshow(instance, config.prefs["Main"]["blackwhite"])\r
             STATE["connected"] = 1\r
             STATE["current"] = current_slideshow.current_slide()\r
             STATE["total"] = current_slideshow.total_slides()\r
@@ -565,7 +571,7 @@ def start_interface():
 \r
     #logging.getLogger("asyncio").setLevel(logging.ERROR)\r
     #logging.getLogger("asyncio.coroutines").setLevel(logging.ERROR)\r
-    #logging.getLogger("websockets.server").setLevel(logging.ERROR)\r
+    logging.getLogger("websockets.server").setLevel(logging.ERROR)\r
     #logging.getLogger("websockets.protocol").setLevel(logging.ERROR)\r
 \r
 \r