From f5a8b16a7f63d180cd8597c094977a4efc81d7b8 Mon Sep 17 00:00:00 2001 From: Christoph Stahl Date: Mon, 13 Nov 2023 19:11:20 +0100 Subject: [PATCH] gui can now launch client and server (almost there) --- pyproject.toml | 3 + syng/client.py | 7 +- syng/gui.py | 141 ++++++++++++++++++++++++++++++++------ syng/sources/__init__.py | 3 +- syng/sources/filebased.py | 2 +- syng/static/syng.png | Bin 0 -> 43591 bytes 6 files changed, 133 insertions(+), 23 deletions(-) create mode 100644 syng/static/syng.png diff --git a/pyproject.toml b/pyproject.toml index 2cf4967..7b7f246 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,6 +10,7 @@ include = ["syng/static"] [tool.poetry.scripts] syng-client = "syng.client:main" syng-server = "syng.server:main" +syng-gui = "syng.gui:main" syng-shell = "syng.webclientmockup:main" [tool.poetry.dependencies] @@ -27,6 +28,8 @@ qrcode = "^7.4.2" pymediainfo = "^6.1.0" pyyaml = "^6.0.1" async-tkinter-loop = "^0.9.2" +tkcalendar = "^1.6.1" +tktimepicker = "^2.0.2" [build-system] requires = ["poetry-core"] diff --git a/syng/client.py b/syng/client.py index ea27b23..f5da742 100644 --- a/syng/client.py +++ b/syng/client.py @@ -65,6 +65,8 @@ currentLock: asyncio.Semaphore = asyncio.Semaphore(0) def default_config() -> dict[str, Optional[int | str]]: return { + "server": "http://localhost:8080", + "room": "ABCD", "preview_duration": 3, "secret": None, "last_song": None, @@ -416,6 +418,9 @@ async def aiomain() -> None: """ pass +def create_async_and_start_client(config): + asyncio.run(start_client(config)) + def main() -> None: """Entry point for the syng-client script.""" @@ -443,7 +448,7 @@ def main() -> None: if args.server: config["config"] |= {"server": args.server} - asyncio.run(start_client(config)) + create_async_and_start_client(config) if __name__ == "__main__": diff --git a/syng/gui.py b/syng/gui.py index dda9ebf..3803b87 100644 --- a/syng/gui.py +++ b/syng/gui.py @@ -1,19 +1,57 @@ import asyncio +from datetime import datetime, date, time +import os import builtins from functools import partial import webbrowser +import PIL from yaml import load, Loader +import multiprocessing import customtkinter import qrcode import secrets import string -from tkinter import filedialog -from async_tkinter_loop import async_handler, async_mainloop -from async_tkinter_loop.mixins import AsyncCTk +from tkinter import PhotoImage, filedialog +from tkcalendar import Calendar +from tktimepicker import SpinTimePickerOld, AnalogPicker, AnalogThemes +from tktimepicker import constants -from .client import default_config, start_client +from .client import create_async_and_start_client, default_config, start_client from .sources import available_sources +from .server import main as server_main + +class DateAndTimePickerWindow(customtkinter.CTkToplevel): + def __init__(self, parent, input_field): + super().__init__(parent) + self.calendar = Calendar(self) + self.calendar.pack(expand=True, fill="both") + self.timepicker = AnalogPicker(self, type=constants.HOURS12) + theme = AnalogThemes(self.timepicker) + theme.setDracula() + # self.timepicker.addAll(constants.HOURS24) + self.timepicker.pack(expand=True, fill="both") + + button = customtkinter.CTkButton(self, text="Ok", command=partial(self.insert, input_field)) + button.pack(expand=True, fill='x') + + def insert(self, input_field: customtkinter.CTkTextbox): + input_field.delete("0.0", "end") + selected_date = self.calendar.selection_get() + print(type(selected_date)) + if not isinstance(selected_date, date): + return + hours, minutes, ampm = self.timepicker.time() + if ampm == "PM": + hours = (hours + 12) % 24 + + selected_datetime = datetime.combine(selected_date, time(hours, minutes)) + input_field.insert("0.0", selected_datetime.isoformat()) + self.withdraw() + self.destroy() + + + class OptionFrame(customtkinter.CTkScrollableFrame): @@ -104,6 +142,35 @@ class OptionFrame(customtkinter.CTkScrollableFrame): self.choose_options[name].set(value) self.number_of_options += 1 + def open_date_and_time_picker(self, name, input_field): + if name not in self.date_and_time_pickers or not self.date_and_time_pickers[name].winfo_exists(): + self.date_and_time_pickers[name] = DateAndTimePickerWindow(self, input_field) + else: + self.date_and_time_pickers[name].focus() + + + def add_date_time_option(self, name, description, value): + self.add_option_label(description) + self.date_time_options[name] = None + input_and_button = customtkinter.CTkFrame(self) + input_and_button.grid(column=1, row=self.number_of_options, sticky="EW") + input_field = customtkinter.CTkTextbox(input_and_button, wrap="none", height=1) + input_field.pack(side="left", fill="x", expand=True) + try: + datetime.fromisoformat(value) + except TypeError: + value = "" + input_field.insert("0.0", value) + + button = customtkinter.CTkButton( + input_and_button, + text="...", + width=40, + command=partial(self.open_date_and_time_picker, name, input_field), + ) + button.pack(side="right") + self.number_of_options += 1 + def __init__(self, parent): super().__init__(parent) self.columnconfigure((1,), weight=1) @@ -112,6 +179,8 @@ class OptionFrame(customtkinter.CTkScrollableFrame): self.choose_options = {} self.bool_options = {} self.list_options = {} + self.date_time_options = {} + self.date_and_time_pickers = {} def get_config(self): config = {} @@ -173,9 +242,10 @@ class GeneralConfig(OptionFrame): ["forced", "optional", "none"], str(config["waiting_room_policy"]).lower(), ) - self.add_string_option( - "last_song", "Time of last song\nin ISO-8601", config["last_song"] - ) + # self.add_string_option( + # "last_song", "Time of last song\nin ISO-8601", config["last_song"] + # ) + self.add_date_time_option("last_song", "Time of last song", config["last_song"]) self.add_string_option( "preview_duration", "Preview Duration", config["preview_duration"] ) @@ -190,15 +260,37 @@ class GeneralConfig(OptionFrame): return config -class SyngGui(customtkinter.CTk, AsyncCTk): +class SyngGui(customtkinter.CTk): def loadConfig(self): filedialog.askopenfilename() + def on_close(self): + if self.server is not None: + self.server.kill() + + if self.client is not None: + self.client.kill() + + self.withdraw() + self.destroy() + def __init__(self): super().__init__(className="Syng") + self.protocol("WM_DELETE_WINDOW", self.on_close) - with open("syng-client.yaml") as cfile: - loaded_config = load(cfile, Loader=Loader) + rel_path = os.path.dirname(__file__) + img = PIL.ImageTk.PhotoImage(file=os.path.join(rel_path,"static/syng.png")) + self.wm_iconbitmap() + self.iconphoto(False, img) + + self.server = None + self.client = None + + try: + with open("syng-client.yaml") as cfile: + loaded_config = load(cfile, Loader=Loader) + except FileNotFoundError: + loaded_config = {} config = {"sources": {}, "config": default_config()} if "config" in loaded_config: config["config"] |= loaded_config["config"] @@ -222,10 +314,16 @@ class SyngGui(customtkinter.CTk, AsyncCTk): loadbutton.pack(side="left") startbutton = customtkinter.CTkButton( - fileframe, text="Start", command=self.start + fileframe, text="Start", command=self.start_client ) startbutton.pack(side="right") + startserverbutton = customtkinter.CTkButton( + fileframe, text="Start Server", command=self.start_server + ) + startserverbutton.pack(side="right") + + open_web_button = customtkinter.CTkButton( fileframe, text="Open Web", command=self.open_web ) @@ -266,8 +364,7 @@ class SyngGui(customtkinter.CTk, AsyncCTk): self.updateQr() - @async_handler - async def start(self): + def start_client(self): sources = {} for source, tab in self.tabs.items(): sources[source] = tab.get_config() @@ -275,8 +372,14 @@ class SyngGui(customtkinter.CTk, AsyncCTk): general_config = self.general_config.get_config() config = {"sources": sources, "config": general_config} - print(config) - await start_client(config) + # print(config) + self.client = multiprocessing.Process(target=create_async_and_start_client, args=(config,)) + self.client.start() + + def start_server(self): + self.server = multiprocessing.Process(target=server_main) + self.server.start() + def open_web(self): config = self.general_config.get_config() @@ -303,11 +406,9 @@ class SyngGui(customtkinter.CTk, AsyncCTk): self.changeQr(server + room) -# async def main(): -# gui = SyngGui() -# await gui.run() +def main(): + SyngGui().mainloop() if __name__ == "__main__": - # asyncio.run(main()) - SyngGui().async_mainloop() + main() diff --git a/syng/sources/__init__.py b/syng/sources/__init__.py index b57aefc..976615f 100644 --- a/syng/sources/__init__.py +++ b/syng/sources/__init__.py @@ -26,5 +26,6 @@ def configure_sources(configs: dict[str, Any]) -> dict[str, Source]: configured_sources = {} for source, config in configs.items(): if source in available_sources: - configured_sources[source] = available_sources[source](config) + if config["enabled"]: + configured_sources[source] = available_sources[source](config) return configured_sources diff --git a/syng/sources/filebased.py b/syng/sources/filebased.py index 64577e2..dc59be0 100644 --- a/syng/sources/filebased.py +++ b/syng/sources/filebased.py @@ -19,7 +19,7 @@ class FileBasedSource(Source): "extensions": ( list, "List of filename extensions\n(mp3+cdg, mp4, ...)", - "mp3+cdg", + ["mp3+cdg"], ) } diff --git a/syng/static/syng.png b/syng/static/syng.png new file mode 100644 index 0000000000000000000000000000000000000000..f60bac32ed97c20fc84a596e86e1260a83cfade6 GIT binary patch literal 43591 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 literal 0 HcmV?d00001