123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- package view
- import (
- "context"
- "time"
- "go-common/app/interface/main/tv/model"
- "go-common/app/interface/main/tv/model/view"
- arcwar "go-common/app/service/main/archive/api"
- "go-common/app/service/main/archive/model/archive"
- "go-common/library/ecode"
- "go-common/library/log"
- "go-common/library/sync/errgroup"
- )
- var (
- _rate = map[int]int64{15: 464, 16: 464, 32: 1028, 48: 1328, 64: 2192, 74: 3192, 80: 3192, 112: 6192, 116: 6192, 66: 1820}
- )
- func initPage(v *arcwar.Page, isBangumi bool) (page *view.Page) {
- page = &view.Page{}
- metas := make([]*view.Meta, 0, 4)
- for q, r := range _rate {
- meta := &view.Meta{
- Quality: q,
- Size: int64(float64(r*v.Duration) * 1.1 / 8.0),
- }
- metas = append(metas, meta)
- }
- if isBangumi {
- v.From = "bangumi"
- }
- page.Page = v
- page.Metas = metas
- return
- }
- func (s *Service) initPages(c context.Context, vs *view.Static, ap []*arcwar.Page) (err error) {
- var (
- cids []int64
- pages = make([]*view.Page, 0, len(ap))
- vsAuth map[int64]*model.VideoCMS
- isBangumi = vs.AttrVal(archive.AttrBitIsBangumi) == archive.AttrYes
- emptyArc = true
- )
- for _, v := range ap {
- cids = append(cids, v.Cid)
- }
- if vsAuth, err = s.cmsDao.LoadVideosMeta(c, cids); err != nil {
- log.Error("initPages LoadVideosMeta Cid %v, Err %v", cids, err)
- return
- }
- for _, v := range ap {
- if auth, ok := vsAuth[v.Cid]; ok { // auditing data can't show
- if !auth.Auditing() {
- pages = append(pages, initPage(v, isBangumi))
- }
- if auth.CanPlay() {
- emptyArc = false
- }
- }
- }
- if emptyArc { // if the arc doesn't have any video that can play, we put its valid field to 0 in an asynchronous manner
- log.Info("emptyArc add Aid %d, Cids %v", vs.Aid, cids)
- s.emptyArcCh <- vs.Aid
- }
- if len(pages) == 0 {
- err = ecode.TvAllDataAuditing
- return
- }
- vs.Pages = pages
- return
- }
- // initRelates init Relates
- func (s *Service) initRelates(c context.Context, v *view.View, ip string, now time.Time) {
- var (
- rls []*view.Relate
- err error
- )
- if rls, err = s.dealRcmdRelate(ctx, v.Aid, ip); err != nil {
- log.Error("initRelates For Aid %d, Error %v", v.Aid, err)
- return
- }
- if len(rls) == 0 {
- s.prom.Incr("zero_relates")
- return
- }
- v.Relates = rls
- }
- func (s *Service) dealRcmdRelate(c context.Context, aid int64, ip string) (rls []*view.Relate, err error) {
- if rls, err = s.arcDao.RelatesCache(c, aid); err != nil { // mc error
- return
- }
- if len(rls) != 0 {
- s.pHit.Incr("relate_cache")
- return
- }
- var (
- aids []int64
- as map[int64]*arcwar.Arc
- arcMetas map[int64]*model.ArcCMS
- )
- s.pMiss.Incr("relate_cache")
- if aids, err = s.arcDao.RelateAids(c, aid, ip); err != nil { // backsource
- return
- }
- if len(aids) == 0 {
- return
- }
- g, errCtx := errgroup.WithContext(c)
- g.Go(func() (err error) {
- as, err = s.arcDao.Archives(errCtx, aids)
- return
- })
- g.Go(func() (err error) {
- arcMetas, err = s.cmsDao.LoadArcsMediaMap(errCtx, aids)
- return
- })
- if err = g.Wait(); err != nil {
- log.Error("dealRcmdRelate For Aid %d, Err %v", aid, err)
- return
- }
- for _, aid := range aids {
- if a, ok := as[aid]; ok {
- // auth, filter can't play ones
- if arcCMS, okCMS := arcMetas[aid]; !okCMS {
- log.Error("LoadArcsMediaMap Missing Aid %d Info", aid)
- continue
- } else if canplay, _ := s.cmsDao.UgcErrMsg(arcCMS.Deleted, arcCMS.Result, arcCMS.Valid); !canplay {
- log.Warn("LoadArcsMediaMap Aid %d Can't play, Struct %v", aid, arcCMS)
- continue
- }
- // can play, init them
- r := &view.Relate{}
- r.FromAv(a, "")
- rls = append(rls, r)
- }
- }
- if len(rls) != 0 {
- s.arcDao.AddRelatesCache(aid, rls)
- }
- return
- }
|