feat: add Scheduler provider + multi-provider UX fixes
Scheduler provider: - Virtual provider (no external service) that emits SCHEDULED_MESSAGE events on user-defined intervals or cron expressions - Custom variables stored in tracker filters, flattened into template context - fire_count persists across triggers via tracker state - APScheduler CronTrigger support for cron-mode schedules - Default templates (EN+RU), seeded on startup Multi-provider UX fixes: - Tracking config hides Immich-specific sections (periodic, scheduled, memory, asset display) for non-Immich providers - Command config driven by provider capabilities — hides commands/settings for providers without bot commands - Template config hides empty "Scheduled Messages" group - Test menu on tracker targets is provider-aware (Immich shows all 4 test types, others show only basic) - Removed redundant Test button from tracker card - System-owned tracking configs (user_id=0) seeded for Gitea + Scheduler - Fixed ownership checks to allow system configs in tracker-target links - Capabilities cache shared across template-configs and command-configs - Command tracker bot selector uses EntitySelect instead of raw select - Sample context includes Gitea + Scheduler variables for template preview
This commit is contained in:
@@ -275,13 +275,9 @@
|
||||
|
||||
<!-- Add listener -->
|
||||
<div class="flex items-center gap-2 mt-2">
|
||||
<select bind:value={newListenerBotId[trk.id]}
|
||||
class="flex-1 px-2 py-1 text-xs border border-[var(--color-border)] rounded-md bg-[var(--color-background)]">
|
||||
<option value={0} disabled selected>{t('commandTracker.selectBot')}</option>
|
||||
{#each telegramBots as bot}
|
||||
<option value={bot.id}>{bot.name} {bot.bot_username ? `(@${bot.bot_username})` : ''}</option>
|
||||
{/each}
|
||||
</select>
|
||||
<div class="flex-1">
|
||||
<EntitySelect items={botItems} bind:value={newListenerBotId[trk.id]} placeholder={t('commandTracker.selectBot')} />
|
||||
</div>
|
||||
<button onclick={() => addListener(trk.id)} disabled={!newListenerBotId[trk.id] || addingListener[trk.id]}
|
||||
class="text-xs px-3 py-1 bg-[var(--color-primary)] text-[var(--color-primary-foreground)] rounded-md hover:opacity-90 disabled:opacity-50">
|
||||
{addingListener[trk.id] ? t('common.loading') : t('commandTracker.addListener')}
|
||||
|
||||
Reference in New Issue
Block a user