updated some stuff (not worthy of a vb!)

This commit is contained in:
rattatwinko
2025-04-17 18:49:33 +02:00
parent e3e581ccd8
commit 7a531dc92a
5 changed files with 179 additions and 146 deletions

View File

@@ -11,115 +11,112 @@ class TGTGOrdersApp:
self.parent = parent
self.frame = tk.Frame(self.parent, bg="#ffffff")
self.frame.pack(fill="both", expand=True)
self.notebook = ttk.Notebook(self.frame)
self.notebook.pack(fill="both", expand=True)
self.orders_tab = tk.Frame(self.notebook, bg="#ffffff")
self.notebook.add(self.orders_tab, text="Orders")
self.notebook.add(self.orders_tab, text="Bestellungen")
self.log_tab = tk.Frame(self.notebook, bg="#ffffff")
self.notebook.add(self.log_tab, text="Log")
self.notebook.add(self.log_tab, text="Protokoll")
self.log_text = tk.Text(self.log_tab, wrap=tk.WORD, height=15, font=("Arial", 10), bg="#f0f0f0")
self.log_text.pack(fill="both", expand=True, padx=10, pady=10)
self.order_frame = tk.Frame(self.orders_tab, bg="#ffffff")
self.order_frame.pack(fill="both", expand=True, padx=10, pady=10)
self.menu = Menu(self.parent)
self.parent.config(menu=self.menu)
self.filemenu = Menu(self.menu)
self.menu.add_cascade(label="File", menu=self.filemenu)
self.filemenu.add_command(label="Exit", command=self.exit_applet)
self.filemenu.add_command(label="Refetch", command=self.display_orders)
self.filemenu.add_command(label="Save Log", command=self.save_log)
self.menu.add_cascade(label="Datei", menu=self.filemenu)
self.filemenu.add_command(label="Beenden", command=self.exit_applet)
self.filemenu.add_command(label="Aktualisieren", command=self.display_orders)
self.filemenu.add_command(label="Protokoll speichern", command=self.save_log)
self.filemenu.add_separator()
self.filemenu.add_command(label="About", command=self.about)
self.filemenu.add_command(label="Über", command=self.about)
self.parent.after(1000, self.on_startup)
def log_message(self, message):
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
self.log_text.insert(tk.END, f"{timestamp} - {message}\n")
self.log_text.yview(tk.END)
def format_time(self, iso_time):
@staticmethod
def format_time(iso_time):
try:
dt = datetime.fromisoformat(iso_time.replace("Z", "+00:00"))
local_time = dt.astimezone()
return local_time.strftime("%H:%M")
except ValueError:
return "Unknown Error!"
return "Unbekannter Fehler!"
def fetch_orders(self):
self.log_message("[ INFO ]: Fetching orders...")
self.log_message("[ INFO ]: Bestellungen werden abgerufen...")
try:
active_orders = client.get_active()
if not isinstance(active_orders, dict) or "orders" not in active_orders:
raise ValueError("Unexpected API response format.")
raise ValueError("Unerwartetes API-Antwortformat.")
orders_list = active_orders.get("orders", [])
except Exception as e:
self.log_message(f"[ ERROR ]: Error fetching active orders: {e}")
messagebox.showerror("Error", f"Error fetching active orders: {e}")
self.log_message(f"[ FEHLER ]: Fehler beim Abrufen aktiver Bestellungen: {e}")
messagebox.showerror("Fehler", f"Fehler beim Abrufen aktiver Bestellungen: {e}")
return []
orders_data = []
for order in orders_list:
try:
order_info = {
"name": order.get("item_name", "Unknown"),
"store_name": order.get("store_name", "Unknown"),
"address": order.get("pickup_location", {}).get("address", {}).get("address_line", "Unknown"),
"name": order.get("item_name", "Unbekannt"),
"store_name": order.get("store_name", "Unbekannt"),
"address": order.get("pickup_location", {}).get("address", {}).get("address_line", "Unbekannt"),
"quantity": order.get("quantity", 1),
"price": order.get("total_price", {}).get("minor_units", 0) / (10 ** order.get("total_price", {}).get("decimals", 2)),
"currency": order.get("total_price", {}).get("code", "Unknown"),
"payment_method": order.get("payment_method_display_name", "Unknown"),
"currency": order.get("total_price", {}).get("code", "Unbekannt"),
"payment_method": order.get("payment_method_display_name", "Unbekannt"),
"pickup_window": {
"start": self.format_time(order.get("pickup_interval", {}).get("start", "Unknown")),
"end": self.format_time(order.get("pickup_interval", {}).get("end", "Unknown"))
"start": self.format_time(order.get("pickup_interval", {}).get("start", "Unbekannt")),
"end": self.format_time(order.get("pickup_interval", {}).get("end", "Unbekannt"))
},
"image_url": order.get("item_cover_image", {}).get("current_url", "")
}
orders_data.append(order_info)
except Exception as e:
self.log_message(f"[ FATAL ERROR ]: Skipping an order due to an error: {e}")
self.log_message(f"[ KRITISCHER FEHLER ]: Eine Bestellung wird übersprungen: {e}")
return orders_data
def display_orders(self):
self.log_message("[ INFO ]: Displaying orders...")
self.log_message("[ INFO ]: Bestellungen werden angezeigt...")
orders = self.fetch_orders()
if not orders:
messagebox.showinfo("Info", "No active orders found.")
self.log_message("[ ERROR ]: No active orders found.")
messagebox.showinfo("Info", "Keine aktiven Bestellungen gefunden.")
self.log_message("[ FEHLER ]: Keine aktiven Bestellungen gefunden.")
return
# Clear existing widgets
for widget in self.order_frame.winfo_children():
widget.destroy()
# Create a scrollable frame inside a Canvas
canvas = tk.Canvas(self.order_frame, bg="#ffffff")
scroll_frame = tk.Frame(canvas, bg="#ffffff")
scrollbar = tk.Scrollbar(self.order_frame, orient="vertical", command=canvas.yview)
canvas.configure(yscrollcommand=scrollbar.set)
scrollbar.pack(side="right", fill="y")
canvas.pack(side="left", fill="both", expand=True)
canvas.create_window((0, 0), window=scroll_frame, anchor="nw")
# Store image references to prevent garbage collection
image_refs = []
for order in orders:
text = (f"{order['name']} - {order['store_name']}\n"
f"Address: {order['address']}\n"
f"Quantity: {order['quantity']}\n"
f"Price: {order['price']} {order['currency']}\n"
f"Payment: {order['payment_method']}\n"
f"Pickup: {order['pickup_window']['start']} to {order['pickup_window']['end']}\n")
f"Adresse: {order['address']}\n"
f"Menge: {order['quantity']}\n"
f"Preis: {order['price']} {order['currency']}\n"
f"Zahlung: {order['payment_method']}\n"
f"Abholung: {order['pickup_window']['start']} bis {order['pickup_window']['end']}\n")
label = tk.Label(scroll_frame, text=text, justify="left", padx=10, pady=5, anchor="w", font=("Arial", 10),
bg="#f0f0f0", relief="ridge")
@@ -134,50 +131,47 @@ class TGTGOrdersApp:
img_tk = ImageTk.PhotoImage(img)
img_label = tk.Label(scroll_frame, image=img_tk)
img_label.image = img_tk # Store reference
image_refs.append(img_tk) # Prevent garbage collection
img_label.image = img_tk
image_refs.append(img_tk)
img_label.pack(pady=5)
except Exception as e:
self.log_message(f"[ ERROR ]: Failed to load image: {e}")
self.log_message(f"[ FEHLER ]: Bild konnte nicht geladen werden: {e}")
# Update scroll region
scroll_frame.update_idletasks()
canvas.config(scrollregion=canvas.bbox("all"))
# Enable scrolling with the mouse wheel
def on_mouse_wheel(event):
canvas.yview_scroll(-1 * (event.delta // 120), "units")
canvas.bind_all("<MouseWheel>", on_mouse_wheel) # Windows & MacOS
canvas.bind_all("<Button-4>", lambda e: canvas.yview_scroll(-1, "units")) # Linux Scroll Up
canvas.bind_all("<Button-5>", lambda e: canvas.yview_scroll(1, "units")) # Linux Scroll Down
canvas.bind_all("<MouseWheel>", on_mouse_wheel)
canvas.bind_all("<Button-4>", lambda e: canvas.yview_scroll(-1, "units"))
canvas.bind_all("<Button-5>", lambda e: canvas.yview_scroll(1, "units"))
def on_startup(self):
self.log_message("[ INFO ]: Application started.")
self.log_message("[ INFO ]: Anwendung gestartet.")
self.display_orders()
def exit_applet(self):
self.log_message("[ INFO ]: Exiting Applet")
self.log_message("[ INFO ]: Anwendung wird beendet.")
self.parent.quit()
def about(self):
messagebox.showinfo("About", "PythonTGTG Script for fetching Orders on Desktop")
@staticmethod
def about():
messagebox.showinfo("Über", "TGTG OrderChecker PV2-PKG1\n PfandApplication ©")
def save_log(self):
try:
log_content = self.log_text.get("1.0", tk.END)
with open("log_file.log", "w") as log_file:
with open("protokoll_datei.log", "w") as log_file:
log_file.write(log_content)
self.log_message("[ INFO ]: Log file saved successfully.")
self.log_message("[ INFO ]: Protokolldatei erfolgreich gespeichert.")
except Exception as e:
self.log_message(f"[ ERROR ]: Error saving log file: {e}")
messagebox.showerror("Error", f"Error saving log file: {e}")
self.log_message(f"[ FEHLER ]: Fehler beim Speichern des Protokolls: {e}")
messagebox.showerror("Fehler", f"Fehler beim Speichern des Protokolls: {e}")
def start_tgtg(parent=None):
new_window = tk.Toplevel(parent) # Create a new window
new_window.title("TGTG Bestellungen")
new_window = tk.Toplevel(parent)
new_window.title("TGTG Orders")
new_window.geometry("500x600")
# Start the TGTGOrdersApp inside this new window
app = TGTGOrdersApp(new_window)