Files
Pac-cogs/videoarchiver/database/video_archive_db.py
pacnpal c830be2841 videoarchiver/config/validation_manager.py
videoarchiver/config/role_manager.py
videoarchiver/database/connection_manager.py
videoarchiver/database/schema_manager.py
videoarchiver/queue/cleaners/tracking_cleaner.py
videoarchiver/exceptions.py
videoarchiver/processor.py
videoarchiver/commands.py
videoarchiver/update_checker.py
videoarchiver/utils/path_manager.py
videoarchiver/utils/file_ops.py
videoarchiver/processor/message_validator.py
videoarchiver/utils/download_manager.py
2024-11-17 06:12:41 +00:00

87 lines
3.1 KiB
Python

"""Database management for archived videos"""
import logging
from pathlib import Path
from typing import Optional, Dict, Any, List
from videoarchiver.database.schema_manager import DatabaseSchemaManager
from videoarchiver.database.query_manager import DatabaseQueryManager
from videoarchiver.database.connection_manager import DatabaseConnectionManager
logger = logging.getLogger("VideoArchiverDB")
class VideoArchiveDB:
"""Manages the SQLite database for archived videos"""
def __init__(self, data_path: Path):
"""Initialize the database and its components
Args:
data_path: Path to the data directory
"""
# Set up database path
self.db_path = data_path / "archived_videos.db"
self.db_path.parent.mkdir(parents=True, exist_ok=True)
# Initialize managers
self.connection_manager = DatabaseConnectionManager(self.db_path)
self.schema_manager = DatabaseSchemaManager(self.db_path)
self.query_manager = DatabaseQueryManager(self.connection_manager)
# Initialize database schema
self.schema_manager.initialize_schema()
logger.info("Video archive database initialized successfully")
async def add_archived_video(
self,
original_url: str,
discord_url: str,
message_id: int,
channel_id: int,
guild_id: int,
metadata: Optional[Dict[str, Any]] = None,
) -> bool:
"""Add a newly archived video to the database"""
return await self.query_manager.add_archived_video(
original_url, discord_url, message_id, channel_id, guild_id, metadata
)
async def get_archived_video(self, url: str) -> Optional[Dict[str, Any]]:
"""Get archived video information by original URL"""
return await self.query_manager.get_archived_video(url)
async def is_url_archived(self, url: str) -> bool:
"""Check if a URL has already been archived"""
return await self.query_manager.is_url_archived(url)
async def get_guild_stats(self, guild_id: int) -> Dict[str, Any]:
"""Get archiving statistics for a guild"""
return await self.query_manager.get_guild_stats(guild_id)
async def get_channel_videos(
self, channel_id: int, limit: int = 100, offset: int = 0
) -> List[Dict[str, Any]]:
"""Get archived videos for a channel"""
return await self.query_manager.get_channel_videos(channel_id, limit, offset)
async def cleanup_old_records(self, days: int) -> int:
"""Clean up records older than specified days"""
return await self.query_manager.cleanup_old_records(days)
def close(self) -> None:
"""Close all database connections"""
try:
self.connection_manager.close_all()
logger.info("Database connections closed")
except Exception as e:
logger.error(f"Error closing database connections: {e}")
async def __aenter__(self):
"""Async context manager entry"""
return self
async def __aexit__(self, exc_type, exc_val, exc_tb):
"""Async context manager exit"""
self.close()