123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403 |
- package region
- import (
- "strconv"
- "time"
- "go-common/app/interface/main/app-show/model"
- "go-common/app/interface/main/app-show/model/activity"
- "go-common/app/interface/main/app-show/model/banner"
- "go-common/app/interface/main/app-show/model/recommend"
- "go-common/app/interface/main/app-show/model/tag"
- accv1 "go-common/app/service/main/account/api"
- "go-common/app/service/main/archive/api"
- seasongrpc "go-common/app/service/openplatform/pgc-season/api/grpc/season/v1"
- xtime "go-common/library/time"
- )
- const (
- _activityForm = "2006-01-02 15:04:05"
- )
- type Region struct {
- ID int64 `json:"-"`
- Rid int `json:"tid"`
- Reid int `json:"reid"`
- Name string `json:"name"`
- Logo string `json:"logo"`
- Goto string `json:"goto"`
- Param string `json:"param"`
- Rank string `json:"-"`
- Plat int8 `json:"-"`
- Build int `json:"-"`
- Condition string `json:"-"`
- Area string `json:"-"`
- Language string `json:"-"`
- URI string `json:"uri,omitempty"`
- Islogo int8 `json:"-"`
- Rtype int8 `json:"type"`
- Entrance int8 `json:"-"`
- IsBangumi int8 `json:"is_bangumi,omitempty"`
- Children []*Region `json:"children,omitempty"`
- Config []*Config `json:"config,omitempty"`
- }
- type Limit struct {
- ID int64 `json:"-"`
- Rid int64 `json:"-"`
- Build int `json:"-"`
- Condition string `json:"-"`
- }
- type Config struct {
- ID int64 `json:"-"`
- Rid int64 `json:"-"`
- ScenesID int `json:"-"`
- ScenesName string `json:"scenes_name,omitempty"`
- ScenesType string `json:"scenes_type,omitempty"`
- }
- type Show struct {
- Banner map[string][]*banner.Banner `json:"banner,omitempty"`
- Card []*Head `json:"card,omitempty"`
- Tag *tag.Tag `json:"tag,omitempty"`
- TopTag []*SimilarTag `json:"top_tag,omitempty"`
- NewTag *NewTag `json:"new_tag,omitempty"`
- Cbottom xtime.Time `json:"cbottom,omitempty"`
- Ctop xtime.Time `json:"ctop,omitempty"`
- Recommend []*ShowItem `json:"recommend,omitempty"`
- New []*ShowItem `json:"new"`
- Dynamic []*ShowItem `json:"dynamic,omitempty"`
- }
- type Head struct {
- CardID int `json:"card_id,omitempty"`
- Title string `json:"title,omitempty"`
- Cover string `json:"cover,omitempty"`
- Type string `json:"type,omitempty"`
- Date int64 `json:"date,omitempty"`
- Plat int8 `json:"-"`
- Build int `json:"-"`
- Condition string `json:"-"`
- URI string `json:"uri,omitempty"`
- Goto string `json:"goto,omitempty"`
- Param string `json:"param,omitempty"`
- Body []*ShowItem `json:"body,omitempty"`
- }
- type ShowItem struct {
- Title string `json:"title"`
- Cover string `json:"cover"`
- URI string `json:"uri"`
- NewURI string `json:"-"`
- Param string `json:"param"`
- FirstCid int64 `json:"cid,omitempty"`
- Goto string `json:"goto"`
- // up
- Mid int64 `json:"mid,omitempty"`
- Name string `json:"name,omitempty"`
- Face string `json:"face,omitempty"`
- Follower int `json:"follower,omitempty"`
- Attribute int `json:"attribute,omitempty"`
- OfficialVerify *OfficialVerify `json:"official_verify,omitempty"`
- // stat
- Play int `json:"play,omitempty"`
- Danmaku int `json:"danmaku,omitempty"`
- Reply int `json:"reply,omitempty"`
- Fav int `json:"favourite,omitempty"`
- // movie and bangumi badge
- Status int8 `json:"status,omitempty"`
- CoverMark string `json:"cover_mark,omitempty"`
- // ranking
- Pts int64 `json:"pts,omitempty"`
- Children []*ShowItem `json:"children,omitempty"`
- // av
- PubDate xtime.Time `json:"pubdate"`
- // av stat
- Duration int64 `json:"duration,omitempty"`
- // region
- Rid int `json:"rid,omitempty"`
- Rname string `json:"rname,omitempty"`
- Reid int `json:"reid,omitempty"`
- //new manager
- Desc string `json:"desc,omitempty"`
- Stime string `json:"stime,omitempty"`
- Etime string `json:"etime,omitempty"`
- Like int `json:"like,omitempty"`
- RedirectURL string `json:"-"`
- UGCPay int32 `json:"ugc_pay,omitempty"`
- Cooperation string `json:"cooperation,omitempty"`
- }
- type OfficialVerify struct {
- Type int `json:"type"`
- Desc string `json:"desc"`
- }
- type SimilarTag struct {
- TagId int `json:"tid"`
- TagName string `json:"tname"`
- Rid int `json:"rid,omitempty"`
- Rname string `json:"rname,omitempty"`
- Reid int `json:"reid,omitempty"`
- Rename string `json:"rename,omitempty"`
- }
- type NewTag struct {
- Position int `json:"pos"`
- Tag []*SimilarTag `json:"tag"`
- }
- func (c *Config) ConfigChange() {
- switch c.ScenesID {
- case 0:
- c.ScenesName = "region"
- c.ScenesType = "bottom"
- case 1:
- c.ScenesName = "region"
- c.ScenesType = "top"
- case 2:
- c.ScenesName = "rank"
- case 3:
- c.ScenesName = "search"
- case 4:
- c.ScenesName = "tag"
- case 5:
- c.ScenesName = "attention"
- }
- }
- // FromArc from recommend arc.
- func (i *ShowItem) FromArc(a *recommend.Arc) {
- i.fromArc(a)
- for _, as := range a.Others {
- child := &ShowItem{}
- child.fromArc(as)
- i.Children = append(i.Children, child)
- }
- }
- // FromArcBangumi from recommend arc bangumi.
- func (i *ShowItem) FromArcBangumi(a *recommend.Arc, sids map[int64]int64) {
- aidInt := fromAid(a.Aid)
- if sid, ok := sids[aidInt]; ok && sid != 0 {
- i.fromArcBangumi(a, sid)
- } else {
- i.fromArc(a)
- }
- for _, as := range a.Others {
- child := &ShowItem{}
- aidInt = fromAid(as.Aid)
- if sid, ok := sids[aidInt]; ok && sid != 0 {
- child.fromArcBangumi(as, sid)
- } else {
- child.fromArc(as)
- }
- i.Children = append(i.Children, child)
- }
- }
- // fromAid
- func fromAid(aidInter interface{}) (aid int64) {
- switch aidType := aidInter.(type) {
- case string:
- if aidtmp, err := strconv.ParseInt(aidType, 10, 64); err == nil && aidtmp != 0 {
- aid = aidtmp
- }
- case float64:
- aid = int64(aidType)
- }
- return
- }
- func (i *ShowItem) fromArc(a *recommend.Arc) {
- i.Title = a.Title
- i.Cover = a.Pic
- switch aid := a.Aid.(type) {
- case string:
- i.Param = aid
- case float64:
- i.Param = strconv.FormatInt(int64(aid), 10)
- }
- i.URI = model.FillURI(model.GotoAv, i.Param, nil)
- i.Goto = model.GotoAv
- v, ok := a.Views.(float64)
- if ok {
- i.Play = int(v)
- }
- i.Danmaku = a.Danmaku
- i.Name = a.Author
- i.Reply = int(a.Comments)
- i.Fav = int(a.Favorites)
- i.Pts = a.Pts
- }
- func (i *ShowItem) fromArcBangumi(a *recommend.Arc, sid int64) {
- i.Title = a.Title
- i.Cover = a.Pic
- i.Param = strconv.FormatInt(sid, 10)
- i.URI = model.FillURI(model.GotoBangumi, i.Param, nil)
- i.Goto = model.GotoBangumi
- v, ok := a.Views.(float64)
- if ok {
- i.Play = int(v)
- }
- i.Danmaku = a.Danmaku
- i.Name = a.Author
- i.Reply = int(a.Comments)
- i.Fav = int(a.Favorites)
- i.Pts = a.Pts
- }
- // FromArchivePB from archive archive.
- func (i *ShowItem) FromArchivePB(a *api.Arc) {
- i.Title = a.Title
- i.Cover = a.Pic
- i.Param = strconv.FormatInt(a.Aid, 10)
- i.URI = model.FillURI(model.GotoAv, i.Param, model.AvHandler(a))
- i.Goto = model.GotoAv
- i.Play = int(a.Stat.View)
- i.Danmaku = int(a.Stat.Danmaku)
- i.Name = a.Author.Name
- i.Face = a.Author.Face
- i.Reply = int(a.Stat.Reply)
- i.Fav = int(a.Stat.Fav)
- i.PubDate = a.PubDate
- i.Rid = int(a.TypeID)
- i.Rname = a.TypeName
- i.Duration = a.Duration
- i.Like = int(a.Stat.Like)
- if a.Access > 0 {
- i.Play = 0
- }
- i.UGCPay = a.Rights.UGCPay
- }
- // FromBangumi from archive archive.
- func (i *ShowItem) FromBangumiArchivePB(a *api.Arc, season *seasongrpc.CardInfoProto, bangumiType int) {
- var (
- _bangumiSeasonID = 1
- _bangumiEpisodeID = 2
- )
- if season == nil {
- return
- }
- i.Title = a.Title
- i.Cover = a.Pic
- i.Param = strconv.Itoa(int(season.SeasonId))
- switch bangumiType {
- case _bangumiSeasonID:
- i.URI = model.FillURI(model.GotoBangumi, i.Param, nil)
- case _bangumiEpisodeID:
- if season.NewEp != nil && season.NewEp.Id > 0 {
- epid := strconv.Itoa(int(season.NewEp.Id))
- i.URI = model.FillURIBangumi(model.GotoBangumi, i.Param, epid, int(season.SeasonType))
- } else {
- i.URI = model.FillURI(model.GotoBangumi, i.Param, nil)
- }
- }
- i.Goto = model.GotoBangumi
- i.Play = int(a.Stat.View)
- i.Danmaku = int(a.Stat.Danmaku)
- i.Name = a.Author.Name
- i.Reply = int(a.Stat.Reply)
- i.Fav = int(a.Stat.Fav)
- i.PubDate = a.PubDate
- i.Rid = int(a.TypeID)
- i.Rname = a.TypeName
- i.Duration = a.Duration
- i.Like = int(a.Stat.Like)
- if a.Access > 0 {
- i.Play = 0
- }
- }
- // FromArchivePBRank from archive archive.
- func (i *ShowItem) FromArchivePBRank(a *api.Arc, scores map[int64]int64) {
- i.Title = a.Title
- i.Cover = a.Pic
- i.Param = strconv.FormatInt(a.Aid, 10)
- i.URI = model.FillURI(model.GotoAv, i.Param, nil)
- i.RedirectURL = a.RedirectURL
- i.Goto = model.GotoAv
- i.Play = int(a.Stat.View)
- i.Danmaku = int(a.Stat.Danmaku)
- i.Mid = a.Author.Mid
- i.Name = a.Author.Name
- i.Face = a.Author.Face
- i.Reply = int(a.Stat.Reply)
- i.Fav = int(a.Stat.Fav)
- i.PubDate = a.PubDate
- i.Rid = int(a.TypeID)
- i.Rname = a.TypeName
- i.Duration = a.Duration
- i.Like = int(a.Stat.Like)
- i.FirstCid = a.FirstCid
- if score, ok := scores[a.Aid]; ok {
- i.Pts = score
- }
- if a.Access > 0 {
- i.Play = 0
- }
- if a.Rights.IsCooperation > 0 {
- i.Cooperation = "等联合创作"
- }
- }
- // FromTopic
- func (i *ShowItem) FromTopic(a *activity.Activity) {
- i.Title = a.Name
- i.Cover = a.H5Cover
- i.Goto = model.GotoWeb
- i.Param = a.H5URL
- i.URI = model.FillURI(model.GotoWeb, i.Param, nil)
- i.Desc = a.Desc
- }
- // FromActivity
- func (i *ShowItem) FromActivity(a *activity.Activity, now time.Time) {
- stime, err := time.ParseInLocation(_activityForm, a.Stime, time.Local)
- if err != nil {
- return
- }
- etime, err := time.ParseInLocation(_activityForm, a.Etime, time.Local)
- if err != nil {
- return
- }
- if now.After(etime) {
- i.Status = 1
- } else if now.Before(stime) {
- i.Status = 2
- }
- i.Title = a.Name
- i.Cover = a.H5Cover
- i.Goto = model.GotoWeb
- i.Param = a.H5URL
- i.URI = model.FillURI(model.GotoWeb, i.Param, nil)
- i.Desc = a.Desc
- i.Stime = a.Stime
- i.Etime = a.Etime
- }
- // FromOfficialVerify from official
- func (i *OfficialVerify) FromOfficialVerify(a accv1.OfficialInfo) {
- if a.Role == 0 {
- i.Type = -1
- } else {
- if a.Role <= 2 {
- i.Type = 0
- } else {
- i.Type = 1
- }
- i.Desc = a.Title
- }
- }
- func (h *Head) FillBuildURI(plat int8, build int) {
- switch h.Goto {
- case model.GotoDaily:
- if (plat == model.PlatIPhone && build > 6670) || (plat == model.PlatAndroid && build > 5250000) {
- h.URI = "bilibili://pegasus/list/daily/" + h.Param
- }
- }
- }
|