From ae5d82ce6310759620160e0ec65dc1aa6b690257 Mon Sep 17 00:00:00 2001
From: Christoph Stahl <christoph.stahl@tu-dortmund.de>
Date: Mon, 18 Dec 2023 21:58:12 +0100
Subject: [PATCH] Some fixups

---
 syng/client.py | 31 ++++++++++++++++++++++---------
 syng/gui.py    |  5 ++++-
 syng/server.py |  8 ++++++--
 3 files changed, 32 insertions(+), 12 deletions(-)

diff --git a/syng/client.py b/syng/client.py
index 3017eb6..3e7bd2a 100644
--- a/syng/client.py
+++ b/syng/client.py
@@ -4,17 +4,15 @@ Module for the playback client.
 Excerp from the help::
 
     usage: client.py [-h] [--room ROOM] [--secret SECRET] \
-            [--config-file CONFIG_FILE] server
-
-    positional arguments:
-      server
+            [--config-file CONFIG_FILE] [--server server]
 
     options:
       -h, --help            show this help message and exit
-      --room ROOM, -r ROOM
+      --room ROOM, -r ROOM 
       --secret SECRET, -s SECRET
       --config-file CONFIG_FILE, -C CONFIG_FILE
       --key KEY, -k KEY
+      --server
 
 The config file should be a yaml file in the following style::
 
@@ -25,11 +23,18 @@ The config file should be a yaml file in the following style::
           configuration for SOURCE
         ...
       config:
-        configuration for the client
+        server: ...
+        room: ...
+        preview_duration: ...
+        secret: ...
+        last_song: ...
+        waiting_room_policy: ..
+
 """
 import asyncio
 import datetime
 import logging
+import os
 import secrets
 import string
 import tempfile
@@ -39,6 +44,7 @@ from dataclasses import dataclass
 from dataclasses import field
 from traceback import print_exc
 from typing import Any, Optional
+import platformdirs
 
 import qrcode
 
@@ -425,14 +431,21 @@ def main() -> None:
 
     parser.add_argument("--room", "-r")
     parser.add_argument("--secret", "-s")
-    parser.add_argument("--config-file", "-C", default="syng-client.yaml")
+    parser.add_argument(
+        "--config-file",
+        "-C",
+        default=f"{os.path.join(platformdirs.user_config_dir('syng'), 'config.yaml')}",
+    )
     parser.add_argument("--key", "-k", default=None)
     parser.add_argument("--server", "-S")
 
     args = parser.parse_args()
 
-    with open(args.config_file, encoding="utf8") as file:
-        config = load(file, Loader=Loader)
+    try:
+        with open(args.config_file, encoding="utf8") as file:
+            config = load(file, Loader=Loader)
+    except FileNotFoundError:
+        config = {}
 
     if "config" not in config:
         config["config"] = {}
diff --git a/syng/gui.py b/syng/gui.py
index dc963ae..67b8c07 100644
--- a/syng/gui.py
+++ b/syng/gui.py
@@ -300,9 +300,11 @@ class SyngGui(customtkinter.CTk):  # type:ignore
     def on_close(self) -> None:
         if self.syng_server is not None:
             self.syng_server.kill()
+            self.syng_server.join()
 
         if self.syng_client is not None:
-            self.syng_client.kill()
+            self.syng_client.terminate()
+            self.syng_client.join()
 
         self.withdraw()
         self.destroy()
@@ -422,6 +424,7 @@ class SyngGui(customtkinter.CTk):  # type:ignore
             self.startbutton.configure(text="Stop")
         else:
             self.syng_client.terminate()
+            self.syng_client.join()
             self.syng_client = None
             self.startbutton.configure(text="Save and Start")
 
diff --git a/syng/server.py b/syng/server.py
index 7c33302..76cbfb2 100644
--- a/syng/server.py
+++ b/syng/server.py
@@ -125,6 +125,9 @@ class State:
     :type sid: str
     :param client: The config for the playback client
     :type client: Client
+    :param last_seen: Timestamp of the last connected client. Used to determine
+        if a room is still in use.
+    :type last_seen: datetime
     """
 
     queue: Queue
@@ -156,7 +159,6 @@ async def send_state(state: State, sid: str) -> None:
     """
 
     safe_config = {k: v for k, v in state.client.config.items() if k not in ["secret", "key"]}
-    print(safe_config)
 
     await sio.emit(
         "state",
@@ -1085,10 +1087,12 @@ def main() -> None:
 
     :rtype: None
     """
+
+    root_path = os.path.join(os.path.dirname(__file__), "static")
     parser = ArgumentParser()
     parser.add_argument("--host", "-H", default="localhost")
     parser.add_argument("--port", "-p", type=int, default=8080)
-    parser.add_argument("--root-folder", "-r", default="syng/static/")
+    parser.add_argument("--root-folder", "-r", default=root_path)
     parser.add_argument("--registration-keyfile", "-k", default=None)
     args = parser.parse_args()