{#if !loaded} {:else if loadError}
{loadError}
{:else if showForm}
{#if error}
{error}
{/if}
form.icon = v} />
{#if collections.length > 0}
{#each collections.filter(a => !collectionFilter || (a.albumName || a.name || '').toLowerCase().includes(collectionFilter.toLowerCase())) as col} {/each}
{/if}
{/if} {#if loaded && !loadError} {#if trackers.length === 0 && !showForm}

{t('trackers.noTrackers')}

{:else if !showForm}
{#each trackers as tracker}

{tracker.name}

{tracker.enabled ? t('trackers.active') : t('trackers.paused')}

{(tracker.collection_ids || []).length} {t('trackers.albums_count')} · {t('trackers.every')} {tracker.scan_interval}s · {(tracker.tracker_targets || []).length} {t('trackers.linkedTargets')}

edit(tracker)} /> { try { await api(`/trackers/${tracker.id}/trigger`, { method: 'POST' }); snackSuccess(t('snack.targetTestSent')); } catch (err) { snackError((err as any).message); } }} /> toggle(tracker)} disabled={toggling[tracker.id]} /> startDelete(tracker)} variant="danger" />
{#if expandedTracker === tracker.id}
{#if (tracker.tracker_targets || []).length === 0}

{t('trackers.noLinkedTargets')}

{:else} {#each tracker.tracker_targets as tt}
{tt.target_name || `Target #${tt.target_id}`} {tt.target_type} {#if !tt.enabled} {t('trackers.paused')} {/if}
openTestMenu(tt.id, e)} disabled={Object.keys(ttTesting).some(k => k.startsWith(`${tt.id}_`) && ttTesting[k])} />
updateTargetLink(tracker.id, tt, 'enabled', !tt.enabled)} /> removeTargetLink(tracker.id, tt.id)} variant="danger" />
{/each} {/if} {#if getUnlinkedTargets(tracker).length > 0}
{/if}
{/if}
{/each}
{/if} {/if} {#if testMenuOpen}
testMenuOpen = null} onkeydown={(e) => { if (e.key === 'Escape') testMenuOpen = null; }}>
{#each testTypes as tt} {@const trackerId = trackers.find(t => t.tracker_targets?.some((x: any) => String(x.id) === testMenuOpen))?.id} {/each}
{/if} {#if linkWarning}
{ linkWarning = null; }} onkeydown={(e) => { if (e.key === 'Escape') linkWarning = null; }}>

Albums Missing Public Links

The following albums don't have valid public shared links. Without public links, notification messages won't include clickable URLs to albums or assets.

{#each linkWarning.albums as album}
{album.name} {album.issue === 'expired' ? 'Expired' : album.issue === 'password-protected' ? 'Password Protected' : 'No Link'}
{/each}

Public links allow anyone with the URL to view album contents. Albums without links will still be tracked and assets sent to chats, but messages won't include clickable links.

{#if linkWarning.albums.some(a => a.issue === 'missing')} {/if}
{/if} confirmDelete = null} />