show.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. package model
  2. import (
  3. "encoding/json"
  4. "strconv"
  5. "go-common/app/service/main/archive/api"
  6. xtime "go-common/library/time"
  7. )
  8. // Card audio card struct
  9. type Card struct {
  10. ID int `json:"-"`
  11. Tab int `json:"-"`
  12. RegionID int `json:"-"`
  13. Type int `json:"-"`
  14. Title string `json:"-"`
  15. Cover string `json:"-"`
  16. Rtype int `json:"-"`
  17. Rvalue string `json:"-"`
  18. PlatVer string `json:"-"`
  19. Plat int8 `json:"-"`
  20. Build int `json:"-"`
  21. Condition string `json:"-"`
  22. TypeStr string `json:"-"`
  23. Goto string `json:"-"`
  24. Param string `json:"-"`
  25. URI string `json:"-"`
  26. Desc string `json:"-"`
  27. TagID int `json:"-"`
  28. }
  29. // Content audio content struct
  30. type Content struct {
  31. ID int `json:"-"`
  32. Module int `json:"-"`
  33. RecID int `json:"-"`
  34. Type int8 `json:"-"`
  35. Value string `json:"-"`
  36. Title string `json:"-"`
  37. TagID int `json:"-"`
  38. }
  39. // PlatLimit audio plat limit struct
  40. type PlatLimit struct {
  41. Plat int8 `json:"plat"`
  42. Build int `json:"build"`
  43. Condition string `json:"conditions"`
  44. }
  45. // ShowItem audio show item struct
  46. type ShowItem struct {
  47. Title string `json:"title"`
  48. Cover string `json:"cover"`
  49. URI string `json:"uri"`
  50. NewURI string `json:"-"`
  51. Param string `json:"param"`
  52. Goto string `json:"goto"`
  53. // up
  54. Mid int64 `json:"mid,omitempty"`
  55. Name string `json:"name,omitempty"`
  56. Face string `json:"face,omitempty"`
  57. Follower int `json:"follower,omitempty"`
  58. Attribute int `json:"attribute,omitempty"`
  59. OfficialVerify *OfficialVerify `json:"official_verify,omitempty"`
  60. // stat
  61. Play int `json:"play,omitempty"`
  62. Danmaku int `json:"danmaku,omitempty"`
  63. Reply int `json:"reply,omitempty"`
  64. Fav int `json:"favourite,omitempty"`
  65. // movie and bangumi badge
  66. Status int8 `json:"status,omitempty"`
  67. CoverMark string `json:"cover_mark,omitempty"`
  68. // ranking
  69. Pts int64 `json:"pts,omitempty"`
  70. Children []*ShowItem `json:"children,omitempty"`
  71. // av
  72. PubDate xtime.Time `json:"pubdate"`
  73. // av stat
  74. Duration int64 `json:"duration,omitempty"`
  75. // region
  76. Rid int `json:"rid,omitempty"`
  77. Rname string `json:"rname,omitempty"`
  78. Reid int `json:"reid,omitempty"`
  79. //new manager
  80. Desc string `json:"desc,omitempty"`
  81. Stime string `json:"stime,omitempty"`
  82. Etime string `json:"etime,omitempty"`
  83. Like int `json:"like,omitempty"`
  84. }
  85. // OfficialVerify audio verify struct
  86. type OfficialVerify struct {
  87. Type int `json:"type"`
  88. Desc string `json:"desc"`
  89. }
  90. // Head audio struct
  91. type Head struct {
  92. CardID int `json:"card_id,omitempty"`
  93. Title string `json:"title,omitempty"`
  94. Cover string `json:"cover,omitempty"`
  95. Type string `json:"type,omitempty"`
  96. Date int64 `json:"date,omitempty"`
  97. Plat int8 `json:"-"`
  98. Build int `json:"-"`
  99. Condition string `json:"-"`
  100. URI string `json:"uri,omitempty"`
  101. Goto string `json:"goto,omitempty"`
  102. Param string `json:"param,omitempty"`
  103. Body []*ShowItem `json:"body,omitempty"`
  104. }
  105. // CardPlatChange audio card change plat
  106. func (c *Card) CardPlatChange() (platlinits []*PlatLimit) {
  107. platlinits = platJSONChange(c.PlatVer)
  108. return
  109. }
  110. // platJSONChange json change plat build condition
  111. func platJSONChange(jsonStr string) (platlinits []*PlatLimit) {
  112. var tmp []struct {
  113. Plat string `json:"plat"`
  114. Build string `json:"build"`
  115. Condition string `json:"conditions"`
  116. }
  117. if err := json.Unmarshal([]byte(jsonStr), &tmp); err == nil {
  118. for _, limit := range tmp {
  119. platlinit := &PlatLimit{}
  120. switch limit.Plat {
  121. case "0": // resource android
  122. platlinit.Plat = PlatAndroid
  123. case "1": // resource iphone
  124. platlinit.Plat = PlatIPhone
  125. case "2": // resource pad
  126. platlinit.Plat = PlatIPad
  127. case "5": // resource iphone_i
  128. platlinit.Plat = PlatIPhoneI
  129. case "8": // resource android_i
  130. platlinit.Plat = PlatAndroidI
  131. }
  132. platlinit.Build, _ = strconv.Atoi(limit.Build)
  133. platlinit.Condition = limit.Condition
  134. platlinits = append(platlinits, platlinit)
  135. }
  136. }
  137. return
  138. }
  139. // FromArchivePB from archive archive.
  140. func (i *ShowItem) FromArchivePB(a *api.Arc) {
  141. i.Title = a.Title
  142. i.Cover = a.Pic
  143. i.Param = strconv.FormatInt(a.Aid, 10)
  144. i.URI = FillURI(GotoAv, i.Param)
  145. i.Goto = GotoAv
  146. i.Play = int(a.Stat.View)
  147. i.Danmaku = int(a.Stat.Danmaku)
  148. i.Name = a.Author.Name
  149. i.Reply = int(a.Stat.Reply)
  150. i.Fav = int(a.Stat.Fav)
  151. i.PubDate = a.PubDate
  152. i.Rid = int(a.TypeID)
  153. i.Rname = a.TypeName
  154. i.Duration = a.Duration
  155. i.Like = int(a.Stat.Like)
  156. if a.Access > 0 {
  157. i.Play = 0
  158. }
  159. }
  160. // FillBuildURI fill url by plat build
  161. func (h *Head) FillBuildURI(plat int8, build int) {
  162. switch h.Goto {
  163. case GotoDaily:
  164. if (plat == PlatIPhone && build > 6670) || (plat == PlatAndroid && build > 5250000) {
  165. h.URI = "bilibili://pegasus/list/daily/" + h.Param
  166. }
  167. }
  168. }
  169. // SideBars for side bars
  170. type SideBars struct {
  171. SideBar []*SideBar `json:"sidebar,omitempty"`
  172. Limit map[int64][]*SideBarLimit `json:"limit,omitempty"`
  173. }
  174. // SideBar for side bar
  175. type SideBar struct {
  176. ID int64 `json:"id,omitempty"`
  177. Tip int `json:"tip,omitempty"`
  178. Rank int `json:"rank,omitempty"`
  179. Logo string `json:"logo,omitempty"`
  180. LogoWhite string `json:"logo_white,omitempty"`
  181. Name string `json:"name,omitempty"`
  182. Param string `json:"param,omitempty"`
  183. Module int `json:"module,omitempty"`
  184. Plat int8 `json:"-"`
  185. Build int `json:"-"`
  186. Conditions string `json:"-"`
  187. OnlineTime xtime.Time `json:"online_time"`
  188. NeedLogin int8 `json:"need_login,omitempty"`
  189. WhiteURL string `json:"white_url,omitempty"`
  190. Menu int8 `json:"menu,omitempty"`
  191. LogoSelected string `json:"logo_selected,omitempty"`
  192. TabID string `json:"tab_id,omitempty"`
  193. Red string `json:"red_dot_url,omitempty"`
  194. Language string `json:"language,omitempty"`
  195. }
  196. // SideBarLimit side bar limit
  197. type SideBarLimit struct {
  198. ID int64 `json:"-"`
  199. Build int `json:"-"`
  200. Condition string `json:"-"`
  201. }