You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.4 KiB
92 lines
2.4 KiB
package ugc |
|
|
|
import ( |
|
"context" |
|
"time" |
|
|
|
"go-common/app/job/main/tv/dao/lic" |
|
model "go-common/app/job/main/tv/model/pgc" |
|
ugcmdl "go-common/app/job/main/tv/model/ugc" |
|
"go-common/library/log" |
|
) |
|
|
|
// syncLic: sync our arc data to License owner |
|
func (s *Service) modArcproc() (err error) { |
|
defer s.waiter.Done() |
|
var cid int64 |
|
for { |
|
cAids, ok := <-s.modArcCh |
|
if !ok { |
|
log.Warn("[modLic] channel quit") |
|
return |
|
} |
|
for _, cAid := range cAids { |
|
if cid, err = s.dao.VideoSubmit(ctx, cAid); err != nil { |
|
log.Warn("modArc Aid %d, Err %v, Jump", cAid, err) |
|
time.Sleep(time.Duration(s.c.UgcSync.Frequency.ErrorWait)) |
|
continue |
|
} |
|
log.Info("modArc Aid %d, Can submit because CID %d already submitted", cAid, cid) |
|
if err = s.modArc(ctx, cAid); err != nil { |
|
log.Warn("modArc Aid %d Err %v", cAid, err) |
|
continue |
|
} |
|
} |
|
} |
|
} |
|
|
|
func (s *Service) modArc(ctx context.Context, cAid int64) (err error) { |
|
var ( |
|
skeleton = &ugcmdl.LicSke{} |
|
licData *model.License |
|
xmlBody string |
|
arc *ugcmdl.Archive |
|
) |
|
if arc, err = s.dao.ParseArc(ctx, cAid); err != nil { |
|
log.Warn("ParseArc Aid %d not found", cAid) |
|
} |
|
skeleton.Arc = arc.ToSimple() |
|
skeleton.Videos = []*ugcmdl.SimpleVideo{} // empty videos |
|
// build the license data and transform to xml |
|
if licData, err = s.auditMsg(skeleton); err != nil { |
|
log.Error("build lic msg %d error %v", cAid, err) |
|
return |
|
} |
|
xmlBody = lic.PrepareXML(licData) |
|
// call api |
|
if _, err = s.licDao.CallRetry(ctx, s.c.Sync.API.AddURL, xmlBody); err != nil { |
|
log.Error("xml call %d error %v", cAid, err) |
|
return |
|
} |
|
// update the arc & videos' submit status to finish |
|
if err = s.dao.FinishArc(ctx, cAid); err != nil { |
|
log.Error("finishArc %d Error %v", cAid, err) |
|
} |
|
return |
|
} |
|
|
|
// wrapSyncLic warps the syncLic method with aidMap |
|
func (s *Service) wrapSyncLic(ctx context.Context, aids []int64) (err error) { |
|
var arc *ugcmdl.Archive |
|
for _, cAid := range aids { |
|
if arc, err = s.dao.ParseArc(ctx, cAid); err != nil { |
|
log.Warn("wrapSyncLic ParseArc Aid %d not found", cAid) |
|
continue |
|
} |
|
arcAllow := &ugcmdl.ArcAllow{} |
|
arcAllow.FromArchive(arc) |
|
if !s.arcAllowImport(arcAllow) { |
|
log.Warn("wrapSyncLic cAid %d Can't play", cAid) |
|
continue |
|
} |
|
if arc.Deleted == 1 { |
|
log.Warn("wrapSyncLic cAid %d Deleted", cAid) |
|
continue |
|
} |
|
if err = s.syncLic(cAid, arc.ToSimple()); err != nil { |
|
log.Error("wrapSyncLic cAid %d Err %v", cAid, err) |
|
continue |
|
} |
|
} |
|
return |
|
}
|
|
|