217 lines
6.1 KiB
Go
Raw Normal View History

2019-04-22 02:59:20 +00:00
package model
import (
"encoding/json"
"strconv"
"go-common/app/service/main/archive/api"
xtime "go-common/library/time"
)
// Card audio card struct
type Card struct {
ID int `json:"-"`
Tab int `json:"-"`
RegionID int `json:"-"`
Type int `json:"-"`
Title string `json:"-"`
Cover string `json:"-"`
Rtype int `json:"-"`
Rvalue string `json:"-"`
PlatVer string `json:"-"`
Plat int8 `json:"-"`
Build int `json:"-"`
Condition string `json:"-"`
TypeStr string `json:"-"`
Goto string `json:"-"`
Param string `json:"-"`
URI string `json:"-"`
Desc string `json:"-"`
TagID int `json:"-"`
}
// Content audio content struct
type Content struct {
ID int `json:"-"`
Module int `json:"-"`
RecID int `json:"-"`
Type int8 `json:"-"`
Value string `json:"-"`
Title string `json:"-"`
TagID int `json:"-"`
}
// PlatLimit audio plat limit struct
type PlatLimit struct {
Plat int8 `json:"plat"`
Build int `json:"build"`
Condition string `json:"conditions"`
}
// ShowItem audio show item struct
type ShowItem struct {
Title string `json:"title"`
Cover string `json:"cover"`
URI string `json:"uri"`
NewURI string `json:"-"`
Param string `json:"param"`
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"`
}
// OfficialVerify audio verify struct
type OfficialVerify struct {
Type int `json:"type"`
Desc string `json:"desc"`
}
// Head audio struct
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"`
}
// CardPlatChange audio card change plat
func (c *Card) CardPlatChange() (platlinits []*PlatLimit) {
platlinits = platJSONChange(c.PlatVer)
return
}
// platJSONChange json change plat build condition
func platJSONChange(jsonStr string) (platlinits []*PlatLimit) {
var tmp []struct {
Plat string `json:"plat"`
Build string `json:"build"`
Condition string `json:"conditions"`
}
if err := json.Unmarshal([]byte(jsonStr), &tmp); err == nil {
for _, limit := range tmp {
platlinit := &PlatLimit{}
switch limit.Plat {
case "0": // resource android
platlinit.Plat = PlatAndroid
case "1": // resource iphone
platlinit.Plat = PlatIPhone
case "2": // resource pad
platlinit.Plat = PlatIPad
case "5": // resource iphone_i
platlinit.Plat = PlatIPhoneI
case "8": // resource android_i
platlinit.Plat = PlatAndroidI
}
platlinit.Build, _ = strconv.Atoi(limit.Build)
platlinit.Condition = limit.Condition
platlinits = append(platlinits, platlinit)
}
}
return
}
// 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 = FillURI(GotoAv, i.Param)
i.Goto = GotoAv
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
}
}
// FillBuildURI fill url by plat build
func (h *Head) FillBuildURI(plat int8, build int) {
switch h.Goto {
case GotoDaily:
if (plat == PlatIPhone && build > 6670) || (plat == PlatAndroid && build > 5250000) {
h.URI = "bilibili://pegasus/list/daily/" + h.Param
}
}
}
// SideBars for side bars
type SideBars struct {
SideBar []*SideBar `json:"sidebar,omitempty"`
Limit map[int64][]*SideBarLimit `json:"limit,omitempty"`
}
// SideBar for side bar
type SideBar struct {
ID int64 `json:"id,omitempty"`
Tip int `json:"tip,omitempty"`
Rank int `json:"rank,omitempty"`
Logo string `json:"logo,omitempty"`
LogoWhite string `json:"logo_white,omitempty"`
Name string `json:"name,omitempty"`
Param string `json:"param,omitempty"`
Module int `json:"module,omitempty"`
Plat int8 `json:"-"`
Build int `json:"-"`
Conditions string `json:"-"`
OnlineTime xtime.Time `json:"online_time"`
NeedLogin int8 `json:"need_login,omitempty"`
WhiteURL string `json:"white_url,omitempty"`
Menu int8 `json:"menu,omitempty"`
LogoSelected string `json:"logo_selected,omitempty"`
TabID string `json:"tab_id,omitempty"`
Red string `json:"red_dot_url,omitempty"`
Language string `json:"language,omitempty"`
}
// SideBarLimit side bar limit
type SideBarLimit struct {
ID int64 `json:"-"`
Build int `json:"-"`
Condition string `json:"-"`
}