File size: 5,034 Bytes
02daacc |
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
"""
UI Helpers Module
Helper functions for Gradio UI interactions.
"""
import json
import gradio as gr
from .file_manager import (
get_folder_contents, get_breadcrumb, get_status, get_quick_access_folders,
create_folder, create_file, delete_item, rename_item, write_file,
navigate_to_folder, get_file_preview
)
from .events import event_manager
from .logger import logger
from .api import api_create_event, api_delete_event, api_toggle_event, api_run_event
def ui_result(result_str: str) -> str:
"""Parse result JSON and return status message"""
try:
r = json.loads(result_str)
return "β
Success" if r.get("success") else f"β {r.get('error', 'Error')}"
except:
return result_str
def ui_create_folder(name):
result = create_folder(name)
return get_folder_contents(), get_breadcrumb(), ui_result(result), get_quick_access_folders()
def ui_create_file(name, content):
result = create_file(name, content)
return get_folder_contents(), get_breadcrumb(), ui_result(result), get_quick_access_folders()
def ui_delete(name):
if not name:
return get_folder_contents(), get_breadcrumb(), "β οΈ Select item", get_quick_access_folders()
result = delete_item(name)
return get_folder_contents(), get_breadcrumb(), ui_result(result), get_quick_access_folders()
def ui_rename(old, new):
result = rename_item(old, new)
return get_folder_contents(), get_breadcrumb(), ui_result(result), get_quick_access_folders()
def ui_save(name, content):
if not name:
return "β οΈ Select file"
result = write_file(name, content)
return ui_result(result)
def on_folder_tree_select(evt: gr.SelectData, data):
"""Handle folder tree selection"""
if evt.index[0] < len(data):
folder_path = data[evt.index[0]][2]
return navigate_to_folder(folder_path)
return get_folder_contents(), get_breadcrumb(), get_status(), get_quick_access_folders()
def navigate_from_main(evt: gr.SelectData, data):
"""Handle click on main content - navigate into folder or show preview"""
from .file_manager import current_path
import modules.file_manager as fm
if evt.index[0] < len(data):
name = data[evt.index[0]][1]
item_type = data[evt.index[0]][2]
if item_type == "Folder":
new_path = fm.current_path / name
if new_path.exists() and new_path.is_dir():
fm.current_path = new_path
return (
get_folder_contents(),
get_breadcrumb(),
get_status(),
get_quick_access_folders(),
name,
None, "", ""
)
else:
img, txt, info = get_file_preview(name)
return (
data,
get_breadcrumb(),
get_status(),
get_quick_access_folders(),
name,
img, txt or "", info
)
return (data, get_breadcrumb(), get_status(), get_quick_access_folders(), "", None, "", "")
# Event UI helpers
def get_events_table():
events = event_manager.get_events()
rows = []
for e in events:
rows.append([
e["event_id"],
e["event_type"],
e["target_path"][:30] + "..." if len(e["target_path"]) > 30 else e["target_path"],
f"{e['interval_hours']}h",
"β
" if e["enabled"] else "β",
e.get("last_run", "Never")[:16] if e.get("last_run") else "Never",
str(e["run_count"])
])
return rows
def get_logs_display(log_type: str = "all", limit: int = 50):
logs = logger.get_logs(log_type, limit)
if not logs:
return "No logs found"
lines = []
for log in logs:
level_icon = {"INFO": "βΉοΈ", "ERROR": "β", "WARNING": "β οΈ", "EVENT": "π", "DEBUG": "π"}.get(log["level"], "β’")
lines.append(f"[{log['timestamp'][:19]}] {level_icon} [{log['category']}] {log['message']}")
return "\n".join(lines)
def ui_create_event(event_type, target_path, interval_hours, enabled, description):
result = api_create_event(event_type, target_path, interval_hours, enabled, description)
return get_events_table(), ui_result(result)
def ui_delete_event(event_id):
result = api_delete_event(event_id)
return get_events_table(), ui_result(result)
def ui_toggle_event(event_id):
result = api_toggle_event(event_id)
return get_events_table(), ui_result(result)
def ui_run_event(event_id):
result = api_run_event(event_id)
return get_events_table(), get_logs_display("events", 20), ui_result(result)
def ui_refresh_logs(log_type, limit):
return get_logs_display(log_type, int(limit))
def ui_clear_logs(log_type):
from .api import api_clear_logs
api_clear_logs(log_type)
return get_logs_display(log_type, 50), "β
Logs cleared"
def ui_copy_logs(log_type):
return logger.export_logs(log_type)
|