Initial public release
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
import logging
|
||||
from typing import Any
|
||||
from models.common import ServiceStatus
|
||||
from models.request import QueueItem
|
||||
from infrastructure.cache.cache_keys import LIDARR_PREFIX
|
||||
from .base import LidarrBase
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
LIDARR_QUEUE_KEY = f"{LIDARR_PREFIX}queue"
|
||||
LIDARR_QUEUE_TTL = 30
|
||||
|
||||
|
||||
class LidarrConfigRepository(LidarrBase):
|
||||
async def get_status(self) -> ServiceStatus:
|
||||
try:
|
||||
data = await self._get("/api/v1/system/status")
|
||||
return ServiceStatus(status="ok", version=data.get("version"))
|
||||
except Exception as e: # noqa: BLE001
|
||||
return ServiceStatus(status="error", message=str(e))
|
||||
|
||||
async def get_queue(self) -> list[QueueItem]:
|
||||
cached = await self._cache.get(LIDARR_QUEUE_KEY)
|
||||
if cached is not None:
|
||||
return cached
|
||||
|
||||
data = await self._get("/api/v1/queue")
|
||||
items = data.get("records", []) if isinstance(data, dict) else data
|
||||
|
||||
queue_items = []
|
||||
for item in items:
|
||||
album_data = item.get("album", {})
|
||||
artist_data = album_data.get("artist", {})
|
||||
|
||||
queue_items.append(
|
||||
QueueItem(
|
||||
artist=artist_data.get("artistName", "Unknown"),
|
||||
album=album_data.get("title", "Unknown"),
|
||||
status=item.get("status", "unknown"),
|
||||
progress=None,
|
||||
eta=None,
|
||||
musicbrainz_id=album_data.get("foreignAlbumId"),
|
||||
)
|
||||
)
|
||||
|
||||
await self._cache.set(LIDARR_QUEUE_KEY, queue_items, ttl_seconds=LIDARR_QUEUE_TTL)
|
||||
return queue_items
|
||||
|
||||
async def get_quality_profiles(self) -> list[dict[str, Any]]:
|
||||
return await self._get("/api/v1/qualityprofile")
|
||||
|
||||
async def get_metadata_profiles(self) -> list[dict[str, Any]]:
|
||||
return await self._get("/api/v1/metadataprofile")
|
||||
|
||||
async def get_metadata_profile(self, profile_id: int) -> dict[str, Any]:
|
||||
return await self._get(f"/api/v1/metadataprofile/{profile_id}")
|
||||
|
||||
async def update_metadata_profile(
|
||||
self, profile_id: int, profile_data: dict[str, Any]
|
||||
) -> dict[str, Any]:
|
||||
return await self._put(f"/api/v1/metadataprofile/{profile_id}", profile_data)
|
||||
|
||||
async def get_root_folders(self) -> list[dict[str, Any]]:
|
||||
return await self._get("/api/v1/rootfolder")
|
||||
Reference in New Issue
Block a user