-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathui.py
64 lines (51 loc) · 2.75 KB
/
ui.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import tkinter as tk
from tkinter import ttk, filedialog, messagebox
from pathlib import Path
from core.organizer import DownloadOrganizer
class OrganizerGUI:
def __init__(self, master):
self.master = master
master.title("Download Organizer 3.0")
self.organizer = DownloadOrganizer()
self.source_dir = tk.StringVar()
self.config_path = tk.StringVar(value="config.json")
self.dry_run = tk.BooleanVar(value=False)
self.create_widgets()
def create_widgets(self):
# Source Directory Selection
ttk.Label(self.master, text="Source Directory:").grid(row=0, column=0, padx=5, pady=5)
ttk.Entry(self.master, textvariable=self.source_dir, width=40).grid(row=0, column=1, padx=5)
ttk.Button(self.master, text="Browse...", command=self.select_source_dir).grid(row=0, column=2, padx=5)
# Config File Selection
ttk.Label(self.master, text="Config File:").grid(row=1, column=0, padx=5, pady=5)
ttk.Entry(self.master, textvariable=self.config_path, width=40).grid(row=1, column=1, padx=5)
ttk.Button(self.master, text="Browse...", command=self.select_config).grid(row=1, column=2, padx=5)
# Options
ttk.Checkbutton(self.master, text="Dry Run (Preview Only)", variable=self.dry_run).grid(row=2, column=1, sticky=tk.W)
# Action Buttons
ttk.Button(self.master, text="Preview", command=lambda: self.run_organizer(dry_run=True)).grid(row=3, column=0, pady=10)
ttk.Button(self.master, text="Organize!", command=lambda: self.run_organizer(dry_run=False)).grid(row=3, column=1, pady=10)
ttk.Button(self.master, text="Exit", command=self.master.quit).grid(row=3, column=2, pady=10)
def select_source_dir(self):
directory = filedialog.askdirectory()
if directory:
self.source_dir.set(directory)
def select_config(self):
filepath = filedialog.askopenfilename(filetypes=[("JSON files", "*.json")])
if filepath:
self.config_path.set(filepath)
def run_organizer(self, dry_run=False):
try:
source = Path(self.source_dir.get())
if not source.exists():
raise ValueError("Selected directory does not exist")
self.organizer = DownloadOrganizer(self.config_path.get())
self.organizer.organize(source, dry_run=dry_run)
msg = "Preview complete" if dry_run else "Organization complete!"
messagebox.showinfo("Success", msg)
except Exception as e:
messagebox.showerror("Error", str(e))
if __name__ == "__main__":
root = tk.Tk()
app = OrganizerGUI(root)
root.mainloop()