593feddc3f
- 将模型选择器替换为统一的 shadcn 风格下拉组件 - 移除原生数字输入框的步进箭头样式 - 更新默认定时同步配置为每5分钟执行 - 修复画布助手和节点配置中的模型选择逻辑 - 统一各页面中的模型选择器样式和交互行为
75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
package service
|
|
|
|
import (
|
|
"log"
|
|
"sync"
|
|
|
|
"github.com/basketikun/infinite-canvas/model"
|
|
"github.com/basketikun/infinite-canvas/repository"
|
|
"github.com/robfig/cron/v3"
|
|
)
|
|
|
|
const defaultPromptSyncCron = "*/5 * * * *"
|
|
|
|
var (
|
|
promptSyncCron *cron.Cron
|
|
promptSyncOnce sync.Once
|
|
promptSyncMu sync.Mutex
|
|
)
|
|
|
|
func StartPromptSyncScheduler() {
|
|
promptSyncOnce.Do(func() {
|
|
promptSyncCron = cron.New()
|
|
promptSyncCron.Start()
|
|
})
|
|
RefreshPromptSyncScheduler()
|
|
}
|
|
|
|
func RefreshPromptSyncScheduler() {
|
|
promptSyncMu.Lock()
|
|
defer promptSyncMu.Unlock()
|
|
if promptSyncCron == nil {
|
|
return
|
|
}
|
|
for _, entry := range promptSyncCron.Entries() {
|
|
promptSyncCron.Remove(entry.ID)
|
|
}
|
|
settings, err := repository.GetSettings()
|
|
if err != nil {
|
|
log.Printf("load prompt sync setting failed err=%v", err)
|
|
return
|
|
}
|
|
setting := normalizePromptSyncSetting(settings.Private.PromptSync)
|
|
if setting.Enabled == nil || !*setting.Enabled {
|
|
return
|
|
}
|
|
if _, err := promptSyncCron.AddFunc(setting.Cron, SyncRemotePromptCategories); err != nil {
|
|
log.Printf("add prompt sync cron failed cron=%s err=%v", setting.Cron, err)
|
|
}
|
|
}
|
|
|
|
func SyncRemotePromptCategories() {
|
|
for _, category := range repository.PromptCategories() {
|
|
if !category.Remote {
|
|
continue
|
|
}
|
|
log.Printf("scheduled prompt sync start category=%s", category.Category)
|
|
if _, err := SyncPromptCategory(category.Category); err != nil {
|
|
log.Printf("scheduled prompt sync failed category=%s err=%v", category.Category, err)
|
|
continue
|
|
}
|
|
log.Printf("scheduled prompt sync done category=%s", category.Category)
|
|
}
|
|
}
|
|
|
|
func normalizePromptSyncSetting(setting model.PromptSyncSetting) model.PromptSyncSetting {
|
|
if setting.Cron == "" {
|
|
setting.Cron = defaultPromptSyncCron
|
|
}
|
|
if setting.Enabled == nil {
|
|
enabled := true
|
|
setting.Enabled = &enabled
|
|
}
|
|
return setting
|
|
}
|