Release v0.1.0: GDM Refactor, Rate Limit, Metallic UI

This commit is contained in:
2026-01-05 21:14:51 +09:00
commit fac33cff0b
22 changed files with 1829 additions and 0 deletions

77
downloader/base.py Normal file
View File

@@ -0,0 +1,77 @@
"""
다운로더 베이스 클래스
"""
from abc import ABC, abstractmethod
from typing import Dict, Any, Optional, Callable
class BaseDownloader(ABC):
"""모든 다운로더의 추상 베이스 클래스"""
def __init__(self):
self._cancelled = False
self._paused = False
@abstractmethod
def download(
self,
url: str,
save_path: str,
filename: Optional[str] = None,
progress_callback: Optional[Callable] = None,
**options
) -> Dict[str, Any]:
"""
다운로드 실행
Args:
url: 다운로드 URL
save_path: 저장 경로
filename: 파일명 (None이면 자동 감지)
progress_callback: 진행률 콜백 (progress, speed, eta)
**options: 추가 옵션
Returns:
{
'success': bool,
'filepath': str, # 완료된 파일 경로
'error': str, # 에러 메시지 (실패 시)
}
"""
pass
@abstractmethod
def get_info(self, url: str) -> Dict[str, Any]:
"""
URL 정보 추출 (메타데이터)
Returns:
{
'title': str,
'thumbnail': str,
'duration': int,
'formats': list,
...
}
"""
pass
def cancel(self):
"""다운로드 취소"""
self._cancelled = True
def pause(self):
"""다운로드 일시정지"""
self._paused = True
def resume(self):
"""다운로드 재개"""
self._paused = False
@property
def is_cancelled(self) -> bool:
return self._cancelled
@property
def is_paused(self) -> bool:
return self._paused