view.go 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. package view
  2. import (
  3. "encoding/json"
  4. "strconv"
  5. "go-common/app/interface/main/app-intl/model"
  6. "go-common/app/interface/main/app-intl/model/bangumi"
  7. "go-common/app/interface/main/app-intl/model/manager"
  8. "go-common/app/interface/main/app-intl/model/tag"
  9. dm2 "go-common/app/interface/main/dm2/model"
  10. "go-common/app/service/main/archive/api"
  11. "go-common/app/service/main/archive/model/archive"
  12. xtime "go-common/library/time"
  13. )
  14. // vip active subID.
  15. const (
  16. VIPActiveView = 1
  17. VIPActivePGC = 2
  18. VIPActiveCenter = 3
  19. )
  20. // View struct
  21. type View struct {
  22. *ViewStatic
  23. // owner_ext
  24. OwnerExt OwnerExt `json:"owner_ext"`
  25. // now user
  26. ReqUser *ReqUser `json:"req_user,omitempty"`
  27. // tag info
  28. Tag []*tag.Tag `json:"tag,omitempty"`
  29. // movie
  30. Movie *bangumi.Movie `json:"movie,omitempty"`
  31. // bangumi
  32. Season *bangumi.Season `json:"season,omitempty"`
  33. // bp
  34. Bp json.RawMessage `json:"bp,omitempty"`
  35. // history
  36. History *History `json:"history,omitempty"`
  37. // audio
  38. Audio *Audio `json:"audio,omitempty"`
  39. // contribute data
  40. Contributions []*Contribution `json:"contributions,omitempty"`
  41. // relate data
  42. Relates []*Relate `json:"relates,omitempty"`
  43. ReturnCode string `json:"-"`
  44. UserFeature string `json:"-"`
  45. IsRec int8 `json:"-"`
  46. // dislike reason
  47. Dislikes []*Dislike `json:"dislike_reasons,omitempty"`
  48. // dm
  49. DMSeg int `json:"dm_seg,omitempty"`
  50. // player_icon
  51. PlayerIcon *PlayerIcon `json:"player_icon,omitempty"`
  52. // vip_active
  53. VIPActive string `json:"vip_active,omitempty"`
  54. // cm config
  55. CMConfig *CMConfig `json:"cm_config,omitempty"`
  56. }
  57. // ViewStatic struct
  58. type ViewStatic struct {
  59. *archive.Archive3
  60. Pages []*Page `json:"pages,omitempty"`
  61. }
  62. // ReqUser struct
  63. type ReqUser struct {
  64. Attention int `json:"attention"`
  65. Favorite int8 `json:"favorite"`
  66. Like int8 `json:"like"`
  67. Dislike int8 `json:"dislike"`
  68. Coin int8 `json:"coin"`
  69. }
  70. // Page struct
  71. type Page struct {
  72. *archive.Page3
  73. Metas []*Meta `json:"metas"`
  74. DMLink string `json:"dmlink"`
  75. Audio *Audio `json:"audio,omitempty"`
  76. DM *dm2.SubjectInfo `json:"dm,omitempty"`
  77. }
  78. // Meta struct
  79. type Meta struct {
  80. Quality int `json:"quality"`
  81. Format string `json:"format"`
  82. Size int64 `json:"size"`
  83. }
  84. // History struct
  85. type History struct {
  86. Cid int64 `json:"cid"`
  87. Progress int64 `json:"progress"`
  88. }
  89. // CMConfig struct
  90. type CMConfig struct {
  91. AdsControl json.RawMessage `json:"ads_control,omitempty"`
  92. MonitorInfo json.RawMessage `json:"monitor_info,omitempty"`
  93. }
  94. // Dislike struct
  95. type Dislike struct {
  96. ID int `json:"reason_id"`
  97. Name string `json:"reason_name"`
  98. }
  99. // OwnerExt struct
  100. type OwnerExt struct {
  101. OfficialVerify struct {
  102. Type int `json:"type"`
  103. Desc string `json:"desc"`
  104. } `json:"official_verify,omitempty"`
  105. Vip struct {
  106. Type int `json:"vipType"`
  107. DueDate int64 `json:"vipDueDate"`
  108. DueRemark string `json:"dueRemark"`
  109. AccessStatus int `json:"accessStatus"`
  110. VipStatus int `json:"vipStatus"`
  111. VipStatusWarn string `json:"vipStatusWarn"`
  112. } `json:"vip"`
  113. Assists []int64 `json:"assists"`
  114. Fans int `json:"fans"`
  115. Archives int `json:"archives"`
  116. }
  117. // Relate struct
  118. type Relate struct {
  119. Aid int64 `json:"aid,omitempty"`
  120. Pic string `json:"pic,omitempty"`
  121. Title string `json:"title,omitempty"`
  122. Author *api.Author `json:"owner,omitempty"`
  123. Stat api.Stat `json:"stat,omitempty"`
  124. Duration int64 `json:"duration,omitempty"`
  125. Goto string `json:"goto,omitempty"`
  126. Param string `json:"param,omitempty"`
  127. URI string `json:"uri,omitempty"`
  128. Rating float64 `json:"rating,omitempty"`
  129. Reserve string `json:"reserve,omitempty"`
  130. From string `json:"from,omitempty"`
  131. Desc string `json:"desc,omitempty"`
  132. RcmdReason string `json:"rcmd_reason,omitempty"`
  133. Badge string `json:"badge,omitempty"`
  134. Cid int64 `json:"cid,omitempty"`
  135. SeasonType int32 `json:"season_type,omitempty"`
  136. RatingCount int32 `json:"rating_count,omitempty"`
  137. // cm ad
  138. AdIndex int `json:"ad_index,omitempty"`
  139. CmMark int `json:"cm_mark,omitempty"`
  140. SrcID int64 `json:"src_id,omitempty"`
  141. RequestID string `json:"request_id,omitempty"`
  142. CreativeID int64 `json:"creative_id,omitempty"`
  143. CreativeType int64 `json:"creative_type,omitempty"`
  144. Type int `json:"type,omitempty"`
  145. Cover string `json:"cover,omitempty"`
  146. ButtonTitle string `json:"button_title,omitempty"`
  147. View int `json:"view,omitempty"`
  148. Danmaku int `json:"danmaku,omitempty"`
  149. IsAd bool `json:"is_ad,omitempty"`
  150. IsAdLoc bool `json:"is_ad_loc,omitempty"`
  151. AdCb string `json:"ad_cb,omitempty"`
  152. ShowURL string `json:"show_url,omitempty"`
  153. ClickURL string `json:"click_url,omitempty"`
  154. ClientIP string `json:"client_ip,omitempty"`
  155. Extra json.RawMessage `json:"extra,omitempty"`
  156. Button *Button `json:"button,omitempty"`
  157. CardIndex int `json:"card_index,omitempty"`
  158. Source string `json:"-"`
  159. AvFeature json.RawMessage `json:"-"`
  160. }
  161. // Button struct
  162. type Button struct {
  163. Title string `json:"title,omitempty"`
  164. URI string `json:"uri,omitempty"`
  165. }
  166. // Contribution struct
  167. type Contribution struct {
  168. Aid int64 `json:"aid,omitempty"`
  169. Pic string `json:"pic,omitempty"`
  170. Title string `json:"title,omitempty"`
  171. Author api.Author `json:"owner,omitempty"`
  172. Stat api.Stat `json:"stat,omitempty"`
  173. CTime xtime.Time `json:"ctime,omitempty"`
  174. }
  175. // Audio struct
  176. type Audio struct {
  177. Title string `json:"title"`
  178. Cover string `json:"cover_url"`
  179. SongID int `json:"song_id"`
  180. Play int `json:"play_count"`
  181. Reply int `json:"reply_count"`
  182. UpperID int `json:"upper_id"`
  183. Entrance string `json:"entrance"`
  184. SongAttr int `json:"song_attr"`
  185. }
  186. // PlayerIcon struct
  187. type PlayerIcon struct {
  188. URL1 string `json:"url1,omitempty"`
  189. Hash1 string `json:"hash1,omitempty"`
  190. URL2 string `json:"url2,omitempty"`
  191. Hash2 string `json:"hash2,omitempty"`
  192. CTime xtime.Time `json:"ctime,omitempty"`
  193. }
  194. // VipPlayURL playurl token struct.
  195. type VipPlayURL struct {
  196. From string `json:"from"`
  197. Ts int64 `json:"ts"`
  198. Aid int64 `json:"aid"`
  199. Cid int64 `json:"cid"`
  200. Mid int64 `json:"mid"`
  201. VIP int `json:"vip"`
  202. SVIP int `json:"svip"`
  203. Owner int `json:"owner"`
  204. Fcs string `json:"fcs"`
  205. }
  206. // NewRelateRec struct
  207. type NewRelateRec struct {
  208. TrackID string `json:"trackid"`
  209. Oid int64 `json:"id"`
  210. Source string `json:"source"`
  211. AvFeature json.RawMessage `json:"av_feature"`
  212. Goto string `json:"goto"`
  213. }
  214. // FromAv func
  215. func (r *Relate) FromAv(a *api.Arc, from, trackid string, ap *archive.PlayerInfo) {
  216. r.Aid = a.Aid
  217. r.Title = a.Title
  218. r.Pic = a.Pic
  219. r.Author = &a.Author
  220. r.Stat = a.Stat
  221. r.Duration = a.Duration
  222. r.Cid = a.FirstCid
  223. r.Goto = model.GotoAv
  224. r.Param = strconv.FormatInt(a.Aid, 10)
  225. r.URI = model.FillURI(r.Goto, r.Param, model.AvHandler(a, trackid, ap))
  226. r.From = from
  227. }
  228. // FromOperate func
  229. func (r *Relate) FromOperate(i *manager.Relate, a *api.Arc, from string) {
  230. switch i.Goto {
  231. case model.GotoAv:
  232. r.FromAv(a, from, "", nil)
  233. }
  234. if r.Title == "" {
  235. r.Title = i.Title
  236. }
  237. if r.RcmdReason == "" {
  238. r.RcmdReason = i.RecReason
  239. }
  240. }