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.
311 lines
7.1 KiB
311 lines
7.1 KiB
package model |
|
|
|
import ( |
|
"fmt" |
|
"net/url" |
|
|
|
"go-common/library/time" |
|
) |
|
|
|
const ( |
|
_epFree = 2 |
|
) |
|
|
|
// SeasonCMS defines the elements could be changed from TV CMS side |
|
type SeasonCMS struct { |
|
SeasonID int64 |
|
Cover string |
|
Desc string |
|
Title string |
|
UpInfo string |
|
Category int8 // - cn, jp, movie, tv, documentary |
|
Area string // - cn, jp, others |
|
Playtime time.Time |
|
Role string |
|
Staff string |
|
NewestOrder int // the newest passed ep's order |
|
NewestEPID int64 // the newest passed ep's ID |
|
NewestNb int // the newest ep's number ( after keyword filter ) |
|
TotalNum int |
|
Style string |
|
OriginName string |
|
Alias string |
|
PayStatus int |
|
} |
|
|
|
// NeedVip returns whether the season need vip to watch |
|
func (s *SeasonCMS) NeedVip() bool { |
|
return s.PayStatus == 1 |
|
} |
|
|
|
// IdxSn is the structure of season in the index page |
|
func (s *SeasonCMS) IdxSn() (idx *IdxSeason) { |
|
return &IdxSeason{ |
|
SeasonID: s.SeasonID, |
|
Title: s.Title, |
|
Cover: s.Cover, |
|
Upinfo: s.UpInfo, |
|
} |
|
} |
|
|
|
// EpCMS defines the elements could be changed from TV CMS side |
|
type EpCMS struct { |
|
EPID int64 `json:"epid"` |
|
Cover string `json:"cover"` |
|
Title string `json:"title"` |
|
Subtitle string `json:"subtitle"` |
|
PayStatus int `json:"pay_status"` |
|
} |
|
|
|
// IsFree def. |
|
func (v *EpCMS) IsFree() bool { |
|
return v.PayStatus == _epFree |
|
} |
|
|
|
// EpDecor is used to decorate ep |
|
type EpDecor struct { |
|
*EpCMS |
|
Watermark bool `json:"watermark"` |
|
} |
|
|
|
// ArcCMS reprensents the archive data structure in MC |
|
type ArcCMS struct { |
|
Title string |
|
AID int64 |
|
Content string |
|
Cover string |
|
TypeID int |
|
Pubtime time.Time |
|
Videos int |
|
Valid int |
|
Deleted int |
|
Result int |
|
} |
|
|
|
// NotDeleted def. |
|
func (s *ArcCMS) NotDeleted() bool { |
|
return s.Deleted == 0 |
|
} |
|
|
|
// CanPlay returns whether the arc can play or not |
|
func (s *ArcCMS) CanPlay() bool { |
|
return s.Valid == 1 && s.Result == 1 && s.Deleted == 0 |
|
} |
|
|
|
// VideoCMS def. |
|
type VideoCMS struct { |
|
// Media Info |
|
CID int64 |
|
Title string |
|
AID int64 |
|
IndexOrder int |
|
// Auth Info |
|
Valid int |
|
Deleted int |
|
Result int |
|
} |
|
|
|
// CanPlay returns whether the arc can play or not |
|
func (s *VideoCMS) CanPlay() bool { |
|
return s.Valid == 1 && s.Result == 1 && s.Deleted == 0 |
|
} |
|
|
|
// NotDeleted def. |
|
func (s *VideoCMS) NotDeleted() bool { |
|
return s.Deleted == 0 |
|
} |
|
|
|
// Auditing returns whether the video is begin audited by the license owner |
|
func (s *VideoCMS) Auditing() bool { |
|
return s.Result == 0 && s.Deleted == 0 |
|
} |
|
|
|
// MediaParam def. |
|
type MediaParam struct { |
|
SeasonID int64 `form:"season_id"` |
|
EpID int64 `form:"ep_id"` |
|
TrackPath string `form:"track_path" validate:"required"` |
|
AccessKey string `form:"access_key"` |
|
MobiAPP string `form:"mobi_app" validate:"required"` |
|
Platform string `form:"platform"` |
|
Build int64 `form:"build"` |
|
} |
|
|
|
// GenerateUrl generates url.Values from tv media param struct |
|
func (v *MediaParam) GenerateUrl() (params url.Values) { |
|
params = url.Values{} |
|
params.Set("build", fmt.Sprintf("%d", v.Build)) |
|
params.Set("mobi_app", v.MobiAPP) |
|
params.Set("platform", v.Platform) |
|
params.Set("access_key", v.AccessKey) |
|
params.Set("track_path", v.TrackPath) |
|
params.Set("season_id", fmt.Sprintf("%d", v.SeasonID)) |
|
return |
|
} |
|
|
|
// MediaResp is the structure of PGC display api response |
|
type MediaResp struct { |
|
Response |
|
Result *SeasonDetail `json:"result"` |
|
} |
|
|
|
// SeasonDetail def |
|
type SeasonDetail struct { |
|
Episodes []*Episode `json:"episodes"` |
|
IsNewDanmaku int `json:"is_new_danmaku"` |
|
NewestEP *NewestEP `json:"newest_ep"` |
|
Stat *Stat `json:"stat"` |
|
UserStatus *UserStatus `json:"user_status"` |
|
Sponsor *Sponsor `json:"sponsor"` |
|
SeriesID int `json:"series_id"` |
|
SnDetailCore |
|
} |
|
|
|
// CmsInterv def. |
|
func (v *SnDetailCore) CmsInterv(snCMS *SeasonCMS) { |
|
if snCMS.Title != "" { |
|
v.Title = snCMS.Title |
|
} |
|
if snCMS.Cover != "" { |
|
v.Cover = snCMS.Cover |
|
} |
|
if snCMS.Desc != "" { |
|
v.Evaluate = snCMS.Desc |
|
} |
|
} |
|
|
|
// UserStatus def |
|
type UserStatus struct { |
|
Follow int `json:"follow"` |
|
IsVip int `json:"is_vip"` |
|
Pay int `json:"pay"` |
|
PayPackPaid int `json:"pay_pack_paid"` |
|
Sponsor int `json:"sponsor"` |
|
WatchProgress *WatchProgress `json:"watch_progress"` |
|
} |
|
|
|
// WatchProgress def. |
|
type WatchProgress struct { |
|
LastEpID int `json:"last_ep_id"` |
|
LastEPIndex string `json:"last_ep_index"` |
|
LastTime int64 `json:"last_time"` |
|
} |
|
|
|
// Stat def |
|
type Stat struct { |
|
Danmakus int `json:"danmakus"` |
|
Favorites int `json:"favorites"` |
|
Views int `json:"views"` |
|
} |
|
|
|
// List def |
|
type List struct { |
|
Face string `json:"face"` |
|
UID int `json:"uid"` |
|
Uname string `json:"uname"` |
|
} |
|
|
|
// Sponsor def |
|
type Sponsor struct { |
|
List []*List `json:"list"` |
|
PointActivity *PointActivity `json:"point_activity"` |
|
TotalBpCount int `json:"total_bp_count"` |
|
WeekBpCount int `json:"week_bp_count"` |
|
} |
|
|
|
// PointActivity def |
|
type PointActivity struct { |
|
Content string `json:"content"` |
|
Link string `json:"link"` |
|
Tip string `json:"tip"` |
|
} |
|
|
|
// Season def |
|
type Season struct { |
|
SeasonV2 |
|
Title string `json:"title"` |
|
} |
|
|
|
// SeasonV2 def |
|
type SeasonV2 struct { |
|
IsNew int `json:"is_new"` |
|
SeasonID int `json:"season_id"` |
|
SeasonTitle string `json:"season_title"` |
|
} |
|
|
|
// Rights def |
|
type Rights struct { |
|
AllowBp int `json:"allow_bp"` |
|
AllowDownload int `json:"allow_download"` |
|
AllowReview int `json:"allow_review"` |
|
AreaLimit int `json:"area_limit"` |
|
BanAreaShow int `json:"ban_area_show"` |
|
Copyright string `json:"copyright"` |
|
IsPreview int `json:"is_preview"` |
|
} |
|
|
|
// Rating def |
|
type Rating struct { |
|
Count int `json:"count"` |
|
Score float64 `json:"score"` |
|
} |
|
|
|
// Publish def |
|
type Publish struct { |
|
IsFinish int `json:"is_finish"` |
|
IsStarted int `json:"is_started"` |
|
PubTime string `json:"pub_time"` |
|
PubTimeShow string `json:"pub_time_show"` |
|
Weekday int `json:"weekday"` |
|
} |
|
|
|
// Paster def |
|
type Paster struct { |
|
AID int `json:"aid"` |
|
CID int `json:"cid"` |
|
AllowJump int `json:"allow_jump"` |
|
Duration int `json:"duration"` |
|
Type int `json:"type"` |
|
URL string `json:"url"` |
|
} |
|
|
|
// NewestEP def |
|
type NewestEP struct { |
|
Desc string `json:"desc"` |
|
ID int `json:"id"` |
|
Index string `json:"index"` |
|
IsNew int `jsontt:"is_new"` |
|
} |
|
|
|
// Episode def |
|
type Episode struct { |
|
AID int `json:"aid"` |
|
CID int `json:"cid"` |
|
Cover string `json:"cover"` |
|
EPID int64 `json:"ep_id"` |
|
EpisodeStatus int `json:"episode_status"` |
|
From string `json:"from"` |
|
Index string `json:"index"` |
|
IndexTitle string `json:"index_title"` |
|
MID int `json:"mid"` |
|
Page int `json:"page"` |
|
ShareURL string `json:"share_url"` |
|
VID string `json:"vid"` |
|
WaterMark bool `json:"hidemark"` // true means in the whitelist |
|
} |
|
|
|
// CmsInterv def. |
|
func (v *Episode) CmsInterv(epCMS *EpCMS) { |
|
if epCMS.Cover != "" { |
|
v.Cover = epCMS.Cover |
|
} |
|
if epCMS.Title != "" { |
|
v.IndexTitle = epCMS.Title |
|
} |
|
} |
|
|
|
// ParamStyle . |
|
type ParamStyle struct { |
|
Name string `json:"name"` |
|
StyleID int `json:"style_id"` |
|
}
|
|
|