193 lines
5.2 KiB
Go
193 lines
5.2 KiB
Go
package view
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"go-common/app/interface/main/app-intl/model"
|
|
"go-common/app/interface/main/app-intl/model/view"
|
|
"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/net/metadata"
|
|
"go-common/library/sync/errgroup"
|
|
"go-common/library/text/translate/chinese"
|
|
)
|
|
|
|
const (
|
|
// _descLen is.
|
|
_descLen = 250
|
|
// _avTypeAv is.
|
|
_avTypeAv = 1
|
|
// _businessLike is.
|
|
_businessLike = "archive"
|
|
)
|
|
|
|
// View all view data.
|
|
func (s *Service) View(c context.Context, mid, aid, movieID int64, plat int8, build int, ak, mobiApp, device, buvid, cdnIP, network, adExtra, from string, now time.Time, locale string) (v *view.View, err error) {
|
|
if v, err = s.ViewPage(c, mid, aid, movieID, plat, build, ak, mobiApp, device, cdnIP, true, now, locale); err != nil {
|
|
ip := metadata.String(c, metadata.RemoteIP)
|
|
if err == ecode.AccessDenied || err == ecode.NothingFound {
|
|
log.Warn("s.ViewPage() mid(%d) aid(%d) movieID(%d) plat(%d) ak(%s) ip(%s) cdn_ip(%s) error(%v)", mid, aid, movieID, plat, ak, ip, cdnIP, err)
|
|
} else {
|
|
log.Error("s.ViewPage() mid(%d) aid(%d) movieID(%d) plat(%d) ak(%s) ip(%s) cdn_ip(%s) error(%v)", mid, aid, movieID, plat, ak, ip, cdnIP, err)
|
|
}
|
|
return
|
|
}
|
|
isTW := model.TWLocale(locale)
|
|
g, ctx := errgroup.WithContext(c)
|
|
g.Go(func() (err error) {
|
|
v.VIPActive = s.vipActiveCache[view.VIPActiveView]
|
|
return
|
|
})
|
|
g.Go(func() (err error) {
|
|
s.initReqUser(ctx, v, mid, plat, build)
|
|
if v.AttrVal(archive.AttrBitIsPGC) != archive.AttrYes {
|
|
s.initContributions(ctx, v, isTW)
|
|
}
|
|
return
|
|
})
|
|
g.Go(func() (err error) {
|
|
s.initRelateCMTag(ctx, v, plat, build, mid, buvid, mobiApp, device, network, adExtra, from, now, isTW)
|
|
return
|
|
})
|
|
if v.AttrVal(archive.AttrBitIsPGC) != archive.AttrYes {
|
|
g.Go(func() (err error) {
|
|
s.initDM(ctx, v)
|
|
return
|
|
})
|
|
g.Go(func() (err error) {
|
|
s.initAudios(ctx, v)
|
|
return
|
|
})
|
|
if len([]rune(v.Desc)) > _descLen {
|
|
g.Go(func() (err error) {
|
|
if desc, _ := s.arcDao.Description(ctx, v.Aid); desc != "" {
|
|
v.Desc = desc
|
|
}
|
|
return
|
|
})
|
|
}
|
|
}
|
|
if err = g.Wait(); err != nil {
|
|
log.Error("%+v", err)
|
|
}
|
|
return
|
|
}
|
|
|
|
// ViewPage view page data.
|
|
func (s *Service) ViewPage(c context.Context, mid, aid, movieID int64, plat int8, build int, ak, mobiApp, device, cdnIP string, nMovie bool, now time.Time, locale string) (v *view.View, err error) {
|
|
if aid == 0 && movieID == 0 {
|
|
err = ecode.NothingFound
|
|
return
|
|
}
|
|
var (
|
|
vs *view.ViewStatic
|
|
vp *archive.View3
|
|
seasoninfo map[int64]int64
|
|
ok bool
|
|
)
|
|
if movieID != 0 {
|
|
if seasoninfo, err = s.banDao.SeasonidAid(c, movieID, now); err != nil {
|
|
log.Error("%+v", err)
|
|
err = ecode.NothingFound
|
|
return
|
|
}
|
|
if aid, ok = seasoninfo[movieID]; !ok || aid == 0 {
|
|
err = ecode.NothingFound
|
|
return
|
|
}
|
|
var a *api.Arc
|
|
if a, err = s.arcDao.Archive3(c, aid); err != nil {
|
|
log.Error("%+v", err)
|
|
err = ecode.NothingFound
|
|
return
|
|
}
|
|
if a == nil {
|
|
err = ecode.NothingFound
|
|
return
|
|
}
|
|
vs = &view.ViewStatic{Archive3: archive.BuildArchive3(a)}
|
|
s.prom.Incr("from_movieID")
|
|
} else {
|
|
if vp, err = s.arcDao.ViewCache(c, aid); err != nil {
|
|
log.Error("%+v", err)
|
|
}
|
|
if vp == nil || vp.Archive3 == nil || len(vp.Pages) == 0 || vp.AttrVal(archive.AttrBitIsMovie) == archive.AttrYes {
|
|
if vp, err = s.arcDao.View3(c, aid); err != nil {
|
|
log.Error("%+v", err)
|
|
err = ecode.NothingFound
|
|
return
|
|
}
|
|
}
|
|
if vp == nil || vp.Archive3 == nil || len(vp.Pages) == 0 {
|
|
err = ecode.NothingFound
|
|
return
|
|
}
|
|
vs = &view.ViewStatic{Archive3: vp.Archive3}
|
|
s.initPages(c, vs, vp.Pages)
|
|
s.prom.Incr("from_aid")
|
|
}
|
|
isTW := model.TWLocale(locale)
|
|
if isTW {
|
|
out := chinese.Converts(c, vs.Title, vs.Desc)
|
|
vs.Title = out[vs.Title]
|
|
vs.Desc = out[vs.Desc]
|
|
}
|
|
// TODO fuck chanpin
|
|
vs.Stat.DisLike = 0
|
|
if s.overseaCheck(vs.Archive3, plat) {
|
|
err = ecode.AreaLimit
|
|
return
|
|
}
|
|
// check region area limit
|
|
if err = s.areaLimit(c, plat, int16(vs.TypeID)); err != nil {
|
|
return
|
|
}
|
|
v = &view.View{ViewStatic: vs, DMSeg: 1, PlayerIcon: s.playerIcon}
|
|
if v.AttrVal(archive.AttrBitIsPGC) != archive.AttrYes {
|
|
// check access
|
|
if err = s.checkAceess(c, mid, v.Aid, int(v.State), int(v.Access), ak); err != nil {
|
|
// archive is ForbitFixed and Transcoding and StateForbitDistributing need analysis history body .
|
|
if v.State != archive.StateForbidFixed {
|
|
return
|
|
}
|
|
err = nil
|
|
}
|
|
if v.Access > 0 {
|
|
v.Stat.View = 0
|
|
}
|
|
}
|
|
g, ctx := errgroup.WithContext(c)
|
|
if mid != 0 {
|
|
g.Go(func() (err error) {
|
|
v.History, _ = s.arcDao.Progress(ctx, v.Aid, mid)
|
|
return
|
|
})
|
|
}
|
|
if v.AttrVal(archive.AttrBitIsPGC) == archive.AttrYes {
|
|
if v.AttrVal(archive.AttrBitIsMovie) != archive.AttrYes {
|
|
g.Go(func() error {
|
|
return s.initPGC(ctx, v, mid, build, mobiApp, device)
|
|
})
|
|
} else {
|
|
g.Go(func() error {
|
|
return s.initMovie(ctx, v, mid, build, mobiApp, device, nMovie)
|
|
})
|
|
}
|
|
} else {
|
|
g.Go(func() (err error) {
|
|
if err = s.initDownload(ctx, v, mid, cdnIP); err != nil {
|
|
ip := metadata.String(ctx, metadata.RemoteIP)
|
|
log.Error("aid(%d) mid(%d) ip(%s) cdn_ip(%s) error(%+v)", v.Aid, mid, ip, cdnIP, err)
|
|
}
|
|
return
|
|
})
|
|
}
|
|
if err = g.Wait(); err != nil {
|
|
log.Error("%+v", err)
|
|
}
|
|
return
|
|
}
|