1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package pgc
- import (
- "context"
- "time"
- "go-common/app/job/main/tv/dao/lic"
- model "go-common/app/job/main/tv/model/pgc"
- "go-common/library/ecode"
- "go-common/library/log"
- )
- // pick the data from DB to audit and combine the XML for the license owner
- // producer, content data => channel
- func (s *Service) syncEPs() {
- defer s.waiter.Done()
- for {
- if s.daoClosed {
- log.Info("syncEPs DB closed!")
- return
- }
- readySids, err := s.dao.ReadySns(ctx)
- if err != nil || len(readySids) == 0 {
- time.Sleep(time.Duration(s.c.Sync.Frequency.ErrorWait))
- continue
- }
- for _, sid := range readySids {
- var contSlices [][]*model.Content
- if contSlices, err = s.dao.PickData(ctx, sid); err != nil || len(contSlices) == 0 {
- continue
- }
- for _, conts := range contSlices {
- if err = s.epsSync(sid, conts); err != nil {
- s.addRetryEps(conts)
- }
- s.dao.AuditingCont(ctx, conts) // update status to auditing
- }
- }
- time.Sleep(1 * time.Second)
- }
- }
- func (s *Service) epsSync(sid int64, conts []*model.Content) (err error) {
- var reqCall = &model.ReqEpLicCall{
- SID: sid,
- Conts: conts,
- }
- if reqCall.EpLic, err = s.epLicCreate(ctx, sid, conts); err != nil {
- return
- }
- return s.epLicCall(ctx, reqCall)
- }
- // epLicCreate picks the sid and conts to create the license model
- func (s *Service) epLicCreate(ctx context.Context, sid int64, conts []*model.Content) (epLic *model.License, err error) {
- var (
- season *model.TVEpSeason
- prefix = s.c.Sync.AuditPrefix
- programs []*model.Program
- )
- if season, err = s.dao.Season(ctx, int(sid)); err != nil {
- log.Error("Season ID %d, Err %v", sid, err)
- return
- }
- epLic = newLic(season, s.c.Sync)
- epLic.XMLData.Service.Head.Count = len(conts)
- for _, v := range conts {
- s.dao.WaitCall(ctx, v.EPID) // avoid always selecting the same data, give time to the caller
- url, _, errPlay := s.playurlDao.Playurl(ctx, v.CID)
- if errPlay != nil {
- log.Error("syncEPs EP Playurl EPID = %d, Error: %v", v.EPID, errPlay)
- s.addRetryEp(v)
- continue
- }
- ep, errEP := s.dao.EP(ctx, v.EPID)
- if errEP != nil {
- log.Error("EpContent EPID %d Can't found", v.EPID)
- continue
- }
- program := model.CreateProgram(prefix, ep)
- program.ProgramMediaList = &model.PMList{
- ProgramMedia: []*model.PMedia{model.CreatePMedia(s.c.Sync.AuditPrefix, v.EPID, url)},
- }
- programs = append(programs, program)
- }
- epLic.XMLData.Service.Body.ProgramSetList.ProgramSet[0].ProgramList.Program = programs
- return
- }
- // epLicCall picks the license and sync to audit
- func (s *Service) epLicCall(ctx context.Context, req *model.ReqEpLicCall) (err error) {
- var cfg = s.c.Sync
- res, err := s.licDao.CallRetry(ctx, cfg.API.AddURL, lic.PrepareXML(req.EpLic))
- if res == nil {
- err = ecode.TvSyncErr
- }
- return
- }
|