fix: detect platform on video create, remove hardcoded twitter default

This commit is contained in:
mini
2026-02-19 00:14:50 +08:00
parent 8e31c4b954
commit 62a51305c3
3 changed files with 16 additions and 4 deletions

View File

@@ -12,7 +12,7 @@ class Video(Base):
task_id = Column(String(64), unique=True, index=True, nullable=False) task_id = Column(String(64), unique=True, index=True, nullable=False)
url = Column(String(512), nullable=False, index=True) url = Column(String(512), nullable=False, index=True)
title = Column(String(512), default="") title = Column(String(512), default="")
platform = Column(String(32), default="twitter") platform = Column(String(32), default="")
thumbnail = Column(String(1024), default="") thumbnail = Column(String(1024), default="")
quality = Column(String(32), default="") quality = Column(String(32), default="")
format_id = Column(String(64), default="") format_id = Column(String(64), default="")

View File

@@ -12,7 +12,7 @@ from app.schemas import DownloadRequest, DownloadResponse, TaskStatus
from app.database import get_db, async_session from app.database import get_db, async_session
from app.models import Video, DownloadLog from app.models import Video, DownloadLog
from app.auth import get_current_user, optional_auth from app.auth import get_current_user, optional_auth
from app.services.downloader import download_video, get_video_path from app.services.downloader import download_video, get_video_path, detect_platform
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
router = APIRouter(prefix="/api", tags=["download"]) router = APIRouter(prefix="/api", tags=["download"])
@@ -154,7 +154,8 @@ async def start_download(req: DownloadRequest, background_tasks: BackgroundTasks
return DownloadResponse(task_id=existing.task_id, status="done") return DownloadResponse(task_id=existing.task_id, status="done")
task_id = str(uuid.uuid4())[:8] task_id = str(uuid.uuid4())[:8]
video = Video(task_id=task_id, url=req.url, quality=req.quality, format_id=req.format_id, status="pending") video = Video(task_id=task_id, url=req.url, quality=req.quality, format_id=req.format_id,
status="pending", platform=detect_platform(req.url))
db.add(video) db.add(video)
await db.commit() await db.commit()
background_tasks.add_task(_do_download, task_id, req.url, req.format_id) background_tasks.add_task(_do_download, task_id, req.url, req.format_id)

View File

@@ -55,6 +55,17 @@ def _is_pornhub_url(url: str) -> bool:
return bool(PORNHUB_URL_RE.match(url)) return bool(PORNHUB_URL_RE.match(url))
def detect_platform(url: str) -> str:
"""Detect platform from URL."""
if _is_twitter_url(url):
return "twitter"
if _is_youtube_url(url):
return "youtube"
if _is_pornhub_url(url):
return "pornhub"
return "unknown"
def _is_twitter_url(url: str) -> bool: def _is_twitter_url(url: str) -> bool:
return bool(TWITTER_URL_RE.match(url)) return bool(TWITTER_URL_RE.match(url))
@@ -556,5 +567,5 @@ def download_video(url: str, format_id: str = "best", progress_callback=None) ->
"filename": os.path.basename(filename), "filename": os.path.basename(filename),
"file_path": filename, "file_path": filename,
"file_size": file_size, "file_size": file_size,
"platform": "twitter", "platform": detect_platform(url),
} }