74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
import os
|
|
import platform
|
|
from django.shortcuts import render, redirect
|
|
from django.utils import timezone
|
|
from .utils import get_all_services_status
|
|
from .models import ServiceSetting
|
|
from .api_clients import JellyfinClient, RadarrClient, SonarrClient, JellyseerrClient
|
|
|
|
def home(request):
|
|
"""Render the dashboard with service statuses and detailed info."""
|
|
service_status = get_all_services_status()
|
|
|
|
# Fetch additional data for the dashboard
|
|
jellyfin = JellyfinClient()
|
|
recent_media = jellyfin.get_recent_items(6)
|
|
|
|
radarr = RadarrClient()
|
|
radarr_queue = radarr.get_queue()
|
|
|
|
sonarr = SonarrClient()
|
|
sonarr_queue = sonarr.get_queue()
|
|
|
|
jellyseerr = JellyseerrClient()
|
|
pending_requests = jellyseerr.get_requests(5)
|
|
|
|
# Add URLs to the context for links
|
|
settings = {s.name: s.url for s in ServiceSetting.objects.all()}
|
|
for service in service_status:
|
|
service_status[service]['url'] = settings.get(service, '')
|
|
|
|
context = {
|
|
"project_name": "Matzeflix Dashboard",
|
|
"service_status": service_status,
|
|
"recent_media": recent_media,
|
|
"radarr_queue_count": len(radarr_queue),
|
|
"sonarr_queue_count": len(sonarr_queue),
|
|
"pending_requests": pending_requests,
|
|
"current_time": timezone.now(),
|
|
"jellyfin_url": settings.get('jellyfin', ''),
|
|
}
|
|
return render(request, "core/index.html", context)
|
|
|
|
def settings_view(request):
|
|
"""View to manage service settings."""
|
|
services = ['jellyfin', 'radarr', 'sonarr', 'jellyseerr']
|
|
|
|
if request.method == "POST":
|
|
for service in services:
|
|
url = request.POST.get(f"{service}_url")
|
|
api_key = request.POST.get(f"{service}_api_key")
|
|
is_active = request.POST.get(f"{service}_active") == "on"
|
|
|
|
setting, created = ServiceSetting.objects.get_or_create(name=service)
|
|
setting.url = url or ""
|
|
setting.api_key = api_key or ""
|
|
setting.is_active = is_active
|
|
setting.save()
|
|
return redirect('home')
|
|
|
|
settings_query = ServiceSetting.objects.all()
|
|
settings_dict = {s.name: s for s in settings_query}
|
|
|
|
service_configs = []
|
|
for service in services:
|
|
config = settings_dict.get(service)
|
|
if not config:
|
|
config = {'name': service, 'url': '', 'api_key': '', 'is_active': False}
|
|
service_configs.append(config)
|
|
|
|
context = {
|
|
"service_configs": service_configs,
|
|
}
|
|
return render(request, "core/settings.html", context)
|