From 9d38821726c6613d81b4aa217b0ad2c56a6b5b1b Mon Sep 17 00:00:00 2001 From: Thomas Wilczynski <47839545+Gamergull@users.noreply.github.com> Date: Wed, 30 Jul 2025 11:06:33 -0700 Subject: [PATCH] Initial commit --- .gitignore | 4 +++ README.txt | 1 + app.py | 89 +++++++++++++++++++++++++++++++++++++++++++++++++ file_manager.py | 24 +++++++++++++ 4 files changed, 118 insertions(+) create mode 100644 .gitignore create mode 100644 README.txt create mode 100644 app.py create mode 100644 file_manager.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..94fe5a5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.vscode/ +__pycache__/ +venv/ +plan.svg \ No newline at end of file diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..744f2eb --- /dev/null +++ b/README.txt @@ -0,0 +1 @@ +A simple app that manages your downloads folder. \ No newline at end of file diff --git a/app.py b/app.py new file mode 100644 index 0000000..a380210 --- /dev/null +++ b/app.py @@ -0,0 +1,89 @@ +"""Download utility app.""" + +__name__ = "__main__" +__author__ = "Gull" + +import tkinter as tk +from tkinter import ttk # Modern widgets +import file_manager as fm + +debug_mode = False + +def set_debug_mode(value): + if type(value) == None: + debug_mode = not debug_mode + else: + debug_mode = value + +class App(tk.Tk): + def __init__(self, width=600, height=400): + super().__init__() + self.title("Download Utils") + self.fm = fm.Manager() + self.gui() + + screen_width = self.winfo_screenwidth() + screen_height = self.winfo_screenheight() + + center_x = int(screen_width / 2 - width / 2) + center_y = int(screen_height / 2 - height / 2) + + self.geometry(f"{width}x{height}+{center_x}+{center_y}") + + def update_file_list(self): + for n in range(self.listbox_file.size(), 0, -1): + self.listbox_file.delete(n - 1) + self.fm.update_file_list() + for v in self.fm.filelist: + self.listbox_file.insert(tk.END, v) + + def gui(self): + self.gui_menu() + self.gui_side() + self.gui_main() + + def gui_menu(self): + a_menu = tk.Menu(self) # First arg is always the parent + self.config(menu=a_menu) + + a_menu_file = tk.Menu(a_menu) + a_menu_file.add_command(label="Open") + a_menu_file.add_command(label="Exit", command=self.destroy) + + a_menu.add_cascade( + label="File", + menu=a_menu_file, + underline=0 + ) + + a_menu_settings = tk.Menu(a_menu) + a_menu_settings.add_command(label="Save Config") + + a_menu.add_cascade( + label="Settings", + menu=a_menu_settings, + underline=0 + ) + + def gui_side(self): + a_side = ttk.Frame(self, width=80, style="TLabel") + a_side.pack(side=tk.LEFT, fill=tk.Y) + + tk_style = ttk.Style(self) + tk_style.configure("TLabel", background="#bbbbbb") + + def gui_main(self): + a_content = ttk.Frame(self) + + a_button = ttk.Button(a_content, text="Refresh", command=self.update_file_list) + a_button.pack(side=tk.TOP) + + self.listbox_file = tk.Listbox(a_content, height=20) + self.update_file_list() + self.listbox_file.pack(padx=10, pady=10, side=tk.LEFT, expand=True, fill=tk.BOTH) + + a_content.pack(side=tk.LEFT, expand=True, fill=tk.BOTH) + +if __name__ == "__main__": + app = App() + app.mainloop() \ No newline at end of file diff --git a/file_manager.py b/file_manager.py new file mode 100644 index 0000000..47427ed --- /dev/null +++ b/file_manager.py @@ -0,0 +1,24 @@ +"""File manager for the app.""" + +__author__ = "Gull" + +import os +import json + +class Manager: + def __init__(self): + self.dir = self.get_directory() + self.filelist = [] + + def get_directory(self): + dir = os.path.expanduser("~") + dir = os.path.join(dir, "Downloads") + if os.path.exists(dir): # Needs error handling + return dir + + def update_file_list(self): + self.filelist.clear() + with os.scandir(self.dir) as scan: + for entry in scan: + if entry.is_file(): + self.filelist.append(entry.name) \ No newline at end of file