agropunx 11 months ago
parent 5b9232a937
commit 2d955ab30a

@ -2,11 +2,8 @@ Welcome to celaigia
an app to gently query youtube music, and possibly download only if you don't have already locally an app to gently query youtube music, and possibly download only if you don't have already locally
# TODO
- gitignore music - explore the db
- standardize postprocess - nicer ui
- parametrize and make config - contenerize
- fix ui and reduce number of searches - mobile
- add direct download with url
- place query on ui
- document

@ -24,3 +24,14 @@ class Database:
if entry['id'] == idx or entry['title'] == title: if entry['id'] == idx or entry['title'] == title:
return False return False
return True return True
def get_all_entries(self):
return self.data
def update_entry(self, entry_id, new_data):
for entry in self.data:
if entry['id'] == entry_id:
entry.update(new_data)
with open(self.file_path, 'w') as file:
json.dump(self.data, file, indent=4)
return

73
ui.py

@ -12,11 +12,21 @@ class UIEngine:
self.root.title("celaigia") self.root.title("celaigia")
self.root.geometry("400x300") # Set a fixed size self.root.geometry("400x300") # Set a fixed size
self.status_label = tk.Label(self.root, text="Ready") # Create a PanedWindow to split the UI vertically
self.paned_window = tk.PanedWindow(self.root, orient=tk.VERTICAL)
self.paned_window.pack(expand=True, fill='both')
# Create the top part of the UI
self.top_frame = ttk.Frame(self.paned_window)
self.paned_window.add(self.top_frame)
self.status_label = tk.Label(self.top_frame, text="Ready")
self.status_label.pack() self.status_label.pack()
self.search_frame = ttk.Frame(self.root) self.search_frame = ttk.Frame(self.top_frame)
self.search_frame.pack() self.search_frame.pack()
self.download_frame = ttk.Frame(self.top_frame)
self.download_frame.pack()
self.search_status_label = tk.Label(self.search_frame, text="Enter search query:") self.search_status_label = tk.Label(self.search_frame, text="Enter search query:")
self.search_status_label.grid(row=0, column=0) self.search_status_label.grid(row=0, column=0)
@ -25,15 +35,51 @@ class UIEngine:
self.search_button = tk.Button(self.search_frame, text="Search", command=lambda: self.search_and_display()) self.search_button = tk.Button(self.search_frame, text="Search", command=lambda: self.search_and_display())
self.search_button.grid(row=0, column=2) self.search_button.grid(row=0, column=2)
self.results_frame = ttk.Frame(self.root) self.download_status_label = tk.Label(self.download_frame, text="Enter URL to download:")
self.download_status_label.grid(row=0, column=0)
self.download_entry = tk.Entry(self.download_frame)
self.download_entry.grid(row=0,column=1)
self.download_button = tk.Button(self.download_frame, text="Download", command=lambda: self.handle_download(self.download_entry.get()))
self.download_button.grid(row=0, column=2)
# Create the bottom part of the UI with tabs
self.bottom_frame = ttk.Frame(self.paned_window)
self.paned_window.add(self.bottom_frame)
self.notebook = ttk.Notebook(self.bottom_frame)
self.notebook.pack(fill='both', expand=True)
self.create_search_tab()
self.create_database_tab(db)
def create_search_tab(self):
search_tab = ttk.Frame(self.notebook)
self.notebook.add(search_tab, text='Search&Download')
self.status_label = tk.Label(search_tab, text="Ready")
self.status_label.pack()
# Create a frame for displaying search results
self.results_frame = ttk.Frame(search_tab)
self.results_frame.pack() self.results_frame.pack()
self.download_status_label = tk.Label(self.root, text="Enter URL to download:") def create_database_tab(self, db):
self.download_status_label.pack() database_tab = ttk.Frame(self.notebook)
self.download_entry = tk.Entry(self.root) self.notebook.add(database_tab, text='Database')
self.download_entry.pack()
self.download_button = tk.Button(self.root, text="Download", command=lambda: self.handle_download(self.download_entry.get())) tree = ttk.Treeview(database_tab, columns=("title", "artist", "filename", "tags", "timestamp"))
self.download_button.pack() tree.heading("#0", text="ID")
tree.heading("title", text="Title")
tree.heading("artist", text="Artist")
tree.heading("filename", text="Filename")
tree.heading("tags", text="Tags")
tree.heading("timestamp", text="Timestamp")
# Populate the treeview with data from the database
for entry in db.get_all_entries():
tree.insert("", "end", text=entry["id"], values=(entry["title"], entry["artist"], entry["filename"], ", ".join(entry["tags"]), entry["timestamp"]))
tree.pack(fill='both', expand=True)
def search_and_display(self): def search_and_display(self):
self.set_status("searching") self.set_status("searching")
@ -49,10 +95,15 @@ class UIEngine:
self.status_label.config(text=status) self.status_label.config(text=status)
self.root.update() # Force GUI update self.root.update() # Force GUI update
# Modify the display_results method to use the results_frame in the search_tab
def display_results(self, results): def display_results(self, results):
for i, result in enumerate(results): for i, result in enumerate(results):
result_button = ttk.Button(self.results_frame, text=result['title'], command=lambda url=result['webpage_url'], filename=result['title']: self.handle_download(url, filename)) if self.db.downloadable(result['webpage_url'], result['title']):
result_button.pack() result_button = ttk.Button(self.results_frame, text=result['title'], command=lambda url=result['webpage_url'], filename=result['title']: self.handle_download(url, filename))
result_button.pack()
else:
result_button = tk.Label(self.results_frame, text=f"celaigia: {result['title']}")
result_button.pack()
def handle_download(self, url, filename): def handle_download(self, url, filename):

Loading…
Cancel
Save