- Windows compatibility

- state retention added
This commit is contained in:
András Wiesner 2026-02-25 09:57:53 +01:00
parent b45fcb1c33
commit f06e974777
2 changed files with 85 additions and 16 deletions

16
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,16 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Debug SyncClient",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/sync_client.py",
"console": "integratedTerminal",
"args": []
}
]
}

View File

@ -1,12 +1,20 @@
import platform
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog
from tkinter import filedialog, messagebox
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import os
import requests
import json
class SyncClient:
@classmethod
def __convert_to_unix_path(cls, path: str) -> str:
if platform.system() == "Windows":
return path.replace("\\", "/").removeprefix("/")
else:
return path.removeprefix("/")
def start(self) -> None:
_sself = self
@ -67,7 +75,7 @@ class SyncClient:
params = {
"action": "upload",
"filename": filename,
"filename": SyncClient.__convert_to_unix_path(filename),
"type": self._get_file_type(filename),
"session_id": self.__id,
"session_key": self.__key
@ -90,7 +98,7 @@ class SyncClient:
params = {
"action": "delete",
"filename": filename,
"filename": SyncClient.__convert_to_unix_path(filename),
"type": self._get_file_type(filename),
"session_id": self.__id,
"session_key": self.__key
@ -122,8 +130,8 @@ class SyncClient:
params = {
"action": "move",
"filename": src,
"filename2": dst,
"filename": SyncClient.__convert_to_unix_path(src),
"filename2": SyncClient.__convert_to_unix_path(dst),
"type": self._get_file_type(dst),
"session_id": self.__id,
"session_key": self.__key
@ -142,8 +150,8 @@ class SyncClient:
def diriter(path, rel_path = "", types = [ "directory", "file" ]):
listing = []
for entry in os.scandir(path):
path = (rel_path + os.sep + entry.name).removeprefix("/")
name = entry.name.removeprefix("/")
path = (rel_path + os.sep + entry.name).removeprefix(os.sep)
name = entry.name.removeprefix(os.sep)
if entry.is_dir():
if "directory" in types:
listing.append({"type": "directory", "path": path, "name": name})
@ -172,8 +180,9 @@ class SyncClient:
# ------------------
class SyncClientGui:
SETTINGS_FILE = "settings.json"
def init_gui(self) -> None:
def __init_gui(self) -> None:
win = tk.Tk()
win.title("CodeCast Kliens")
win.geometry("400x120")
@ -234,7 +243,7 @@ class SyncClientGui:
def toggle_sync():
if not self.__sync_enabled:
self.__url = url_tf.get().strip()
self.__url = url_tf.get().strip().removesuffix("/") + "/sync"
self.__id = id_tf.get().strip()
self.__key = key_tf.get().strip()
@ -243,14 +252,51 @@ class SyncClientGui:
else:
self.stop_sync()
if self.__sync_enabled:
on_off_btn.config(text="Szinkronizálás KI")
state = tk.DISABLED
else:
on_off_btn.config(text="Szinkronizálás BE")
state = tk.NORMAL
dirsel_btn.configure(state=state)
url_tf.configure(state=state)
id_tf.configure(state=state)
key_tf.configure(state=state)
on_off_btn = ttk.Button(action_frame, text="Szinkronizálás BE", command=toggle_sync)
on_off_btn.pack(fill="x")
self.__url_tf = url_tf
self.__id_tf = id_tf
self.__key_tf = key_tf
self.__dirsel_btn = dirsel_btn
def __load_last_settings(self) -> None:
try:
with open(SyncClientGui.SETTINGS_FILE, "r") as sf:
settings = json.loads(sf.read())
self.__dirsel_btn.configure(text=settings.get("dir", "(nincs kiválasztva)"))
self.__dir = settings.get("dir", "")
self.__url_tf.insert(0, settings.get("url", ""))
self.__id_tf.insert(0, settings.get("id", ""))
self.__key_tf.insert(0, settings.get("key", ""))
except:
pass
def __save_settings(self) -> None:
with open(SyncClientGui.SETTINGS_FILE, "w") as sf:
settings = {
"dir": self.__dir,
"url": self.__url_tf.get(),
"id": self.__id_tf.get(),
"key": self.__key_tf.get(),
}
sf.write(json.dumps(settings))
def __init__(self) -> None:
self.__dir = ""
@ -259,7 +305,16 @@ class SyncClientGui:
self.__key = ""
self.__sc: SyncClient
self.__sync_enabled = False
self.init_gui()
self.__init_gui()
self.__load_last_settings()
def on_close():
self.__save_settings()
self.__win.destroy()
self.stop_sync()
self.__win.protocol("WM_DELETE_WINDOW", on_close)
def start_sync(self) -> None:
@ -282,8 +337,6 @@ class SyncClientGui:
def mainloop(self) -> None:
self.__win.mainloop()
self.stop_sync()
# ------------------
if __name__ == "__main__":