fix: provider-aware collection count labels in tracker list

"1 album(s)" now shows "1 device(s)" for NUT, "1 repo(s)" for Gitea,
"1 board(s)" for Planka instead of hardcoded album label.
This commit is contained in:
2026-03-24 11:48:26 +03:00
parent 2cc4bf699a
commit c6bb2b5b51
3 changed files with 18 additions and 1 deletions
+3
View File
@@ -183,6 +183,9 @@
"delete": "Delete", "delete": "Delete",
"confirmDelete": "Delete this tracker?", "confirmDelete": "Delete this tracker?",
"albums_count": "album(s)", "albums_count": "album(s)",
"repos_count": "repo(s)",
"boards_count": "board(s)",
"devices_count": "device(s)",
"every": "every", "every": "every",
"trackImages": "Track images", "trackImages": "Track images",
"trackVideos": "Track videos", "trackVideos": "Track videos",
+3
View File
@@ -183,6 +183,9 @@
"delete": "Удалить", "delete": "Удалить",
"confirmDelete": "Удалить этот трекер?", "confirmDelete": "Удалить этот трекер?",
"albums_count": "альбом(ов)", "albums_count": "альбом(ов)",
"repos_count": "репозиторий(ев)",
"boards_count": "доска(ок)",
"devices_count": "устройство(в)",
"every": "каждые", "every": "каждые",
"trackImages": "Отслеживать фото", "trackImages": "Отслеживать фото",
"trackVideos": "Отслеживать видео", "trackVideos": "Отслеживать видео",
@@ -277,6 +277,17 @@
return p?.name || `#${id}`; return p?.name || `#${id}`;
} }
const collectionCountLabel: Record<string, string> = {
immich: 'notificationTracker.albums_count',
gitea: 'notificationTracker.repos_count',
planka: 'notificationTracker.boards_count',
nut: 'notificationTracker.devices_count',
};
function getCollectionLabel(tracker: Tracker): string {
const pt = getProviderType(tracker);
return t(collectionCountLabel[pt] || 'notificationTracker.albums_count');
}
function configsForTracker(tracker: Tracker, configs: (TrackingConfig | TemplateConfig)[]): (TrackingConfig | TemplateConfig)[] { function configsForTracker(tracker: Tracker, configs: (TrackingConfig | TemplateConfig)[]): (TrackingConfig | TemplateConfig)[] {
const pt = getProviderType(tracker); const pt = getProviderType(tracker);
return pt ? configs.filter((c) => c.provider_type === pt) : configs; return pt ? configs.filter((c) => c.provider_type === pt) : configs;
@@ -423,7 +434,7 @@
<CrossLink href="/providers" icon="mdiServer" label={getProviderName(tracker.provider_id)} entityId={tracker.provider_id} /> <CrossLink href="/providers" icon="mdiServer" label={getProviderName(tracker.provider_id)} entityId={tracker.provider_id} />
</div> </div>
<p class="text-sm text-[var(--color-muted-foreground)]"> <p class="text-sm text-[var(--color-muted-foreground)]">
{(tracker.collection_ids || []).length} {t('notificationTracker.albums_count')} · {t('notificationTracker.every')} {tracker.scan_interval}s · {(tracker.tracker_targets || []).length} {t('notificationTracker.linkedTargets')} {(tracker.collection_ids || []).length} {getCollectionLabel(tracker)} · {t('notificationTracker.every')} {tracker.scan_interval}s · {(tracker.tracker_targets || []).length} {t('notificationTracker.linkedTargets')}
</p> </p>
</div> </div>
<div class="flex items-center gap-1 flex-wrap justify-end"> <div class="flex items-center gap-1 flex-wrap justify-end">