# Trash.py # Gradio UI for deleting items from the database import html import sqlite3 # Imports # External Imports import gradio as gr # # Local Imports from App_Function_Libraries.DB.DB_Manager import delete_prompt, empty_trash, get_trashed_items, user_delete_item def delete_item(media_id, force): return user_delete_item(media_id, force) def list_trash(): items = get_trashed_items() return "\n".join( [f"ID: {item['id']}, Title: {item['title']}, Trashed on: {item['trash_date']}" for item in items]) def empty_trash_ui(days): deleted, remaining = empty_trash(days) return f"Deleted {deleted} items. {remaining} items remain in trash." def create_view_trash_tab(): with gr.TabItem("View Trash"): view_button = gr.Button("View Trash") trash_list = gr.Textbox(label="Trashed Items") view_button.click(list_trash, inputs=[], outputs=trash_list) def search_prompts_for_deletion(query): try: with sqlite3.connect('prompts.db') as conn: cursor = conn.cursor() cursor.execute(''' SELECT id, name, details FROM Prompts WHERE name LIKE ? OR details LIKE ? LIMIT 10 ''', (f'%{query}%', f'%{query}%')) results = cursor.fetchall() if not results: return "No matching prompts found." output = "

Matching Prompts:

" for row in results: output += f"

ID: {row[0]} | Name: {html.escape(row[1])} | Details: {html.escape(row[2][:100])}...

" return output except sqlite3.Error as e: return f"An error occurred while searching prompts: {e}" def search_media_for_deletion(query): try: with sqlite3.connect('media.db') as conn: cursor = conn.cursor() cursor.execute(''' SELECT id, title, description FROM media WHERE title LIKE ? OR description LIKE ? LIMIT 10 ''', (f'%{query}%', f'%{query}%')) results = cursor.fetchall() if not results: return "No matching media found." output = "

Matching Media:

" for row in results: output += f"

ID: {row[0]} | Title: {html.escape(row[1])} | Description: {html.escape(row[2][:100])}...

" return output except sqlite3.Error as e: return f"An error occurred while searching media: {e}" def create_delete_trash_tab(): with gr.TabItem("Delete DB Item"): gr.Markdown("# Search and Delete Items from Databases") with gr.Row(): with gr.Column(): gr.Markdown("## Search and Delete Prompts") prompt_search_input = gr.Textbox(label="Search Prompts") prompt_search_button = gr.Button("Search Prompts") prompt_search_results = gr.HTML() prompt_id_input = gr.Number(label="Prompt ID") prompt_delete_button = gr.Button("Delete Prompt") prompt_delete_output = gr.Textbox(label="Delete Result") with gr.Column(): gr.Markdown("## Search and Delete Media") media_search_input = gr.Textbox(label="Search Media") media_search_button = gr.Button("Search Media") media_search_results = gr.HTML() media_id_input = gr.Number(label="Media ID") media_force_checkbox = gr.Checkbox(label="Force Delete") media_delete_button = gr.Button("Delete Media") media_delete_output = gr.Textbox(label="Delete Result") prompt_search_button.click( search_prompts_for_deletion, inputs=[prompt_search_input], outputs=prompt_search_results ) prompt_delete_button.click( delete_prompt, inputs=[prompt_id_input], outputs=prompt_delete_output ) media_search_button.click( search_media_for_deletion, inputs=[media_search_input], outputs=media_search_results ) media_delete_button.click( delete_item, inputs=[media_id_input, media_force_checkbox], outputs=media_delete_output ) def create_empty_trash_tab(): with gr.TabItem("Empty Trash"): days_input = gr.Slider(minimum=15, maximum=90, step=5, label="Delete items older than (days)") empty_button = gr.Button("Empty Trash") empty_output = gr.Textbox(label="Result") empty_button.click(empty_trash_ui, inputs=[days_input], outputs=empty_output)