from fastapi import APIRouter, Depends, BackgroundTasks from sqlalchemy.orm import Session from ..duplicates_manager import DuplicatesManager from ..config import settings, Settings from ..database import get_db, SessionLocal from ..samba_manager import SambaManager import os router = APIRouter() def run_scan_videos_background(): db = SessionLocal() app_settings = Settings() manager = DuplicatesManager(app_settings, db) samba_manager = SambaManager( app_settings.samba_server_ip, "isolation", app_settings.samba_username, app_settings.samba_password, ) try: manager.scan_videos(samba_manager) finally: samba_manager.close() db.close() @router.post("/scan") def scan_videos(background_tasks: BackgroundTasks): background_tasks.add_task(run_scan_videos_background) return {"message": "Video scan started in the background."} @router.post("/scan/pause") def pause_scan(): with open("logs/duplicates_scan.pause", 'w') as f: pass return {"message": "Video scan paused."} @router.post("/scan/resume") def resume_scan(): if os.path.exists("logs/duplicates_scan.pause"): os.remove("logs/duplicates_scan.pause") return {"message": "Video scan resumed."} @router.get("/scan/status") def get_scan_status(): if os.path.exists("logs/duplicates_scan.pause"): return {"status": "Paused"} if os.path.exists("logs/duplicates_scan.progress") or os.path.exists("logs/duplicates_scan.state"): return {"status": "Scanning"} return {"status": "Idle"} @router.post("/find") def find_duplicates(threshold: float = 0.95, db: Session = Depends(get_db)): manager = DuplicatesManager(settings, db) result = manager.find_duplicates(threshold) return result