global status_label\r
global http_label\r
global ws_label\r
+global reset_ppt_button\r
global http_server\r
scheduler = None\r
current_slideshow = None\r
ws_label = None\r
ws_daemon = None\r
http_server = None\r
+reset_ppt_button = None\r
\r
\r
class Handler(server.SimpleHTTPRequestHandler):\r
def __init__(self, *args, **kwargs):\r
super().__init__(*args, directory=os.path.dirname(os.path.realpath(__file__)) + r'''\static''')\r
\r
+ def log_request(self, code='-', size='-'):\r
+ return\r
+\r
+ \r
def translate_path(self, path):\r
"""Translate a /-separated PATH to the local filename syntax.\r
\r
try:\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
+ path = "black.jpg"\r
logger.warning("Failed to get current slideshow name: ", e)\r
else:\r
- path = os.path.join(os.path.dirname(os.path.realpath(__file__)), r'''\static\black.jpg''') + '/'\r
+ path = "black.jpg"\r
return path\r
words.pop(0)\r
else:\r
http_server = None\r
refresh_status()\r
start_http()\r
+ time.sleep(0.5)\r
refresh_status()\r
\r
def start_ws():\r
\r
def unload(self):\r
connect_ppt()\r
+ reset_ppt_button.config(state = tk.DISABLED)\r
\r
def refresh(self):\r
try:\r
attempts += 1\r
elif slide == self.total_slides() + 1:\r
try:\r
- shutil.copyfileobj(open(os.path.dirname(os.path.realpath(__file__)), r'''\static\black.jpg''', 'rb'), open(destination, 'wb'))\r
+ shutil.copyfileobj(open(os.path.dirname(os.path.realpath(__file__)) + r'''\static\black.jpg''', 'rb'), open(destination, 'wb'))\r
except Exception as e:\r
logger.warning("Failed to copy black slide: " + str(e))\r
else:\r
status_label.config(text="PowerPoint status: " + ("not " if not STATE["connected"] else "") + "connected")\r
http_label.config(text="HTTP server: " + ("not " if http_server is None else "") + "running")\r
#ws_label.config(text="WebSocket server: " + ("not " if ws_daemon is not None or not ws_daemon.is_alive() else "") + "running")\r
+ if reset_ppt_button is not None:\r
+ reset_ppt_button.config(state = tk.DISABLED if not STATE["connected"] else tk.NORMAL)\r
\r
def connect_ppt():\r
global STATE\r
global interface_root\r
interface_root = tk.Tk()\r
interface_root.protocol("WM_DELETE_WINDOW", on_closing)\r
- interface_root.iconphoto(False, tk.PhotoImage(file="static/icons/ppt.png"))\r
+ interface_root.iconphoto(False, tk.PhotoImage(file=os.path.dirname(os.path.realpath(__file__)) + r'''\static\icons\ppt.png'''))\r
interface_root.geometry("600x300+300+300")\r
app = Interface(interface_root)\r
interface_thread = threading.Thread(target=interface_root.mainloop())\r
global status_label\r
global http_label\r
global ws_label\r
+ global reset_ppt_button\r
self.parent.title("ppt-control")\r
self.style = ttk.Style()\r
#self.style.theme_use("default")\r
save_button.place(x=400, y=280)\r
\r
reset_ppt_button = ttk.Button(self, text="Reconnect", command=connect_ppt)\r
+ reset_ppt_button.config(state = tk.DISABLED)\r
reset_ppt_button.place(x=300, y=10)\r
\r
reset_http_button = ttk.Button(self, text="Restart", command=restart_http)\r
refresh_status()\r
\r
\r
+def exit_action(icon):\r
+ logger.debug("User requested shutdown")\r
+ icon.visible = False\r
+ icon.stop()\r
\r
def show_icon():\r
logger.debug("Starting system tray icon")\r
- menu = (pystray.MenuItem("Status", lambda: null_action(), enabled=False),\r
+ icon = pystray.Icon("ppt-control")\r
+ icon.menu = (pystray.MenuItem("Status", lambda: null_action(), enabled=False),\r
pystray.MenuItem("Restart", lambda: start()),\r
- pystray.MenuItem("Settings", lambda: open_settings()))\r
- icon = pystray.Icon("ppt-control", Image.open(os.path.dirname(os.path.realpath(__file__)) + r'''\static\icons\ppt.ico'''), "ppt-control", menu)\r
+ pystray.MenuItem("Stop", lambda: exit_action(icon)),\r
+ pystray.MenuItem("Settings", lambda: open_settings())\r
+ )\r
+ icon.icon = Image.open(os.path.dirname(os.path.realpath(__file__)) + r'''\static\icons\ppt.ico''')\r
+ icon.title = "ppt-control"\r
icon.visible = True\r
icon.run(setup=start)\r
\r
\r
# Start systray icon and server\r
show_icon()\r
+ sys.exit(0)\r
\r
if __name__ == "__main__":\r
start_interface()\r