Compare commits
3 Commits
b1aeb06a09
...
4fa2a3ad9a
Author | SHA1 | Date | |
---|---|---|---|
4fa2a3ad9a | |||
557ee221d5 | |||
8e9d74652d |
@@ -25,7 +25,7 @@ class App(ThemedTk):
|
||||
self.__version__ = "0.1.0"
|
||||
|
||||
resize_window(self, 610, 400)
|
||||
self.resizable(False, True)
|
||||
self.resizable(True, True)
|
||||
self.minsize(610, 200)
|
||||
|
||||
self.title("Stardew Sync")
|
||||
@@ -63,7 +63,7 @@ class App(ThemedTk):
|
||||
def frame_saves(self):
|
||||
self.grid_rowconfigure(0, weight=1)
|
||||
self.grid_columnconfigure(1, weight=1)
|
||||
self.frame_saves_saves = requests.get(f'{configGet("address")}/saves?only_ids=True', headers={"apikey": configGet("apikey")}, verify=not configGet("allow_self_signed"))
|
||||
self.frame_saves_saves = requests.get(f'{configGet("address")}/saves?only_ids=True&sort={(configGet("prefer_saves").split())[1]}', headers={"apikey": configGet("apikey")}, verify=not configGet("allow_self_signed"))
|
||||
if self.frame_saves_saves.status_code == 200 and isinstance(self.frame_saves_saves.json(), list) is True and len(self.frame_saves_saves.json()) > 0:
|
||||
self.frame_saves_object = FrameSaves(self, self.frame_saves_saves.json(), vscroll=True)
|
||||
else:
|
||||
|
@@ -1,4 +1,4 @@
|
||||
from tkinter import NSEW, Canvas, Event, ttk
|
||||
from tkinter import E, N, NSEW, S, Canvas, Event, ttk
|
||||
|
||||
from classes.custom.themed_frame import ThemedFrame
|
||||
|
||||
@@ -33,6 +33,8 @@ class ScrollableFrame(ThemedFrame):
|
||||
self.scroll_speed = scroll_speed
|
||||
|
||||
self.master_frame = ThemedFrame(master)
|
||||
# self.master_frame["borderwidth"] = 1
|
||||
# self.master_frame["relief"] = "solid"
|
||||
self.master_frame.grid_rowconfigure(0, weight=1)
|
||||
self.master_frame.grid_columnconfigure(0, weight=1)
|
||||
self.dummy_canvas = Canvas(self.master_frame, highlightthickness=0, **kwargs)
|
||||
@@ -41,7 +43,7 @@ class ScrollableFrame(ThemedFrame):
|
||||
# Create the 2 scrollbars
|
||||
if vscroll:
|
||||
self.v_scrollbar = ttk.Scrollbar(self.master_frame, orient="vertical", command=self.dummy_canvas.yview, **scrollbar_kwargs)
|
||||
self.v_scrollbar.grid(row=0, column=1, sticky=NSEW)
|
||||
self.v_scrollbar.grid(row=0, column=1, sticky=N+S+E)
|
||||
self.dummy_canvas.configure(yscrollcommand=self.v_scrollbar.set)
|
||||
if hscroll:
|
||||
self.h_scrollbar = ttk.Scrollbar(self.master_frame, orient="horizontal", command=self.dummy_canvas.xview, **scrollbar_kwargs)
|
||||
|
@@ -9,7 +9,7 @@ import requests
|
||||
|
||||
from classes.custom.themed_frame import ThemedFrame
|
||||
from modules.logger import logger
|
||||
from modules.utils import configGet, configSet
|
||||
from modules.utils import configGet, configSet, osname
|
||||
|
||||
|
||||
class FrameDevice(ThemedFrame):
|
||||
@@ -18,17 +18,19 @@ class FrameDevice(ThemedFrame):
|
||||
|
||||
super().__init__(master, style="Card.TFrame", **kwargs)
|
||||
|
||||
self.widget_width = 47 if osname == "nt" else 42
|
||||
|
||||
self.grid_columnconfigure(0, weight=1)
|
||||
self.grid_columnconfigure(1, weight=3)
|
||||
self.grid_columnconfigure(2, weight=3)
|
||||
|
||||
self.name = device_dict["name"]
|
||||
|
||||
self.title = ttk.Label(self, text=self.name, font=("SunValleyBodyStrongFont", 12, "bold"), justify=LEFT, width=46)
|
||||
self.title = ttk.Label(self, text=self.name, font=("SunValleyBodyStrongFont", 12, "bold"), justify=LEFT, width=self.widget_width)
|
||||
self.title.grid(column=0, row=0, padx=9, pady=9, sticky=W)
|
||||
|
||||
last_upload = "N/A" if device_dict["last_save"] == 0 else datetime.utcfromtimestamp(device_dict["last_save"]).strftime("%d.%m.%Y %H:%M")
|
||||
self.description = ttk.Label(self, text=f'OS: {device_dict["os"]}\nClient: {device_dict["client"]}\nLast upload: {last_upload}', width=46)
|
||||
self.description = ttk.Label(self, text=f'OS: {device_dict["os"]}\nClient: {device_dict["client"]}\nLast upload: {last_upload}', width=self.widget_width)
|
||||
self.description.grid(column=0, row=1, padx=9, pady=9, sticky=W)
|
||||
|
||||
self.buttons = ThemedFrame(self)
|
||||
@@ -94,7 +96,7 @@ class FrameDevice(ThemedFrame):
|
||||
if isinstance(widget, ttk.Entry):
|
||||
widget.destroy()
|
||||
|
||||
device_title = ttk.Label(self, text=self.name, font=("SunValleyBodyStrongFont", 12, "bold"), justify=LEFT, width=46)
|
||||
device_title = ttk.Label(self, text=self.name, font=("SunValleyBodyStrongFont", 12, "bold"), justify=LEFT, width=self.widget_width)
|
||||
device_title.grid(column=0, row=0, padx=9, pady=9, sticky=W)
|
||||
|
||||
button_device_rename_action = partial(self.rename)
|
||||
@@ -117,7 +119,7 @@ class FrameDevice(ThemedFrame):
|
||||
if isinstance(widget, ttk.Entry):
|
||||
widget.destroy()
|
||||
|
||||
device_title = ttk.Label(self, text=self.name, font=("SunValleyBodyStrongFont", 12, "bold"), justify=LEFT, width=46)
|
||||
device_title = ttk.Label(self, text=self.name, font=("SunValleyBodyStrongFont", 12, "bold"), justify=LEFT, width=self.widget_width)
|
||||
device_title.grid(column=0, row=0, padx=9, pady=9, sticky=W)
|
||||
|
||||
button_device_rename_action = partial(self.rename)
|
||||
|
@@ -2,6 +2,7 @@ from datetime import datetime, timezone
|
||||
from tkinter import LEFT, NSEW, Misc, S, W, ttk
|
||||
|
||||
from classes.custom.themed_frame import ThemedFrame
|
||||
from modules.utils import osname
|
||||
|
||||
|
||||
class FrameSave(ThemedFrame):
|
||||
@@ -10,14 +11,16 @@ class FrameSave(ThemedFrame):
|
||||
|
||||
super().__init__(master, style="Card.TFrame", **kwargs)
|
||||
|
||||
self.widget_width = 47 if osname == "nt" else 42
|
||||
|
||||
self.grid_columnconfigure(0, weight=1)
|
||||
self.grid_columnconfigure(1, weight=3)
|
||||
self.grid_columnconfigure(2, weight=3)
|
||||
|
||||
self.title = ttk.Label(self, text=save_dict["data"]["farmer"], font=("SunValleyBodyStrongFont", 12, "bold"), justify=LEFT, width=46)
|
||||
self.title = ttk.Label(self, text=save_dict["data"]["farmer"], font=("SunValleyBodyStrongFont", 12, "bold"), justify=LEFT, width=self.widget_width)
|
||||
self.title.grid(column=0, row=0, padx=9, pady=9, sticky=W)
|
||||
|
||||
self.description = ttk.Label(self, text=f'Money: {save_dict["data"]["money"]}\nGame version: {save_dict["data"]["game_version"]}\nID: {save_dict["id"]}', width=46)
|
||||
self.description = ttk.Label(self, text=f'Money: {save_dict["data"]["money"]}\nGame version: {save_dict["data"]["game_version"]}\nID: {save_dict["id"]}', width=self.widget_width)
|
||||
self.description.grid(column=0, row=1, padx=9, pady=9, sticky=W)
|
||||
|
||||
self.buttons = ThemedFrame(self)
|
||||
@@ -25,7 +28,7 @@ class FrameSave(ThemedFrame):
|
||||
self.buttons.grid_columnconfigure(0, weight=1)
|
||||
|
||||
upload_date = datetime.utcfromtimestamp(save_dict["date"]).replace(tzinfo=timezone.utc).astimezone(tz=None)
|
||||
self.last_upload = ttk.Label(self.buttons, text=f'{upload_date.strftime("%A, %d %b %Y")}\nUploaded at {upload_date.strftime("%H:%M")} by {save_dict["device"]}', font=("SunValleyBodyFont", 8), justify=LEFT, width=46)
|
||||
self.last_upload = ttk.Label(self.buttons, text=f'{upload_date.strftime("%A, %d %b %Y")}\nUploaded at {upload_date.strftime("%H:%M")} by {save_dict["device"]}', font=("SunValleyBodyFont", 8), justify=LEFT, width=self.widget_width)
|
||||
self.last_upload.grid(column=0, row=0, sticky=W+S)
|
||||
|
||||
# self.button_device_rename_action = partial(self.rename)
|
||||
@@ -34,4 +37,10 @@ class FrameSave(ThemedFrame):
|
||||
|
||||
#self.button_device_delete_action = partial(self.delete)
|
||||
self.button_device_delete = ttk.Button(self.buttons, text="Synchronize", style="Accent.TButton", width=11) #, command=self.button_device_delete_action)
|
||||
self.button_device_delete.grid(column=1, row=0, sticky=W)
|
||||
self.button_device_delete.grid(column=1, row=0, sticky=W)
|
||||
|
||||
def convert_date(self, year: int, month: int, day: int) -> str:
|
||||
pass
|
||||
|
||||
def convert_playtime(self, seconds: int) -> str:
|
||||
pass
|
@@ -1,5 +1,5 @@
|
||||
from os import path, walk
|
||||
from tkinter import NSEW, ttk
|
||||
from tkinter import E, NSEW, W, ttk
|
||||
import xmltodict
|
||||
|
||||
from ttkthemes import ThemedTk
|
||||
@@ -21,6 +21,9 @@ class FrameSaves(ScrollableFrame):
|
||||
self.saves = saves
|
||||
self.saves_local = []
|
||||
|
||||
# self["borderwidth"] = 1
|
||||
# self["relief"] = "solid"
|
||||
|
||||
for subdir, dirs, files in walk(configGet("saves_location")):
|
||||
try:
|
||||
for dir in dirs:
|
||||
@@ -66,7 +69,7 @@ class FrameSaves(ScrollableFrame):
|
||||
for save in self.saves:
|
||||
|
||||
save_frame = FrameSave(self, save_dict=save)
|
||||
save_frame.grid(column=0, row=i, pady=9, padx=9, sticky=NSEW)
|
||||
save_frame.grid(column=0, row=i, pady=9, padx=9, sticky=W+E)
|
||||
|
||||
i += 1
|
||||
|
||||
|
@@ -72,22 +72,37 @@ class FrameSettings(ThemedFrame):
|
||||
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=3, sticky=N+S+E+W, padx=9, pady=9)
|
||||
self.saves_frame.grid(column=1, row=3, sticky=NSEW, padx=9, pady=9)
|
||||
self.saves_frame.grid_columnconfigure(0, weight=1)
|
||||
self.saves_frame.grid_columnconfigure(1, weight=3)
|
||||
# self.saves_frame.grid_columnconfigure(1, weight=3)
|
||||
|
||||
self.saves_location_entry = ttk.Entry(self.saves_frame, width=30)
|
||||
self.saves_location_entry.grid(column=0, row=0, sticky=NSEW)
|
||||
self.saves_location_entry = ttk.Entry(self.saves_frame) #, width=30)
|
||||
self.saves_location_entry.grid(column=0, row=0, sticky=N+S+E+W)
|
||||
if configGet("saves_location") is not None:
|
||||
self.saves_location_entry.insert(0, configGet("saves_location"))
|
||||
|
||||
self.saves_location_divider = ttk.Separator(self.saves_frame, orient="vertical")
|
||||
self.saves_location_divider.grid(column=1, row=0, padx=3)
|
||||
|
||||
self.saves_location_button = ttk.Button(self.saves_frame, text="Browse", width=6, command=lambda:self.select_location(self.saves_location_entry))
|
||||
self.saves_location_button.grid(column=1, row=0, sticky=E)
|
||||
self.saves_location_button.grid(column=2, row=0, sticky=E)
|
||||
# ==============
|
||||
|
||||
# Saves preference
|
||||
self.saves_preference_label = ttk.Label(self, text="Saves preference:")
|
||||
self.saves_preference_label.grid(column=0, row=4, sticky=W, padx=9, pady=9)
|
||||
|
||||
self.default_preference = "Latest upload " if configGet("prefer_saves") == "latest upload" else "Latest progress "
|
||||
|
||||
self.chosen_preference = StringVar()
|
||||
self.preferences = ("Latest upload ", "Latest progress ")
|
||||
self.saves_preference_button = ttk.OptionMenu(self, self.chosen_preference, self.default_preference, *self.preferences, direction="below")
|
||||
self.saves_preference_button.grid(column=1, row=4, sticky=W, padx=9, pady=9)
|
||||
# ================
|
||||
|
||||
# Software theme
|
||||
self.saves_location_label = ttk.Label(self, text="Color theme:")
|
||||
self.saves_location_label.grid(column=0, row=4, sticky=W, padx=9, pady=9)
|
||||
self.saves_location_label.grid(column=0, row=5, sticky=W, padx=9, pady=9)
|
||||
|
||||
if configGet("dark_mode_auto") is True:
|
||||
self.default_theme = "Auto "
|
||||
@@ -97,17 +112,17 @@ 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=4, sticky=W, padx=9, pady=9)
|
||||
self.saves_location_button.grid(column=1, row=5, sticky=W, padx=9, pady=9)
|
||||
# ==============
|
||||
|
||||
self.buttons_frame = ThemedFrame(self)
|
||||
self.buttons_frame.grid(column=0, columnspan=2, row=5, sticky=NSEW, padx=9, pady=9)
|
||||
self.buttons_frame.grid(column=0, columnspan=2, row=6, 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)
|
||||
self.validate_button.grid(column=0, row=0, sticky=E, padx=9)
|
||||
# self.validate_button = ttk.Button(self.buttons_frame, text="Validate", width=11, command=self.validate_configuration)
|
||||
# self.validate_button.grid(column=0, row=0, sticky=E, padx=9)
|
||||
|
||||
self.save_button = ttk.Button(self.buttons_frame, text="Save", style="Accent.TButton", width=11, state="disabled", command=self.save_configuration)
|
||||
self.save_button = ttk.Button(self.buttons_frame, text="Save", style="Accent.TButton", width=11, command=self.validate_configuration)
|
||||
self.save_button.grid(column=1, row=0, sticky=E)
|
||||
|
||||
def change_theme(self, *args):
|
||||
@@ -175,9 +190,11 @@ class FrameSettings(ThemedFrame):
|
||||
else:
|
||||
configSet(["dark_mode"], False)
|
||||
|
||||
# messagebox.showinfo(title="Configuration saved", message="Your client's configuration has been saved")
|
||||
configSet(["prefer_saves"], self.chosen_preference.get().strip().lower())
|
||||
|
||||
self.save_button.state(["disabled"])
|
||||
messagebox.showinfo(title="Configuration saved", message="Your client's configuration has been saved")
|
||||
|
||||
# self.save_button.state(["disabled"])
|
||||
|
||||
self.master.item_saves.state(["!disabled"])
|
||||
self.master.item_devices.state(["!disabled"])
|
||||
@@ -231,6 +248,8 @@ class FrameSettings(ThemedFrame):
|
||||
# return
|
||||
# # =========================
|
||||
|
||||
self.save_button.state(["!disabled"])
|
||||
# self.save_button.state(["!disabled"])
|
||||
|
||||
self.save_configuration()
|
||||
|
||||
# messagebox.showinfo(title="Configuration completed", message="Your client is now configured and ready to use!")
|
Reference in New Issue
Block a user