83 lines
2.2 KiB
Python
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 |