from huey import SqliteHuey import os import logging from .comics_manager import ComicsManager from .samba_manager import SambaManager from .config import settings from .task_tracker import record_task_start, record_task_end # Ensure dir exists os.makedirs("resources/config", exist_ok=True) # Configure Huey with SQLite backend for persistence huey = SqliteHuey(filename="resources/config/tasks.db") logger = logging.getLogger('huey') def get_samba_manager(share="isolation"): return SambaManager( settings.samba_server_ip, share, settings.samba_username, settings.samba_password, ) @huey.task(context=True) def task_organize_comics(task=None): record_task_start(task.id, "Organize Comics") logger.info(f"Task {task.id}: Organize Comics started") manager = ComicsManager() samba_manager = get_samba_manager("isolation") try: manager.organize_comics(samba_manager) record_task_end(task.id, "success") except Exception as e: logger.error(f"Task Organize Comics failed: {e}") record_task_end(task.id, "failed", str(e)) finally: samba_manager.close() @huey.task(context=True) def task_move_comics(series_names, share, path, task=None): record_task_start(task.id, "Move Comics", f"Count: {len(series_names)} -> {share}:{path}") logger.info(f"Task {task.id}: Move Comics started") manager = ComicsManager() samba_manager = get_samba_manager("isolation") try: manager.move_series(samba_manager, series_names, share, path) record_task_end(task.id, "success") except Exception as e: logger.error(f"Task Move Comics failed: {e}") record_task_end(task.id, "failed", str(e)) finally: samba_manager.close() @huey.task(context=True) def task_update_metadata(target_path, force, task=None): record_task_start(task.id, "Update Metadata", f"Path: {target_path}") logger.info(f"Task {task.id}: Update Metadata started") manager = ComicsManager() samba_manager = get_samba_manager("isolation") try: manager.update_existing_metadata(samba_manager, target_path, force) record_task_end(task.id, "success") except Exception as e: logger.error(f"Task Update Metadata failed: {e}") record_task_end(task.id, "failed", str(e)) finally: samba_manager.close() @huey.task(context=True) def task_sort_by_artist(root_path, task=None): record_task_start(task.id, "Sort by Artist", f"Path: {root_path}") logger.info(f"Task {task.id}: Sort by Artist started") manager = ComicsManager() samba_manager = get_samba_manager("isolation") try: manager.sort_by_artist(samba_manager, root_path) record_task_end(task.id, "success") except Exception as e: logger.error(f"Task Sort by Artist failed: {e}") record_task_end(task.id, "failed", str(e)) finally: samba_manager.close()