KaraokeVideoDownloader/karaoke_downloader/manual_video_manager.py

83 lines
2.2 KiB
Python

"""
Manual video manager for handling static video collections.
"""
import json
from pathlib import Path
from typing import Dict, List, Optional, Any
from karaoke_downloader.data_path_manager import get_data_path_manager
def load_manual_videos(manual_file: str = None) -> List[Dict[str, Any]]:
if manual_file is None:
manual_file = str(get_data_path_manager().get_manual_videos_path())
"""
Load manual videos from the JSON file.
Args:
manual_file: Path to manual videos JSON file
Returns:
List of video dictionaries
"""
manual_path = Path(manual_file)
if not manual_path.exists():
print(f"⚠️ Manual videos file not found: {manual_file}")
return []
try:
with open(manual_path, 'r', encoding='utf-8') as f:
data = json.load(f)
videos = data.get("videos", [])
print(f"📋 Loaded {len(videos)} manual videos from {manual_file}")
return videos
except Exception as e:
print(f"❌ Error loading manual videos: {e}")
return []
def get_manual_videos_for_channel(channel_name: str, manual_file: str = None) -> List[Dict[str, Any]]:
if manual_file is None:
manual_file = str(get_data_path_manager().get_manual_videos_path())
"""
Get manual videos for a specific channel.
Args:
channel_name: Channel name (should be "@ManualVideos")
manual_file: Path to manual videos JSON file
Returns:
List of video dictionaries
"""
if channel_name != "@ManualVideos":
return []
return load_manual_videos(manual_file)
def is_manual_channel(channel_url: str) -> bool:
"""
Check if a channel URL is a manual channel.
Args:
channel_url: Channel URL
Returns:
True if it's a manual channel
"""
return channel_url == "manual://static"
def get_manual_channel_info(channel_url: str) -> tuple[str, str]:
"""
Get channel info for manual channels.
Args:
channel_url: Channel URL
Returns:
Tuple of (channel_name, channel_id)
"""
if channel_url == "manual://static":
return "@ManualVideos", "manual"
return None, None