From ed54de94ad8d385d291083f23afe4b2b6a7250ac Mon Sep 17 00:00:00 2001 From: Morgan Mnemo Rowan Date: Fri, 6 Mar 2026 22:27:02 +0800 Subject: [PATCH] Fix: Handle OSError when hardlinking thumbnails across filesystems Wrap os.link() in try/except and fallback to shutil.copy2() when hardlinking fails (e.g., when temp dir and media dir are on different filesystems in Docker setups). Fixes #22 --- app/services/download_manager.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/services/download_manager.py b/app/services/download_manager.py index 97bbbf2..42c3b9b 100644 --- a/app/services/download_manager.py +++ b/app/services/download_manager.py @@ -1,6 +1,7 @@ import logging import os import re +import shutil import subprocess import json import time @@ -227,7 +228,12 @@ def _copy_thumbnail(output_dir: str, video_id: str) -> None: src = os.path.join(output_dir, f"{video_id}.{ext}") if os.path.exists(src): if ext == "jpg": - os.link(src, dest) if not os.path.exists(dest) else None + if not os.path.exists(dest): + try: + os.link(src, dest) + except OSError: + # Fallback to copy if hardlink fails (e.g., different filesystems in Docker) + shutil.copy2(src, dest) else: # Convert to jpg using ffmpeg subprocess.run(