jellyfin/jellyfin · error · ArgumentException

Unrecognized trigger type: {info.Type}

Error message

Unrecognized trigger type: {info.Type}

What it means

Thrown by ScheduledTaskWorker.GetTrigger when info.Type doesn't match any known trigger type constant (DailyTrigger, WeeklyTrigger, IntervalTrigger, StartupTrigger). ArgumentException signals an unrecognized/unsupported trigger type string. This is the fallthrough after all known type branches.

Source

Thrown at Emby.Server.Implementations/ScheduledTasks/ScheduledTaskWorker.cs:659

            return new WeeklyTrigger(TimeSpan.FromTicks(info.TimeOfDayTicks.Value), info.DayOfWeek.Value, options);
        }

        if (info.Type == TaskTriggerInfoType.IntervalTrigger)
        {
            if (!info.IntervalTicks.HasValue)
            {
                throw new ArgumentException("Info did not contain a IntervalTicks.", nameof(info));
            }

            return new IntervalTrigger(TimeSpan.FromTicks(info.IntervalTicks.Value), options);
        }

        if (info.Type == TaskTriggerInfoType.StartupTrigger)
        {
            return new StartupTrigger(options);
        }

        throw new ArgumentException("Unrecognized trigger type: " + info.Type);
    }

    /// <summary>
    /// Disposes each trigger.
    /// </summary>
    private void DisposeTriggers()
    {
        foreach (var triggerInfo in InternalTriggers)
        {
            var trigger = triggerInfo.Item2;
            trigger.Triggered -= OnTriggerTriggered;
            trigger.Stop();
            if (trigger is IDisposable disposable)
            {
                disposable.Dispose();
            }
        }
    }

View on GitHub (pinned to ae8723026d)

Solutions

  1. Correct the trigger Type in the task config to a known value: DailyTrigger, WeeklyTrigger, IntervalTrigger, or StartupTrigger.
  2. Ensure case matches the TaskTriggerInfoType constants exactly.
  3. If the config came from a newer server, upgrade or remove the unsupported trigger.
  4. Re-create the trigger via the UI/API so only supported types are produced.

Example fix

// before
var info = new TaskTriggerInfo { Type = "daily" }; // wrong casing/value

// after
var info = new TaskTriggerInfo
{
    Type = TaskTriggerInfoType.DailyTrigger,
    TimeOfDayTicks = TimeSpan.FromHours(2).Ticks
};
Defensive patterns

Strategy: validation

Validate before calling

var known = new[] { TaskTriggerInfoType.DailyTrigger, TaskTriggerInfoType.WeeklyTrigger, TaskTriggerInfoType.IntervalTrigger, TaskTriggerInfoType.StartupTrigger };
if (!known.Contains(info.Type))
    throw new InvalidOperationException($"Unknown trigger type: {info.Type}");

Type guard

static bool IsKnownTriggerType(string type)
    => type is TaskTriggerInfoType.DailyTrigger or TaskTriggerInfoType.WeeklyTrigger
       or TaskTriggerInfoType.IntervalTrigger or TaskTriggerInfoType.StartupTrigger;

Try / catch

try { var trigger = GetTrigger(info); }
catch (ArgumentException ex) when (ex.Message.Contains("Unrecognized trigger type"))
{ _logger.LogError("Unsupported trigger type {Type}; removing trigger", info.Type); }

Prevention

When it happens

Trigger: Loading a scheduled task whose TaskTriggerInfo.Type is a string not equal to any of the known TaskTriggerInfoType constants. Comes from a config file with a typo'd or future/unknown trigger type.

Common situations: Typo in the trigger type string in the task config; a config from a newer server version with a trigger type this version doesn't know; hand-edited config with a wrong casing; plugin/custom trigger types not handled by this factory.

Related errors


AI-assisted analysis of jellyfin/jellyfin@ae8723026d (2026-08-13). Data as JSON: /api/errors/9bb3a63e477bff15. Report an issue: GitHub.