03396a9d18
- 后端新增批量删除提示词接口和实现 - 前端管理页面添加多选和批量删除功能 - 添加定时同步GitHub远程提示词源功能 - 新增系统设置中的提示词同步配置选项 - 更新文档说明新的批量操作和定时同步功能 - 添加相关的测试用例和依赖库
71 lines
1.7 KiB
Go
71 lines
1.7 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 = "0 3 * * *"
|
|
|
|
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 {
|
|
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
|
|
}
|
|
return setting
|
|
}
|