WIP: Welcome dialog added

This commit is contained in:
2023-01-24 15:27:07 +01:00
parent 67270252d2
commit 6add3ac976
4 changed files with 329 additions and 61 deletions

View File

@@ -46,6 +46,26 @@ class FrameErrorConnection(ThemedFrame):
self.button_settings.grid(column=1, row=0, padx=9, pady=9)
class FrameErrorFirstStart(ThemedFrame):
def __init__(self, master: ThemedTk, **kwargs) -> None:
super().__init__(master, **kwargs)
self.grid_columnconfigure(0, weight=1)
self.grid_rowconfigure(0, weight=2)
self.grid_rowconfigure(1, weight=2)
master.columnconfigure(1, weight=1)
self.label = ttk.Label(self, text="Setup completed")
self.label.grid(column=0, row=0, padx=9, pady=9, sticky=S)
self.button_settings = ttk.Button(self, text="Refresh", style="Accent.TButton", width=10, command=lambda:try_connecting(master))
self.button_settings.grid(column=0, row=1, sticky=N)
class FrameErrorSavesFolder(ThemedFrame):
def __init__(self, master: ThemedTk, **kwargs) -> None:

View File

@@ -27,33 +27,33 @@ class FrameSettings(ThemedFrame):
master.columnconfigure(1, weight=1)
# Name
self.name_label = ttk.Label(self, text="Name:")
self.name_label.grid(column=0, row=0, sticky=W, padx=9, pady=9)
# self.name_label = ttk.Label(self, text="Name:")
# self.name_label.grid(column=0, row=0, sticky=W, padx=9, pady=9)
self.name_entry = ttk.Entry(self)
self.name_entry.grid(column=1, row=0, sticky=N+S+E+W, padx=9, pady=9)
if configGet("name") is not None:
self.name_entry.insert(0, configGet("name"))
else:
self.name_entry.insert(0, str(platform.node()))
# self.name_entry = ttk.Entry(self)
# self.name_entry.grid(column=1, row=0, sticky=N+S+E+W, padx=9, pady=9)
# if configGet("name") is not None:
# self.name_entry.insert(0, configGet("name"))
# else:
# self.name_entry.insert(0, str(platform.node()))
# ====
# Address
self.address_label = ttk.Label(self, text="Address:")
self.address_label.grid(column=0, row=1, sticky=W, padx=9, pady=9)
self.address_label.grid(column=0, row=0, sticky=W, padx=9, pady=9)
self.address_entry = ttk.Entry(self)
self.address_entry.grid(column=1, row=1, sticky=N+S+E+W, padx=9, pady=9)
self.address_entry.grid(column=1, row=0, sticky=N+S+E+W, padx=9, pady=9)
if configGet("address") is not None:
self.address_entry.insert(0, configGet("address"))
# =======
# API Key
self.apikey_label = ttk.Label(self, text="API key:")
self.apikey_label.grid(column=0, row=2, sticky=W, padx=9, pady=9)
self.apikey_label.grid(column=0, row=1, sticky=W, padx=9, pady=9)
self.apikey_entry = ttk.Entry(self)
self.apikey_entry.grid(column=1, row=2, sticky=N+S+E+W, padx=9, pady=9)
self.apikey_entry.grid(column=1, row=1, sticky=N+S+E+W, padx=9, pady=9)
if configGet("apikey") is not None:
self.apikey_entry.insert(0, configGet("apikey"))
# =======
@@ -64,15 +64,15 @@ class FrameSettings(ThemedFrame):
else:
self.self_signed_check_bool = IntVar()
self.self_signed_check = ttk.Checkbutton(self, text="Allow self-signed certificates", variable=self.self_signed_check_bool)
self.self_signed_check.grid(column=1, row=3, sticky=W, padx=9, pady=9)
self.self_signed_check.grid(column=1, row=2, sticky=W, padx=9, pady=9)
# ===========
# Saves location
self.saves_location_label = ttk.Label(self, text="Saves location:")
self.saves_location_label.grid(column=0, row=4, sticky=W, padx=9, pady=9)
self.saves_location_label.grid(column=0, row=3, sticky=W, padx=9, pady=9)
self.saves_frame = ThemedFrame(self)
self.saves_frame.grid(column=1, row=4, sticky=N+S+E+W, padx=9, pady=9)
self.saves_frame.grid(column=1, row=3, sticky=N+S+E+W, padx=9, pady=9)
self.saves_frame.grid_columnconfigure(0, weight=1)
self.saves_frame.grid_columnconfigure(1, weight=3)
@@ -85,9 +85,9 @@ class FrameSettings(ThemedFrame):
self.saves_location_button.grid(column=1, row=0, sticky=E)
# ==============
# Saves location
# Software theme
self.saves_location_label = ttk.Label(self, text="Color theme:")
self.saves_location_label.grid(column=0, row=5, sticky=W, padx=9, pady=9)
self.saves_location_label.grid(column=0, row=4, sticky=W, padx=9, pady=9)
if configGet("dark_mode_auto") is True:
self.default_theme = "Auto "
@@ -97,11 +97,11 @@ class FrameSettings(ThemedFrame):
self.chosen_theme = StringVar()
self.themes = ("Auto ", "Light ", "Dark ")
self.saves_location_button = ttk.OptionMenu(self, self.chosen_theme, self.default_theme, *self.themes, direction="below", command=self.change_theme)
self.saves_location_button.grid(column=1, row=5, sticky=W, padx=9, pady=9)
self.saves_location_button.grid(column=1, row=4, sticky=W, padx=9, pady=9)
# ==============
self.buttons_frame = ThemedFrame(self)
self.buttons_frame.grid(column=0, columnspan=2, row=6, sticky=NSEW, padx=9, pady=9)
self.buttons_frame.grid(column=0, columnspan=2, row=5, sticky=NSEW, padx=9, pady=9)
self.buttons_frame.grid_columnconfigure(0, weight=1)
self.validate_button = ttk.Button(self.buttons_frame, text="Validate", width=11, command=self.validate_configuration)
@@ -143,24 +143,24 @@ class FrameSettings(ThemedFrame):
else:
self.address_text = None
# =========================
if self.name_entry.get().strip() == configGet("name"):
existing_device = requests.get(f'{self.address_entry.get()}/devices/{quote(configGet("name").encode("utf-8"))}', headers={"apikey": self.apikey_entry.get()}, verify=not bool(self.self_signed_check_bool.get()))
if existing_device.status_code != 200:
requests.post(f'{self.address_entry.get()}/devices?{urlencode({"name": quote(configGet("name").encode("utf-8")), "os": platform.system()+" "+platform.release(), "client": f"SyncTk {self.master.__version__}"})}', headers={"apikey": self.apikey_entry.get()}, verify=not bool(self.self_signed_check_bool.get()))
else:
if configGet("name") is not None:
existing_device_before = requests.get(f'{self.address_entry.get()}/devices/{quote(configGet("name").encode("utf-8"))}', headers={"apikey": self.apikey_entry.get()}, verify=not bool(self.self_signed_check_bool.get()))
if existing_device_before.status_code == 200:
requests.patch(f'{self.address_entry.get()}/devices/{quote(configGet("name").encode("utf-8"))}?{urlencode({"new_name": quote(self.name_entry.get().strip().encode("utf-8")), "os": platform.system()+" "+platform.release(), "client": f"SyncTk {self.master.__version__}"})}', headers={"apikey": self.apikey_entry.get()}, verify=not bool(self.self_signed_check_bool.get()))
else:
device_created = requests.post(f'{self.address_entry.get()}/devices?{urlencode({"name": quote(self.name_entry.get().strip().encode("utf-8")), "os": platform.system()+" "+platform.release(), "client": f"SyncTk {self.master.__version__}"})}', headers={"apikey": self.apikey_entry.get()}, verify=not bool(self.self_signed_check_bool.get()))
if device_created.status_code != 204:
messagebox.showerror(title="Name error", message=f"Could not register device in database using name '{self.name_entry.get().strip()}' with error:\n\n{device_created.json()}")
return
# =========================
# # =========================
# if self.name_entry.get().strip() == configGet("name"):
# existing_device = requests.get(f'{self.address_entry.get()}/devices/{quote(configGet("name").encode("utf-8"))}', headers={"apikey": self.apikey_entry.get()}, verify=not bool(self.self_signed_check_bool.get()))
# if existing_device.status_code != 200:
# requests.post(f'{self.address_entry.get()}/devices?{urlencode({"name": quote(configGet("name").encode("utf-8")), "os": platform.system()+" "+platform.release(), "client": f"SyncTk {self.master.__version__}"})}', headers={"apikey": self.apikey_entry.get()}, verify=not bool(self.self_signed_check_bool.get()))
# else:
# if configGet("name") is not None:
# existing_device_before = requests.get(f'{self.address_entry.get()}/devices/{quote(configGet("name").encode("utf-8"))}', headers={"apikey": self.apikey_entry.get()}, verify=not bool(self.self_signed_check_bool.get()))
# if existing_device_before.status_code == 200:
# requests.patch(f'{self.address_entry.get()}/devices/{quote(configGet("name").encode("utf-8"))}?{urlencode({"new_name": quote(self.name_entry.get().strip().encode("utf-8")), "os": platform.system()+" "+platform.release(), "client": f"SyncTk {self.master.__version__}"})}', headers={"apikey": self.apikey_entry.get()}, verify=not bool(self.self_signed_check_bool.get()))
# else:
# device_created = requests.post(f'{self.address_entry.get()}/devices?{urlencode({"name": quote(self.name_entry.get().strip().encode("utf-8")), "os": platform.system()+" "+platform.release(), "client": f"SyncTk {self.master.__version__}"})}', headers={"apikey": self.apikey_entry.get()}, verify=not bool(self.self_signed_check_bool.get()))
# if device_created.status_code != 204:
# messagebox.showerror(title="Name error", message=f"Could not register device in database using name '{self.name_entry.get().strip()}' with error:\n\n{device_created.json()}")
# return
# # =========================
configSet(["name"], self.name_entry.get().strip())
# configSet(["name"], self.name_entry.get().strip())
configSet(["address"], self.address_entry.get())
configSet(["apikey"], self.apikey_entry.get())
configSet(["allow_self_signed"], bool(self.self_signed_check_bool.get()))
@@ -184,10 +184,10 @@ class FrameSettings(ThemedFrame):
def validate_configuration(self):
if self.name_entry.get().strip() == "":
logger.error(f"Name {self.name_entry.get().strip()} is not a valid name")
messagebox.showerror(title="Name error", message="Provided device name is not valid. Please provide a valid one.")
return
# if self.name_entry.get().strip() == "":
# logger.error(f"Name {self.name_entry.get().strip()} is not a valid name")
# messagebox.showerror(title="Name error", message="Provided device name is not valid. Please provide a valid one.")
# return
if len(self.address_entry.get()) > 0:
if self.address_entry.get().endswith("/"):
@@ -222,14 +222,14 @@ class FrameSettings(ThemedFrame):
messagebox.showerror(title="Location error", message="Saves folder seems to be invalid. Please provide a valid directory path where Stardew Valley's save files (and folders) are stored.")
return
# =========================
if self.name_entry.get().strip() != configGet("name"):
existing_device_after = requests.get(f'{self.address_entry.get()}/devices/{self.name_entry.get().strip()}', headers={"apikey": self.apikey_entry.get()}, verify=not bool(self.self_signed_check_bool.get()))
if existing_device_after == 200:
logger.error(f"Device with name {self.name_entry.get().strip()} already exists")
messagebox.showerror(title="Name error", message=f"Device with name '{self.name_entry.get().strip()}' already exists on the server. Please choose another name or rename that device first.")
return
# =========================
# # =========================
# if self.name_entry.get().strip() != configGet("name"):
# existing_device_after = requests.get(f'{self.address_entry.get()}/devices/{self.name_entry.get().strip()}', headers={"apikey": self.apikey_entry.get()}, verify=not bool(self.self_signed_check_bool.get()))
# if existing_device_after == 200:
# logger.error(f"Device with name {self.name_entry.get().strip()} already exists")
# messagebox.showerror(title="Name error", message=f"Device with name '{self.name_entry.get().strip()}' already exists on the server. Please choose another name or rename that device first.")
# return
# # =========================
self.save_button.state(["!disabled"])