{% extends 'layouts/app.twig' %} {% block content %}

Admin Dashboard

Manage your media sources and synchronization

Source Management

Configure and sync your media sources

{% for source in sources %}
{{ source.display_name }}
{% if source.is_active %} Active {% else %} Inactive {% endif %}
{% if source.name == 'jellyfin' %}
{% else %}
{% endif %} {% if source.last_sync_at %}
Last sync: {{ source.last_sync_at|date('M j, Y H:i') }}
{% else %}
Never synced
{% endif %}
Preparing sync...
{% endfor %}

Recent Sync Activity

Latest synchronization logs and status

{% for sync in recent_syncs %} {% endfor %}
Source Type Status Progress Items Started Duration Message Actions
{{ sync.source_name }} {{ sync.sync_type|title }} {% if sync.status == 'completed' %} Completed {% elseif sync.status == 'failed' %} Failed {% elseif sync.status == 'running' %} Running {% else %} {{ sync.status|title }} {% endif %} {% if sync.total_items > 0 %} {{ sync.processed_items }} / {{ sync.total_items }} {% if sync.total_items > 0 %}
{% endif %} {% else %} - {% endif %}
{% if sync.new_items > 0 %}+{{ sync.new_items }}{% endif %} {% if sync.updated_items > 0 %} {{ sync.updated_items }} updated{% endif %} {% if sync.deleted_items > 0 %} {{ sync.deleted_items }} deleted{% endif %} {% if sync.new_items == 0 and sync.updated_items == 0 and sync.deleted_items == 0 %}No changes{% endif %} {% if sync.started_at %} {{ sync.started_at|date('M j, H:i') }} {% else %} - {% endif %} {% if sync.started_at and sync.completed_at %} {% set duration = sync.completed_at|date('U') - sync.started_at|date('U') %} {% if duration < 60 %} {{ duration }}s {% elseif duration < 3600 %} {{ (duration / 60)|round }}m {% else %} {{ (duration / 3600)|round }}h {% endif %} {% else %} - {% endif %} {% if sync.message %} {{ sync.message|length > 50 ? sync.message|slice(0, 50) ~ '...' : sync.message }} {% else %} - {% endif %} {% if sync.errors %} {% endif %}
{% endblock %}