Æ: Jitsi Meeting Reports

Jitsi Meeting Reports

{#if $ae_loc.edit_mode} {/if}
{#if $ae_loc.edit_mode && $ae_loc.trusted_access}
{#if show_url_builder}
{/if}
{/if}
{#if $ae_loc.edit_mode} {/if}
{#if $ae_loc.edit_mode}
{/if}
{#if filters_are_modified} {/if}
{#if $ae_loc.edit_mode && (exclude_uuids.length > 0 || known_meetings.length > 0)}
Active Exclusions
Excluded Novi UUIDs ({exclude_uuids.length})
{#each exclude_uuids as uuid (uuid)}
{uuid}
{/each}
Known Meeting Names ({known_meetings.length})
{#each known_meetings as meeting_name (meeting_name)}
{meeting_name}
{/each}
{/if} {#if meetings_loading}
{#each [1, 2, 3, 4] as _, i (i)}
{/each}
{:else if meetings_error}
Error Loading Reports

An error occurred while fetching the meeting reports:

{meetings_error}
{:else} {#if meetings_all.length > 0}
{summary.count}
Meetings Shown
{summary.total_participants}
Total Participants
{summary.avg_duration}
Avg Duration
{summary.total_duration}
Total Duration
{/if} {#if group_by_room} {#if meetings_grouped.size > 0}
{#each meetings_grouped as [room_name, sessions] (room_name)} {@const stats = room_stats(sessions)}
{#if is_room_open(room_name)}
{#each sessions as m (m.meeting_id)} {@const mods = m.real_participants.filter((p) => p.role === 'moderator')} {@const others = m.real_participants.filter((p) => p.role !== 'moderator')} {@const all_names = m.real_participants.map((p) => `${p.displayName} (${p.role})`).join('\n')} {@const participant_copy_text = build_participant_copy_text(m.real_participants)} {/each}
Date Start End Duration # Participants
{new Date( m.start_time ).toLocaleDateString()} {new Date( m.start_time ).toLocaleTimeString( [], { hour: '2-digit', minute: '2-digit' } )} {compute_end_time(m.start_time, m.final_duration)} {m.final_duration} {m.real_participant_count} {#if m.real_participant_count === 0} {:else}
{#if mods.length > 0}
Mod: {mods.map((p) => p.displayName).join(', ')}
{/if} {#if others.length > 0}
{others.map((p) => p.displayName).join(', ')}
{/if}
{/if}
{/if}
{/each}
{:else}
{#if meetings_all.length > 0}
No meetings match the current filters

Try adjusting the filters or clearing the date range.

{:else}
No Meeting Reports Found

There are no Jitsi activity logs to display.

{/if}
{/if} {:else} {#if meetings_filtered.length > 0}
{#each meetings_filtered as meeting (meeting.meeting_id)}
toggle_accordion(meeting.meeting_id)}>
{meeting.room_name}
{new Date(meeting.start_time).toLocaleString()} {#if meeting.final_duration && meeting.final_duration !== '00:00:00'} {compute_end_time(meeting.start_time, meeting.final_duration)} {/if}
{meeting.final_duration} {meeting.real_participant_count} {meeting.real_participant_count === 1 ? 'participant' : 'participants'}
{#if open_accordions[meeting.meeting_id]}
Event Timeline
{#if meeting.events && meeting.events.length > 0}
    {#each meeting.events as event, i (i)}
  • [{new Date( event.timestamp ).toLocaleTimeString()}] {ae_util.to_title_case( event.action.replace( 'jitsi_meeting_', '' ) )} {#if event.details?.full_name} — {event .details .full_name} {/if}
  • {/each}
{:else}

No discrete events recorded.

{/if}
Final Participants ({meeting.real_participant_count})
{#if meeting.real_participants && meeting.real_participants.length > 0} {#each meeting.real_participants as participant (participant.displayName)} {/each}
Name Role
{participant.displayName} {ae_util.to_title_case( participant.role )}
{:else}

No participant data available.

{/if}
{/if}
{/each}
{:else}
{#if meetings_all.length > 0}
No meetings match the current filters

Try lowering the minimum participants or clearing the date range.

{:else}
No Meeting Reports Found

There are no Jitsi activity logs to display.

{/if}
{/if} {/if} {/if}