mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-09-27 09:52:06 +08:00
75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
package plugin_crontab
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"m7s.live/v5/pkg/util"
|
|
|
|
"m7s.live/v5"
|
|
"m7s.live/v5/plugin/crontab/pb"
|
|
"m7s.live/v5/plugin/crontab/pkg"
|
|
)
|
|
|
|
type CrontabPlugin struct {
|
|
m7s.Plugin
|
|
pb.UnimplementedApiServer
|
|
crontabs util.Collection[string, *Crontab]
|
|
recordPlans util.Collection[uint, *pkg.RecordPlan]
|
|
}
|
|
|
|
var _ = m7s.InstallPlugin[CrontabPlugin](m7s.PluginMeta{
|
|
ServiceDesc: &pb.Api_ServiceDesc,
|
|
RegisterGRPCHandler: pb.RegisterApiHandler,
|
|
})
|
|
|
|
func (ct *CrontabPlugin) OnInit() (err error) {
|
|
if ct.DB == nil {
|
|
ct.Error("DB is nil")
|
|
} else {
|
|
err = ct.DB.AutoMigrate(&pkg.RecordPlan{}, &pkg.RecordPlanStream{})
|
|
if err != nil {
|
|
return fmt.Errorf("auto migrate tables error: %v", err)
|
|
}
|
|
ct.Info("init database success")
|
|
|
|
// 初始化默认录制计划(工作日和周末计划)
|
|
ct.InitDefaultPlans()
|
|
|
|
// 查询所有录制计划
|
|
var plans []pkg.RecordPlan
|
|
if err = ct.DB.Find(&plans).Error; err != nil {
|
|
return fmt.Errorf("query record plans error: %v", err)
|
|
}
|
|
|
|
// 遍历所有计划
|
|
for _, plan := range plans {
|
|
// 将计划存入 recordPlans 集合
|
|
ct.recordPlans.Add(&plan)
|
|
|
|
// 如果计划已启用,查询对应的流信息并创建定时任务
|
|
if plan.Enable {
|
|
var streams []pkg.RecordPlanStream
|
|
model := &pkg.RecordPlanStream{PlanID: plan.ID}
|
|
if err = ct.DB.Model(model).Where(model).Find(&streams).Error; err != nil {
|
|
ct.Error("query record plan streams error: %v", err)
|
|
continue
|
|
}
|
|
|
|
// 为每个流创建定时任务
|
|
for _, stream := range streams {
|
|
crontab := &Crontab{
|
|
ctp: ct,
|
|
RecordPlan: &plan,
|
|
RecordPlanStream: &stream,
|
|
}
|
|
crontab.OnStart(func() {
|
|
ct.crontabs.Set(crontab)
|
|
})
|
|
ct.AddTask(crontab)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}
|