{# Gemeinsame Bausteine der Signage-Verwaltung #} {# Stufen einer Veröffentlichung aus SignageDeviceStatus::describe() #} {% macro release_steps(s, compact = false) %} {% set order = {none: 0, published: 1, transferring: 2, ready: 3, active: 4} %} {% set reached = order[s.release_state] ?? 0 %} {% set steps = [ {label: 'Veröffentlicht' ~ (s.latest_version ? ' v' ~ s.latest_version : ''), icon: 'fa-upload'}, {label: 'Übertragen', icon: 'fa-download'}, {label: 'Bereit', icon: 'fa-check'}, {label: 'Aktiv' ~ (s.active_version ? ' v' ~ s.active_version : ''), icon: 'fa-play'}, ] %}
    {% for step in steps %} {% set n = loop.index %} {% set transferring = s.release_state == 'transferring' %} {% set done = n <= reached and not (transferring and n == 2) %} {% set current = transferring ? n == 2 : (reached > 0 and n == reached + 1) %}
  1. {{ step.label }}
  2. {% endfor %}
{% endmacro %} {% macro reachability(s) %} {% if s.reachable %} Online {% elseif s.last_heartbeat_at %} Keine Rückmeldung {% else %} Noch nie verbunden {% endif %} {% endmacro %} {% macro duration(seconds) %}{% apply spaceless %} {% set t = (seconds ?? 0)|round %} {% if t >= 3600 %}{{ t // 3600 }}:{{ '%02d'|format((t % 3600) // 60) }}:{{ '%02d'|format(t % 60) }}{% else %}{{ t // 60 }}:{{ '%02d'|format(t % 60) }}{% endif %} {% endapply %}{% endmacro %} {% macro bytes(value) %}{% apply spaceless %} {% if value is null %}–{% elseif value >= 1073741824 %}{{ (value / 1073741824)|number_format(1, ',', '.') }} GB{% elseif value >= 1048576 %}{{ (value / 1048576)|number_format(1, ',', '.') }} MB{% else %}{{ (value / 1024)|number_format(0, ',', '.') }} KB{% endif %} {% endapply %}{% endmacro %} {# Vorschaubild direkt aus dem Video (lädt erst, wenn sichtbar) #} {% macro thumb(media, stored = true, badge = null) %}
{% if stored %}{% endif %} {% if badge %}{{ badge }}{% endif %}
{% endmacro %} {% macro orientation(value, prefix = '') %}{% apply spaceless %} {% if value in ['portrait', 'landscape'] %}{{ prefix }}{{ value == 'portrait' ? 'Hochformat' : 'Querformat' }}{% endif %} {% endapply %}{% endmacro %} {% macro format(media) %}{% apply spaceless %} {{ media.width ? media.width ~ '×' ~ media.height ~ (media.orientation == 'portrait' ? ' hoch' : (media.orientation == 'landscape' ? ' quer')) ~ ' · ' }}{{ media.videoCodec ?? '?' }}{{ media.audioCodec ? ' / ' ~ media.audioCodec : ' · ohne Ton' }} {% endapply %}{% endmacro %}