58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
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
|