64 lines
1.8 KiB
Go
64 lines
1.8 KiB
Go
package tasks
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/Silo-Server/silo-server/internal/plugins"
|
|
"github.com/Silo-Server/silo-server/internal/taskmanager"
|
|
)
|
|
|
|
type PluginUpdateChecker interface {
|
|
Check(ctx context.Context, opts plugins.AutoUpdateOptions) (plugins.AutoUpdateSummary, error)
|
|
}
|
|
|
|
type CheckPluginUpdatesTask struct {
|
|
checker PluginUpdateChecker
|
|
}
|
|
|
|
func NewCheckPluginUpdatesTask(checker PluginUpdateChecker) *CheckPluginUpdatesTask {
|
|
return &CheckPluginUpdatesTask{checker: checker}
|
|
}
|
|
|
|
func (t *CheckPluginUpdatesTask) Key() string { return "check_plugin_updates" }
|
|
func (t *CheckPluginUpdatesTask) Name() string { return "Check Plugin Updates" }
|
|
func (t *CheckPluginUpdatesTask) Description() string {
|
|
return "Fetches plugin repositories and applies or records available plugin updates"
|
|
}
|
|
func (t *CheckPluginUpdatesTask) Category() taskmanager.TaskCategory {
|
|
return taskmanager.TaskCategorySystem
|
|
}
|
|
func (t *CheckPluginUpdatesTask) IsHidden() bool { return false }
|
|
|
|
func (t *CheckPluginUpdatesTask) DefaultTriggers() []taskmanager.TriggerConfig {
|
|
return []taskmanager.TriggerConfig{
|
|
{Type: taskmanager.TriggerTypeInterval, IntervalMs: 24 * 60 * 60 * 1000},
|
|
}
|
|
}
|
|
|
|
func (t *CheckPluginUpdatesTask) Execute(ctx context.Context, progress taskmanager.ProgressReporter) error {
|
|
progress.Report(0, "Checking plugin repositories")
|
|
|
|
summary, err := t.checker.Check(ctx, plugins.AutoUpdateOptions{
|
|
SeedDefaultRepository: true,
|
|
AutoInstallDefaults: false,
|
|
})
|
|
if err != nil {
|
|
return fmt.Errorf("check plugin updates: %w", err)
|
|
}
|
|
|
|
resultData, err := json.Marshal(summary)
|
|
if err == nil {
|
|
progress.SetResultData(resultData)
|
|
}
|
|
|
|
progress.Report(100, fmt.Sprintf(
|
|
"Checked %d catalog entries, applied %d updates, recorded %d available updates",
|
|
summary.CatalogEntries,
|
|
summary.UpdatesApplied,
|
|
summary.UpdatesAvailable,
|
|
))
|
|
return nil
|
|
}
|