12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130 |
- package card
- import (
- "strconv"
- "go-common/app/interface/main/app-card/model"
- "go-common/app/interface/main/app-card/model/bplus"
- "go-common/app/interface/main/app-card/model/card/ai"
- "go-common/app/interface/main/app-card/model/card/audio"
- "go-common/app/interface/main/app-card/model/card/bangumi"
- "go-common/app/interface/main/app-card/model/card/cm"
- "go-common/app/interface/main/app-card/model/card/live"
- "go-common/app/interface/main/app-card/model/card/operate"
- "go-common/app/interface/main/app-card/model/card/show"
- tag "go-common/app/interface/main/tag/model"
- article "go-common/app/interface/openplatform/article/model"
- account "go-common/app/service/main/account/model"
- "go-common/app/service/main/archive/model/archive"
- relation "go-common/app/service/main/relation/model"
- episodegrpc "go-common/app/service/openplatform/pgc-season/api/grpc/episode/v1"
- season "go-common/app/service/openplatform/pgc-season/api/grpc/season/v1"
- "go-common/library/log"
- )
- func doubleHandle(cardGoto model.CardGt, cardType model.CardType, rcmd *ai.Item, tagm map[int64]*tag.Tag, isAttenm map[int64]int8, statm map[int64]*relation.Stat, cardm map[int64]*account.Card) (hander Handler) {
- base := &Base{CardType: cardType, CardGoto: cardGoto, Rcmd: rcmd, Tagm: tagm, IsAttenm: isAttenm, Statm: statm, Cardm: cardm, Columnm: model.ColumnSvrDouble}
- switch cardType {
- case model.ThreePicV2:
- base.CardLen = 1
- hander = &ThreePicV2{Base: base}
- case model.SmallCoverV2:
- base.CardLen = 1
- hander = &SmallCoverV2{Base: base}
- case model.OptionsV2:
- hander = &Option{Base: base}
- case model.OnePicV2:
- base.CardLen = 1
- hander = &OnePicV2{Base: base}
- case model.Select:
- hander = &Select{Base: base}
- default:
- switch cardGoto {
- case model.CardGotoAv, model.CardGotoLive, model.CardGotoArticleS, model.CardGotoSpecialS, model.CardGotoShoppingS, model.CardGotoAudio, model.CardGotoGameDownloadS, model.CardGotoBangumi, model.CardGotoMoe, model.CardGotoPGC:
- base.CardType = model.SmallCoverV2
- base.CardLen = 1
- hander = &SmallCoverV2{Base: base}
- case model.CardGotoAdAv:
- base.CardType = model.CmV2
- base.CardLen = 1
- hander = &SmallCoverV2{Base: base}
- case model.CardGotoChannelRcmd, model.CardGotoUpRcmdAv:
- base.CardType = model.SmallCoverV3
- base.CardLen = 1
- hander = &SmallCoverV3{Base: base}
- case model.CardGotoSpecial:
- base.CardType = model.MiddleCoverV2
- hander = &MiddleCover{Base: base}
- case model.CardGotoPlayer, model.CardGotoPlayerLive:
- base.CardType = model.LargeCoverV2
- hander = &LargeCoverV2{Base: base}
- case model.CardGotoSubscribe, model.CardGotoSearchSubscribe:
- base.CardType = model.ThreeItemHV2
- hander = &ThreeItemH{Base: base}
- case model.CardGotoLiveUpRcmd:
- base.CardType = model.TwoItemV2
- return &TwoItemV2{Base: base}
- case model.CardGotoConverge, model.CardGotoRank:
- base.CardType = model.ThreeItemV2
- hander = &ThreeItemV2{Base: base}
- case model.CardGotoBangumiRcmd:
- base.CardType = model.SmallCoverV4
- hander = &SmallCoverV4{Base: base}
- case model.CardGotoLogin:
- base.CardType = model.CoverOnlyV2
- base.CardLen = 1
- return &CoverOnly{Base: base}
- case model.CardGotoBanner:
- base.CardType = model.BannerV2
- return &Banner{Base: base}
- case model.CardGotoAdWebS:
- base.CardType = model.CmV2
- base.CardLen = 1
- hander = &SmallCoverV2{Base: base}
- case model.CardGotoAdWeb:
- base.CardType = model.CmV2
- hander = &MiddleCover{Base: base}
- case model.CardGotoNews:
- base.CardType = model.News
- hander = &Text{Base: base}
- case model.CardGotoEntrance:
- base.CardType = model.MultiItemH
- hander = &MultiItem{Base: base}
- case model.CardGotoTagRcmd, model.CardGotoContentRcmd:
- base.CardType = model.MultiItem
- hander = &MultiItem{Base: base}
- }
- }
- return
- }
- type SmallCoverV2 struct {
- *Base
- CoverBlur model.BlurStatus `json:"cover_blur,omitempty"`
- CoverLeftText1 string `json:"cover_left_text_1,omitempty"`
- CoverLeftIcon1 model.Icon `json:"cover_left_icon_1,omitempty"`
- CoverLeftText2 string `json:"cover_left_text_2,omitempty"`
- CoverLeftIcon2 model.Icon `json:"cover_left_icon_2,omitempty"`
- CoverRightText string `json:"cover_right_text,omitempty"`
- CoverRightIcon model.Icon `json:"cover_right_icon,omitempty"`
- CoverRightBackgroundColor string `json:"cover_right_background_color,omitempty"`
- Subtitle string `json:"subtitle,omitempty"`
- Badge string `json:"badge,omitempty"`
- RcmdReason string `json:"rcmd_reason,omitempty"`
- DescButton *Button `json:"desc_button,omitempty"`
- Desc string `json:"desc,omitempty"`
- Avatar *Avatar `json:"avatar,omitempty"`
- OfficialIcon model.Icon `json:"official_icon,omitempty"`
- CanPlay int32 `json:"can_play,omitempty"`
- RcmdReasonStyle *ReasonStyle `json:"rcmd_reason_style,omitempty"`
- }
- func (c *SmallCoverV2) From(main interface{}, op *operate.Card) {
- if op == nil {
- return
- }
- var (
- upID int64
- button interface{}
- avatar *AvatarStatus
- )
- switch main.(type) {
- case map[int64]*archive.ArchiveWithPlayer:
- am := main.(map[int64]*archive.ArchiveWithPlayer)
- a, ok := am[op.ID]
- if !ok {
- return
- }
- switch op.CardGoto {
- case model.CardGotoAdAv:
- if !model.AdAvIsNormal(a) {
- return
- }
- c.AdInfo = op.AdInfo
- default:
- if !model.AvIsNormal(a) {
- return
- }
- }
- c.Base.from(op.Param, a.Pic, a.Title, model.GotoAv, strconv.FormatInt(a.Aid, 10), model.AvPlayHandler(a.Archive3, a.PlayerInfo, op.TrackID))
- // c.CoverLeftText1 = model.RecommendString(a.Stat.Like, a.Stat.DisLike)
- c.CoverLeftText1 = model.StatString(a.Stat.View, "")
- c.CoverLeftIcon1 = model.IconPlay
- c.CoverLeftText2 = model.StatString(a.Stat.Danmaku, "")
- c.CoverLeftIcon2 = model.IconDanmaku
- if op.SwitchLike == model.SwitchFeedIndexLike {
- c.CoverLeftText1 = model.StatString(a.Stat.Like, "")
- c.CoverLeftIcon1 = model.IconLike
- c.CoverLeftText2 = model.StatString(a.Stat.View, "")
- c.CoverLeftIcon2 = model.IconPlay
- }
- c.CoverRightText = model.DurationString(a.Duration)
- if c.Rcmd != nil {
- c.RcmdReason, c.Desc = rcmdReason(c.Rcmd.RcmdReason, a.Author.Name, c.IsAttenm[a.Author.Mid], c.Cardm)
- c.RcmdReasonStyle = topReasonStyleFrom(c.Rcmd, c.RcmdReason, c.Base.Goto)
- }
- if c.RcmdReason == "" {
- if t, ok := c.Tagm[op.Tid]; ok {
- tag := &tag.Tag{}
- *tag = *t
- tag.Name = a.TypeName + " · " + tag.Name
- button = tag
- } else {
- button = &ButtonStatus{Text: a.TypeName}
- }
- }
- c.Base.PlayerArgs = playerArgsFrom(a.Archive3)
- c.Args.fromArchive(a.Archive3, c.Tagm[op.Tid])
- c.CanPlay = a.Rights.Autoplay
- upID = a.Author.Mid
- switch op.CardGoto {
- case model.CardGotoAdAv:
- c.AdInfo = op.AdInfo
- }
- case map[int64]*bangumi.Season:
- sm := main.(map[int64]*bangumi.Season)
- s, ok := sm[op.ID]
- if !ok {
- return
- }
- c.Base.from(s.EpisodeID, s.Cover, s.Title, model.GotoBangumi, s.EpisodeID, nil)
- c.CoverLeftText1 = model.StatString(s.PlayCount, "")
- c.CoverLeftIcon1 = model.IconPlay
- c.CoverLeftText2 = model.StatString(s.Favorites, "")
- c.CoverLeftIcon2 = model.BangumiIcon(s.SeasonType)
- c.Badge = s.TypeBadge
- c.Subtitle = s.UpdateDesc
- case map[int32]*season.CardInfoProto:
- sm := main.(map[int32]*season.CardInfoProto)
- s, ok := sm[int32(op.ID)]
- if !ok {
- return
- }
- c.Base.from(op.Param, s.Cover, s.Title, model.GotoPGC, op.URI, nil)
- c.CoverLeftText1 = model.StatString(int32(s.Stat.View), "")
- c.CoverLeftIcon1 = model.IconPlay
- if s.Stat != nil {
- c.CoverLeftText2 = model.StatString(int32(s.Stat.Follow), "")
- }
- c.CoverLeftIcon2 = model.BangumiIcon(int8(s.SeasonType))
- c.Badge = s.SeasonTypeName
- if s.NewEp != nil {
- c.Subtitle = s.NewEp.IndexShow
- }
- case map[int32]*episodegrpc.EpisodeCardsProto:
- sm := main.(map[int32]*episodegrpc.EpisodeCardsProto)
- s, ok := sm[int32(op.ID)]
- if !ok {
- return
- }
- title := s.Season.Title + ":" + s.ShowTitle
- c.Base.from(op.Param, s.Cover, title, model.GotoBangumi, op.URI, nil)
- c.Goto = model.GotoPGC
- c.CoverLeftText1 = model.StatString(int32(s.Season.Stat.View), "")
- c.CoverLeftIcon1 = model.IconPlay
- if s.Season.Stat != nil {
- c.CoverLeftText2 = model.StatString(int32(s.Season.Stat.Follow), "")
- }
- c.CoverLeftIcon2 = model.BangumiIcon(int8(s.Season.SeasonType))
- c.Badge = s.Season.SeasonTypeName
- if s.Season != nil {
- c.Subtitle = s.Season.NewEpShow
- }
- case map[int64]*live.Room:
- rm := main.(map[int64]*live.Room)
- r, ok := rm[op.ID]
- if !ok || r.LiveStatus != 1 {
- return
- }
- c.Base.from(op.Param, r.Cover, r.Title, model.GotoLive, strconv.FormatInt(r.RoomID, 10), model.LiveRoomHandler(r))
- c.CoverLeftText1 = model.StatString(r.Online, "")
- c.CoverLeftIcon1 = model.IconOnline
- c.CoverRightText = r.Uname
- c.Badge = "直播"
- c.Base.PlayerArgs = playerArgsFrom(r)
- c.Args.fromLiveRoom(r)
- if c.Rcmd != nil && (c.Rcmd.RcmdReason != nil || c.IsAttenm[r.UID] == 1) {
- c.RcmdReason, c.Desc = rcmdReason(c.Rcmd.RcmdReason, "", c.IsAttenm[r.UID], c.Cardm)
- c.RcmdReasonStyle = topReasonStyleFrom(c.Rcmd, c.RcmdReason, c.Base.Goto)
- } else {
- button = r
- }
- upID = r.UID
- c.CanPlay = 1
- case map[int64]*show.Shopping:
- sm := main.(map[int64]*show.Shopping)
- s, ok := sm[op.ID]
- if !ok {
- return
- }
- c.Base.from(op.Param, model.ShoppingCover(s.PerformanceImage), s.Name, model.GotoWeb, s.URL, nil)
- if s.Type == 1 {
- c.CoverLeftText1 = model.ShoppingDuration(s.STime, s.ETime)
- c.CoverRightText = s.CityName
- c.CoverRightIcon = model.IconLocation
- if len(s.Tags) != 0 {
- c.Desc = s.Tags[0].TagName
- }
- } else if s.Type == 2 {
- c.CoverLeftText1 = s.Want
- c.Desc = s.Subname
- }
- c.Badge = "会员购"
- c.Args.fromShopping(s)
- case map[int64]*audio.Audio:
- am := main.(map[int64]*audio.Audio)
- a, ok := am[op.ID]
- if !ok {
- return
- }
- c.Base.from(op.Param, a.CoverURL, a.Title, model.GotoAudio, strconv.FormatInt(a.MenuID, 10), nil)
- c.CoverBlur = model.BlurYes
- c.CoverLeftText1 = model.StatString(a.PlayNum, "")
- c.CoverLeftIcon1 = model.IconHeadphone
- c.CoverRightText = model.AudioTotalStirng(a.RecordNum)
- c.Badge = model.AudioBadgeString(a.Type)
- button = a.Ctgs
- c.Args.fromAudio(a)
- case map[int64]*article.Meta:
- mm := main.(map[int64]*article.Meta)
- m, ok := mm[op.ID]
- if !ok {
- return
- }
- if len(m.ImageURLs) == 0 {
- return
- }
- c.Base.from(op.Param, m.ImageURLs[0], m.Title, model.GotoArticle, strconv.FormatInt(m.ID, 10), nil)
- if m.Stats != nil {
- c.CoverLeftText1 = model.StatString(int32(m.Stats.View), "")
- c.CoverLeftIcon1 = model.IconRead
- c.CoverLeftText2 = model.StatString(int32(m.Stats.Reply), "")
- c.CoverLeftIcon2 = model.IconComment
- }
- button = m.Categories
- c.Badge = "文章"
- c.Args.fromArticle(m)
- case map[int64]*bplus.Picture:
- pm := main.(map[int64]*bplus.Picture)
- p, ok := pm[op.ID]
- if !ok || len(p.Imgs) == 0 || p.ViewCount == 0 {
- return
- }
- c.Base.from(op.Param, p.Imgs[0], p.DynamicText, model.GotoPicture, strconv.FormatInt(p.DynamicID, 10), nil)
- c.CoverLeftText1 = model.StatString(int32(p.ViewCount), "")
- c.CoverLeftIcon1 = model.IconRead
- if p.ImgCount > 1 {
- c.CoverRightText = model.PictureCountString(p.ImgCount)
- c.CoverRightBackgroundColor = "#66666666"
- }
- if c.Rcmd != nil && c.Rcmd.RcmdReason != nil {
- c.RcmdReason, _ = rcmdReason(c.Rcmd.RcmdReason, p.NickName, c.IsAttenm[p.Mid], c.Cardm)
- c.RcmdReasonStyle = topReasonStyleFrom(c.Rcmd, c.RcmdReason, c.Base.Goto)
- } else {
- button = p
- c.Badge = "动态"
- }
- case *cm.AdInfo:
- ad := main.(*cm.AdInfo)
- c.AdInfo = ad
- case *bangumi.Moe:
- m := main.(*bangumi.Moe)
- if m == nil {
- return
- }
- c.Base.from(strconv.FormatInt(m.ID, 10), m.Square, m.Title, model.GotoWeb, m.Link, nil)
- c.Desc = m.Desc
- c.Badge = m.Badge
- case nil:
- if op == nil {
- return
- }
- c.Base.from(op.Param, op.Coverm[c.Columnm], op.Title, op.Goto, op.URI, nil)
- switch op.CardGoto {
- case model.CardGotoDownload:
- c.CoverLeftText1 = model.DownloadString(op.Download)
- avatar = &AvatarStatus{Cover: op.Avatar, Goto: op.Goto, Param: op.URI, Type: model.AvatarSquare}
- c.Desc = op.Desc
- case model.CardGotoSpecial:
- c.Desc = op.Desc
- c.Badge = op.Badge
- default:
- log.Warn("SmallCoverV2 From: unexpected card_goto %s", op.CardGoto)
- return
- }
- default:
- log.Warn("SmallCoverV2 From: unexpected type %T", main)
- return
- }
- c.OfficialIcon = model.OfficialIcon(c.Cardm[upID])
- c.Avatar = avatarFrom(avatar)
- c.DescButton = buttonFrom(button, op.Plat)
- c.Right = true
- }
- func (c *SmallCoverV2) Get() *Base {
- return c.Base
- }
- type SmallCoverV3 struct {
- *Base
- Avatar *Avatar `json:"avatar,omitempty"`
- CoverLeftText string `json:"cover_left_text,omitempty"`
- CoverRightButton *Button `json:"cover_right_button,omitempty"`
- RcmdReason string `json:"rcmd_reason,omitempty"`
- Desc string `json:"desc,omitempty"`
- DescButton *Button `json:"desc_button,omitempty"`
- OfficialIcon model.Icon `json:"official_icon,omitempty"`
- CanPlay int32 `json:"can_play,omitempty"`
- RcmdReasonStyle *ReasonStyle `json:"rcmd_reason_style,omitempty"`
- }
- func (c *SmallCoverV3) From(main interface{}, op *operate.Card) {
- if op == nil {
- return
- }
- var (
- button interface{}
- descButton interface{}
- )
- switch main.(type) {
- case map[int64]*archive.ArchiveWithPlayer:
- am := main.(map[int64]*archive.ArchiveWithPlayer)
- a, ok := am[op.ID]
- if !ok || !model.AvIsNormal(a) {
- return
- }
- c.Base.from(op.Param, a.Pic, a.Title, model.GotoAv, op.URI, model.AvPlayHandler(a.Archive3, a.PlayerInfo, op.TrackID))
- switch op.CardGoto {
- case model.CardGotoUpRcmdAv:
- c.Avatar = avatarFrom(&AvatarStatus{Cover: a.Author.Face, Goto: model.GotoMid, Param: strconv.FormatInt(a.Author.Mid, 10), Type: model.AvatarRound})
- c.CoverLeftText = a.Author.Name
- if c.Rcmd != nil && c.Rcmd.RcmdReason != nil {
- c.RcmdReason, _ = rcmdReason(c.Rcmd.RcmdReason, "", c.IsAttenm[a.Author.Mid], c.Cardm)
- c.RcmdReasonStyle = topReasonStyleFrom(c.Rcmd, c.RcmdReason, c.Base.Goto)
- } else {
- descButton = c.Tagm[op.Tid]
- }
- button = &ButtonStatus{Goto: model.GotoMid, Param: strconv.FormatInt(a.Author.Mid, 10), IsAtten: c.IsAttenm[a.Author.Mid]}
- c.Base.PlayerArgs = playerArgsFrom(a.Archive3)
- c.Args.fromArchive(a.Archive3, c.Tagm[op.Tid])
- case model.CardGotoChannelRcmd:
- t, ok := c.Tagm[op.Tid]
- if !ok {
- return
- }
- c.Avatar = avatarFrom(&AvatarStatus{Cover: t.Cover, Goto: model.GotoTag, Param: strconv.FormatInt(t.ID, 10), Type: model.AvatarSquare})
- c.CoverLeftText = t.Name
- c.Desc = model.SubscribeString(int32(t.Count.Atten))
- button = &ButtonStatus{Goto: model.GotoTag, Param: strconv.FormatInt(t.ID, 10), IsAtten: t.IsAtten}
- c.Base.PlayerArgs = playerArgsFrom(a.Archive3)
- c.Args.fromArchive(a.Archive3, c.Tagm[op.Tid])
- default:
- log.Warn("SmallCoverV3 From: unexpected card_goto %s", op.CardGoto)
- return
- }
- c.CanPlay = a.Rights.Autoplay
- default:
- log.Warn("SmallCoverV3 From: unexpected type %T", main)
- return
- }
- c.CoverRightButton = buttonFrom(button, op.Plat)
- c.DescButton = buttonFrom(descButton, op.Plat)
- c.Right = true
- }
- func (c *SmallCoverV3) Get() *Base {
- return c.Base
- }
- type MiddleCoverV2 struct {
- *Base
- Ratio int `json:"ratio,omitempty"`
- Desc string `json:"desc,omitempty"`
- Badge string `json:"badge,omitempty"`
- }
- func (c *MiddleCoverV2) Get() *Base {
- return c.Base
- }
- type LargeCoverV2 struct {
- *Base
- Avatar *Avatar `json:"avatar,omitempty"`
- Badge string `json:"badge,omitempty"`
- CoverRightButton *Button `json:"cover_right_button,omitempty"`
- CoverLeftText1 string `json:"cover_left_text_1,omitempty"`
- CoverLeftIcon1 model.Icon `json:"cover_left_icon_1,omitempty"`
- CoverLeftText2 string `json:"cover_left_text_2,omitempty"`
- CoverLeftIcon2 model.Icon `json:"cover_left_icon_2,omitempty"`
- RcmdReason string `json:"rcmd_reason,omitempty"`
- DescButton *Button `json:"desc_button,omitempty"`
- OfficialIcon model.Icon `json:"official_icon,omitempty"`
- CanPlay int32 `json:"can_play,omitempty"`
- RcmdReasonStyle *ReasonStyle `json:"rcmd_reason_style,omitempty"`
- }
- func (c *LargeCoverV2) From(main interface{}, op *operate.Card) {
- if op == nil {
- return
- }
- var (
- button interface{}
- coverButton interface{}
- upID int64
- )
- switch main.(type) {
- case map[int64]*archive.ArchiveWithPlayer:
- am := main.(map[int64]*archive.ArchiveWithPlayer)
- a, ok := am[op.ID]
- if !ok || !model.AvIsNormal(a) {
- return
- }
- c.Base.from(op.Param, a.Pic, a.Title, model.GotoAv, op.URI, model.AvPlayHandler(a.Archive3, a.PlayerInfo, op.TrackID))
- c.Avatar = avatarFrom(&AvatarStatus{Cover: a.Author.Face, Text: a.Author.Name, Goto: model.GotoMid, Param: strconv.FormatInt(a.Author.Mid, 10), Type: model.AvatarRound})
- c.CoverLeftText1 = model.StatString(a.Stat.View, "")
- c.CoverLeftIcon1 = model.IconPlay
- c.CoverLeftText2 = model.StatString(a.Stat.Danmaku, "")
- c.CoverLeftIcon2 = model.IconDanmaku
- if op.SwitchLike == model.SwitchFeedIndexLike {
- c.CoverLeftText1 = model.StatString(a.Stat.Like, "")
- c.CoverLeftIcon1 = model.IconLike
- c.CoverLeftText2 = model.StatString(a.Stat.View, "")
- c.CoverLeftIcon2 = model.IconPlay
- }
- coverButton = &ButtonStatus{Goto: model.GotoMid, Param: strconv.FormatInt(a.Author.Mid, 10), IsAtten: c.IsAttenm[a.Author.Mid]}
- if c.Rcmd != nil && c.Rcmd.RcmdReason != nil {
- c.RcmdReason, _ = rcmdReason(c.Rcmd.RcmdReason, "", c.IsAttenm[a.Author.Mid], c.Cardm)
- c.RcmdReasonStyle = topReasonStyleFrom(c.Rcmd, c.RcmdReason, c.Base.Goto)
- } else if t, ok := c.Tagm[op.Tid]; ok {
- tag := &tag.Tag{}
- *tag = *t
- tag.Name = a.TypeName + " · " + tag.Name
- button = tag
- } else {
- button = &ButtonStatus{Text: a.TypeName}
- }
- c.CanPlay = a.Rights.Autoplay
- c.Base.PlayerArgs = playerArgsFrom(a.Archive3)
- if op.CardGoto == model.CardGotoPlayer && c.Base.PlayerArgs == nil {
- log.Warn("player card aid(%d) can't auto player", a.Aid)
- return
- }
- c.Args.fromArchive(a.Archive3, c.Tagm[op.Tid])
- upID = a.Author.Mid
- case map[int64]*live.Room:
- rm := main.(map[int64]*live.Room)
- r, ok := rm[op.ID]
- if !ok || r.LiveStatus != 1 {
- return
- }
- c.Base.from(op.Param, r.Cover, r.Title, model.GotoLive, op.URI, model.LiveRoomHandler(r))
- c.Avatar = avatarFrom(&AvatarStatus{Cover: r.Face, Text: r.Uname, Goto: model.GotoMid, Param: strconv.FormatInt(r.UID, 10), Type: model.AvatarRound})
- c.CoverLeftText1 = model.StatString(r.Online, "")
- c.CoverLeftIcon1 = model.IconOnline
- coverButton = &ButtonStatus{Goto: model.GotoMid, Param: strconv.FormatInt(r.UID, 10), IsAtten: c.IsAttenm[r.UID]}
- if c.Rcmd != nil && (c.Rcmd.RcmdReason != nil || c.IsAttenm[r.UID] == 1) {
- c.RcmdReason, _ = rcmdReason(c.Rcmd.RcmdReason, r.Uname, c.IsAttenm[r.UID], c.Cardm)
- c.RcmdReasonStyle = topReasonStyleFrom(c.Rcmd, c.RcmdReason, c.Base.Goto)
- } else {
- button = r
- }
- c.Badge = "直播"
- c.CanPlay = 1
- c.Base.PlayerArgs = playerArgsFrom(r)
- c.Args.fromLiveRoom(r)
- upID = r.UID
- default:
- log.Warn("MiddleCoverV2 From: unexpected type %T", main)
- return
- }
- c.DescButton = buttonFrom(button, op.Plat)
- c.CoverRightButton = buttonFrom(coverButton, op.Plat)
- c.OfficialIcon = model.OfficialIcon(c.Cardm[upID])
- c.Right = true
- }
- func (c *LargeCoverV2) Get() *Base {
- return c.Base
- }
- type ThreeItemV2 struct {
- *Base
- TitleIcon model.Icon `json:"title_icon,omitempty"`
- MoreURI string `json:"more_uri,omitempty"`
- MoreText string `json:"more_text,omitempty"`
- Items []*ThreeItemV2Item `json:"items,omitempty"`
- }
- type ThreeItemV2Item struct {
- Base
- CoverLeftIcon model.Icon `json:"cover_left_icon,omitempty"`
- DescText1 string `json:"desc_text_1,omitempty"`
- DescIcon1 model.Icon `json:"desc_icon_1,omitempty"`
- DescText2 string `json:"desc_text_2,omitempty"`
- DescIcon2 model.Icon `json:"desc_icon_2,omitempty"`
- Badge string `json:"badge,omitempty"`
- }
- func (c *ThreeItemV2) From(main interface{}, op *operate.Card) {
- switch main.(type) {
- case map[model.Gt]interface{}:
- intfcm := main.(map[model.Gt]interface{})
- if op == nil {
- return
- }
- switch op.CardGoto {
- case model.CardGotoRank:
- const (
- _title = "全站排行榜"
- _limit = 3
- )
- c.Base.from("0", "", _title, "", "", nil)
- c.TitleIcon = model.IconRank
- c.MoreURI = model.FillURI(op.Goto, op.URI, nil)
- c.MoreText = "查看更多"
- c.Items = make([]*ThreeItemV2Item, 0, _limit)
- for _, v := range op.Items {
- if v == nil {
- continue
- }
- intfc, ok := intfcm[v.Goto]
- if !ok {
- continue
- }
- var item *ThreeItemV2Item
- switch intfc.(type) {
- case map[int64]*archive.ArchiveWithPlayer:
- am := intfc.(map[int64]*archive.ArchiveWithPlayer)
- a, ok := am[v.ID]
- if !ok || !model.AvIsNormal(a) {
- continue
- }
- item = &ThreeItemV2Item{
- DescText1: model.ScoreString(v.Score),
- }
- item.Base.from(v.Param, a.Pic, a.Title, model.GotoAv, v.URI, model.AvPlayHandler(a.Archive3, a.PlayerInfo, op.TrackID))
- item.Args.fromArchive(a.Archive3, nil)
- default:
- log.Warn("ThreeItemV2 From: unexpected type %T", intfc)
- continue
- }
- c.Items = append(c.Items, item)
- if len(c.Items) == _limit {
- break
- }
- }
- if len(c.Items) < _limit {
- return
- }
- c.Items[0].CoverLeftIcon = model.IconGoldMedal
- c.Items[1].CoverLeftIcon = model.IconSilverMedal
- c.Items[2].CoverLeftIcon = model.IconBronzeMedal
- case model.CardGotoConverge:
- limit := 3
- if op.Coverm[c.Columnm] != "" {
- limit = 2
- }
- c.Base.from(op.Param, op.Coverm[c.Columnm], op.Title, op.Goto, op.URI, nil)
- c.MoreURI = model.FillURI(model.GotoConverge, op.Param, nil)
- c.MoreText = "查看更多"
- c.Items = make([]*ThreeItemV2Item, 0, len(op.Items))
- for _, v := range op.Items {
- if v == nil {
- continue
- }
- intfc, ok := intfcm[v.Goto]
- if !ok {
- continue
- }
- var item *ThreeItemV2Item
- switch intfc.(type) {
- case map[int64]*archive.ArchiveWithPlayer:
- am := intfc.(map[int64]*archive.ArchiveWithPlayer)
- a, ok := am[v.ID]
- if !ok || !model.AvIsNormal(a) {
- continue
- }
- item = &ThreeItemV2Item{
- DescText1: model.StatString(a.Stat.View, ""),
- DescIcon1: model.IconPlay,
- DescText2: model.StatString(a.Stat.Danmaku, ""),
- DescIcon2: model.IconDanmaku,
- }
- if op.SwitchLike == model.SwitchFeedIndexLike {
- item.DescText1 = model.StatString(a.Stat.Like, "")
- item.DescIcon1 = model.IconLike
- item.DescText2 = model.StatString(a.Stat.View, "")
- item.DescIcon2 = model.IconPlay
- }
- item.Base.from(v.Param, a.Pic, a.Title, model.GotoAv, v.URI, model.AvPlayHandler(a.Archive3, a.PlayerInfo, op.TrackID))
- item.Args.fromArchive(a.Archive3, nil)
- case map[int64]*live.Room:
- rm := intfc.(map[int64]*live.Room)
- r, ok := rm[v.ID]
- if !ok || r.LiveStatus != 1 {
- continue
- }
- item = &ThreeItemV2Item{
- DescText1: model.StatString(r.Online, ""),
- DescIcon1: model.IconOnline,
- Badge: "直播",
- }
- item.Base.from(v.Param, r.Cover, r.Title, model.GotoLive, v.URI, model.LiveRoomHandler(r))
- item.Args.fromLiveRoom(r)
- case map[int64]*article.Meta:
- mm := intfc.(map[int64]*article.Meta)
- m, ok := mm[v.ID]
- if !ok {
- continue
- }
- if len(m.ImageURLs) == 0 {
- continue
- }
- item = &ThreeItemV2Item{
- Badge: "文章",
- }
- item.Base.from(v.Param, m.ImageURLs[0], m.Title, model.GotoArticle, v.URI, nil)
- if m.Stats != nil {
- item.DescText1 = model.StatString(int32(m.Stats.View), "")
- item.DescIcon1 = model.IconRead
- item.DescText2 = model.StatString(int32(m.Stats.Reply), "")
- item.DescIcon2 = model.IconComment
- }
- item.Args.fromArticle(m)
- default:
- log.Warn("ThreeItemV2 From: unexpected type %T", intfc)
- continue
- }
- c.Items = append(c.Items, item)
- if len(c.Items) == limit {
- break
- }
- }
- if len(c.Items) < limit {
- return
- }
- default:
- log.Warn("ThreeItemV2 From: unexpected card_goto %s", op.CardGoto)
- return
- }
- default:
- log.Warn("ThreeItemV2 From: unexpected type %T", main)
- return
- }
- c.Right = true
- }
- func (c *ThreeItemV2) Get() *Base {
- return c.Base
- }
- type SmallCoverV4 struct {
- *Base
- CoverBadge string `json:"cover_badge,omitempty"`
- Desc string `json:"desc,omitempty"`
- TitleRightText string `json:"title_right_text,omitempty"`
- TitleRightPic model.Icon `json:"title_right_pic,omitempty"`
- }
- func (c *SmallCoverV4) From(main interface{}, op *operate.Card) {
- switch main.(type) {
- case *bangumi.Update:
- title := "你的追番更新啦"
- const (
- _updates = 99
- )
- u := main.(*bangumi.Update)
- if u == nil || u.Updates == 0 {
- return
- }
- emojim := map[string]struct{}{
- "(´∀`*)ウフフ": struct{}{},
- "ヾ( ・∀・)ノ": struct{}{},
- "(`・ω・´)ゞ": struct{}{},
- "(・∀・)イイ!!": struct{}{},
- }
- for emoji := range emojim {
- title = title + emoji
- break
- }
- c.Base.from("", u.SquareCover, title, "", "", nil)
- updates := u.Updates
- if updates > _updates {
- updates = _updates
- c.TitleRightPic = model.IconBomb
- } else {
- c.TitleRightPic = model.IconTV
- }
- c.Desc = u.Title
- c.TitleRightText = strconv.Itoa(updates)
- default:
- log.Warn("SmallCoverV4 From: unexpected type %T", main)
- return
- }
- c.Right = true
- }
- func (c *SmallCoverV4) Get() *Base {
- return c.Base
- }
- type TwoItemV2 struct {
- *Base
- Items []*TwoItemV2Item `json:"items,omitempty"`
- }
- type TwoItemV2Item struct {
- Base
- Badge string `json:"badge,omitempty"`
- CoverLeftText1 string `json:"cover_left_text_1,omitempty"`
- CoverLeftIcon1 model.Icon `json:"cover_left_icon_1,omitempty"`
- DescButton *Button `json:"desc_button,omitempty"`
- }
- func (c *TwoItemV2) From(main interface{}, op *operate.Card) {
- if op == nil {
- return
- }
- switch main.(type) {
- case map[int64][]*live.Card:
- const _limit = 2
- csm := main.(map[int64][]*live.Card)
- cs, ok := csm[op.ID]
- if !ok {
- return
- }
- c.Base.from(op.Param, "", "", "", "", nil)
- c.Items = make([]*TwoItemV2Item, 0, _limit)
- for _, card := range cs {
- if card == nil || card.LiveStatus != 1 {
- continue
- }
- item := &TwoItemV2Item{
- Badge: "直播",
- CoverLeftText1: model.StatString(card.Online, ""),
- CoverLeftIcon1: model.IconOnline,
- }
- item.DescButton = buttonFrom(card, op.Plat)
- item.Base.from(strconv.FormatInt(card.RoomID, 10), card.ShowCover, card.Title, model.GotoLive, strconv.FormatInt(card.RoomID, 10), model.LiveUpHandler(card))
- item.Args.fromLiveUp(card)
- c.Items = append(c.Items, item)
- if len(c.Items) == _limit {
- break
- }
- }
- }
- c.Right = true
- }
- func (c *TwoItemV2) Get() *Base {
- return c.Base
- }
- type MultiItem struct {
- *Base
- MoreURI string `json:"more_uri,omitempty"`
- MoreText string `json:"more_text,omitempty"`
- Items []Handler `json:"items,omitempty"`
- }
- func (c *MultiItem) From(main interface{}, op *operate.Card) {
- if op == nil {
- return
- }
- switch main.(type) {
- case map[model.Gt]interface{}:
- intfcm := main.(map[model.Gt]interface{})
- switch op.CardGoto {
- case model.CardGotoTagRcmd, model.CardGotoContentRcmd:
- items := make([]Handler, 0, len(op.Items))
- for _, v := range op.Items {
- if v == nil {
- continue
- }
- intfc, ok := intfcm[v.Goto]
- if !ok {
- continue
- }
- var hander Handler
- switch intfc.(type) {
- case map[int64]*archive.ArchiveWithPlayer:
- am := intfc.(map[int64]*archive.ArchiveWithPlayer)
- a, ok := am[v.ID]
- if !ok || !model.AvIsNormal(a) {
- continue
- }
- item := &SmallCoverV2{
- CoverLeftText1: model.StatString(a.Stat.View, ""),
- CoverLeftIcon1: model.IconPlay,
- CoverLeftText2: model.StatString(a.Stat.Danmaku, ""),
- CoverLeftIcon2: model.IconDanmaku,
- CoverRightText: model.DurationString(a.Duration),
- Base: &Base{CardType: model.SmallCoverV2},
- }
- if op.SwitchLike == model.SwitchFeedIndexLike {
- item.CoverLeftText1 = model.StatString(a.Stat.Like, "")
- item.CoverLeftIcon1 = model.IconLike
- item.CoverLeftText2 = model.StatString(a.Stat.View, "")
- item.CoverLeftIcon2 = model.IconPlay
- }
- item.Base.from(v.Param, a.Pic, a.Title, model.GotoAv, strconv.FormatInt(a.Aid, 10), model.AvPlayHandler(a.Archive3, a.PlayerInfo, op.TrackID))
- item.Args.fromArchive(a.Archive3, nil)
- if op.Switch == model.SwitchFeedIndexTabThreePoint {
- item.TabThreePointWatchLater()
- }
- item.DescButton = buttonFrom(&ButtonStatus{Text: a.TypeName}, op.Plat)
- hander = item
- case map[int64]*live.Room:
- rm := intfc.(map[int64]*live.Room)
- r, ok := rm[v.ID]
- if !ok || r.LiveStatus != 1 {
- continue
- }
- item := &SmallCoverV2{
- CoverLeftText1: model.StatString(r.Online, ""),
- CoverLeftIcon1: model.IconOnline,
- Badge: "直播",
- Base: &Base{CardType: model.SmallCoverV2},
- }
- item.Base.from(v.Param, r.Cover, r.Title, model.GotoLive, strconv.FormatInt(r.RoomID, 10), model.LiveRoomHandler(r))
- item.Args.fromLiveRoom(r)
- item.DescButton = buttonFrom(r, op.Plat)
- hander = item
- case map[int64]*article.Meta:
- mm := intfc.(map[int64]*article.Meta)
- m, ok := mm[v.ID]
- if !ok {
- continue
- }
- if len(m.ImageURLs) == 0 {
- continue
- }
- item := &SmallCoverV2{
- Badge: "文章",
- Base: &Base{CardType: model.SmallCoverV2},
- }
- item.Base.from(v.Param, m.ImageURLs[0], m.Title, model.GotoArticle, strconv.FormatInt(m.ID, 10), nil)
- if m.Stats != nil {
- item.CoverLeftText1 = model.StatString(int32(m.Stats.View), "")
- item.CoverLeftIcon1 = model.IconRead
- item.CoverLeftText2 = model.StatString(int32(m.Stats.Reply), "")
- item.CoverLeftIcon2 = model.IconComment
- }
- item.Args.fromArticle(m)
- item.DescButton = buttonFrom(m.Categories, op.Plat)
- hander = item
- case map[int64]*operate.Card:
- dm := intfc.(map[int64]*operate.Card)
- d, ok := dm[v.ID]
- if !ok {
- continue
- }
- item := &SmallCoverV2{
- CoverLeftText1: model.DownloadString(d.Download),
- Base: &Base{CardType: model.SmallCoverV2},
- }
- item.Base.from(v.Param, d.Coverm[c.Columnm], d.Title, d.Goto, d.URI, nil)
- hander = item
- case map[int64]*bangumi.Season:
- sm := intfc.(map[int64]*bangumi.Season)
- s, ok := sm[v.ID]
- if !ok {
- continue
- }
- item := &SmallCoverV2{
- CoverLeftText1: model.StatString(s.PlayCount, ""),
- CoverLeftIcon1: model.IconPlay,
- CoverLeftText2: model.StatString(s.Favorites, ""),
- CoverLeftIcon2: model.BangumiIcon(s.SeasonType),
- Badge: s.TypeBadge,
- Desc: s.UpdateDesc,
- Base: &Base{CardType: model.SmallCoverV2},
- }
- item.Base.from(s.EpisodeID, s.Cover, s.Title, model.GotoBangumi, s.EpisodeID, nil)
- hander = item
- case map[int64]*bplus.Picture:
- pm := intfc.(map[int64]*bplus.Picture)
- p, ok := pm[v.ID]
- if !ok {
- continue
- }
- if len(p.Imgs) < 3 {
- hander = &OnePicV2{Base: &Base{CardType: model.OnePicV2}}
- } else {
- hander = &ThreePicV2{Base: &Base{CardType: model.ThreePicV2}}
- }
- hander.From(pm, v)
- if !hander.Get().Right {
- continue
- }
- default:
- log.Warn("MultiItem From: unexpected type %T", intfc)
- continue
- }
- if hander != nil {
- items = append(items, hander)
- }
- }
- if len(items) < 2 {
- return
- }
- if len(items)%2 != 0 {
- c.Items = items[:len(items)-1]
- } else {
- c.Items = items
- }
- var title string
- switch op.Goto {
- case model.GotoTag:
- if t, ok := c.Tagm[op.ID]; ok {
- title = t.Name
- }
- default:
- title = op.Title
- }
- c.Base.from(op.Param, "", title, "", "", nil)
- c.MoreURI = model.FillURI(op.Goto, op.URI, nil)
- c.MoreText = op.Subtitle
- default:
- log.Warn("MultiItem From: unexpected card_goto %s", op.CardGoto)
- return
- }
- case nil:
- switch op.CardGoto {
- case model.CardGotoEntrance:
- c.Items = make([]Handler, 0, len(op.Items))
- for _, v := range op.Items {
- item := &SmallCoverV2{Base: &Base{CardType: model.SmallCoverV2}}
- item.Base.from(v.Param, v.Cover, v.Title, v.Goto, v.URI, nil)
- c.Items = append(c.Items, item)
- }
- }
- default:
- log.Warn("MultiItem From: unexpected type %T", main)
- return
- }
- c.Right = true
- }
- func (c *MultiItem) Get() *Base {
- return c.Base
- }
- type ThreePicV2 struct {
- *Base
- LeftCover string `json:"left_cover,omitempty"`
- RightCover1 string `json:"right_cover_1,omitempty"`
- RightCover2 string `json:"right_cover_2,omitempty"`
- CoverLeftText1 string `json:"cover_left_text_1,omitempty"`
- CoverLeftIcon1 model.Icon `json:"cover_left_icon_1,omitempty"`
- CoverLeftText2 string `json:"cover_left_text_2,omitempty"`
- CoverLeftIcon2 model.Icon `json:"cover_left_icon_2,omitempty"`
- CoverRightText string `json:"cover_right_text,omitempty"`
- CoverRightIcon model.Icon `json:"cover_right_icon,omitempty"`
- CoverRightBackgroundColor string `json:"cover_right_background_color,omitempty"`
- Badge string `json:"badge,omitempty"`
- RcmdReason string `json:"rcmd_reason,omitempty"`
- DescButton *Button `json:"desc_button,omitempty"`
- Desc string `json:"desc,omitempty"`
- Avatar *Avatar `json:"avatar,omitempty"`
- RcmdReasonStyle *ReasonStyle `json:"rcmd_reason_style,omitempty"`
- }
- func (c *ThreePicV2) From(main interface{}, op *operate.Card) {
- var (
- button interface{}
- )
- if op == nil {
- return
- }
- switch main.(type) {
- case map[int64]*bplus.Picture:
- pm := main.(map[int64]*bplus.Picture)
- p, ok := pm[op.ID]
- if !ok || len(p.Imgs) < 3 || p.ViewCount == 0 {
- return
- }
- c.Base.from(op.Param, "", p.DynamicText, model.GotoPicture, strconv.FormatInt(p.DynamicID, 10), nil)
- c.LeftCover = p.Imgs[0]
- c.RightCover1 = p.Imgs[1]
- c.RightCover2 = p.Imgs[2]
- c.CoverLeftText1 = model.StatString(int32(p.ViewCount), "")
- c.CoverLeftIcon1 = model.IconRead
- if p.ImgCount > 3 {
- c.CoverRightText = model.PictureCountString(p.ImgCount)
- c.CoverRightBackgroundColor = "#66666666"
- }
- if c.Rcmd != nil && c.Rcmd.RcmdReason != nil {
- c.RcmdReason, c.Desc = rcmdReason(c.Rcmd.RcmdReason, p.NickName, c.IsAttenm[p.Mid], c.Cardm)
- c.RcmdReasonStyle = topReasonStyleFrom(c.Rcmd, c.RcmdReason, c.Base.Goto)
- } else {
- button = p
- c.Badge = "动态"
- }
- c.Avatar = avatarFrom(&AvatarStatus{Cover: p.FaceImg, Text: p.NickName, Goto: model.GotoDynamicMid, Param: strconv.FormatInt(p.Mid, 10), Type: model.AvatarRound})
- default:
- log.Warn("ThreePicV2 From: unexpected type %T", main)
- return
- }
- c.DescButton = buttonFrom(button, op.Plat)
- c.Right = true
- }
- func (c *ThreePicV2) Get() *Base {
- return c.Base
- }
- type OnePicV2 struct {
- *Base
- CoverLeftText1 string `json:"cover_left_text_1,omitempty"`
- CoverLeftIcon1 model.Icon `json:"cover_left_icon_1,omitempty"`
- CoverRightText string `json:"cover_right_text,omitempty"`
- CoverRightIcon model.Icon `json:"cover_right_icon,omitempty"`
- CoverRightBackgroundColor string `json:"cover_right_background_color,omitempty"`
- Badge string `json:"badge,omitempty"`
- RcmdReason string `json:"rcmd_reason,omitempty"`
- Avatar *Avatar `json:"avatar,omitempty"`
- RcmdReasonStyle *ReasonStyle `json:"rcmd_reason_style,omitempty"`
- }
- func (c *OnePicV2) From(main interface{}, op *operate.Card) {
- var (
- button interface{}
- )
- if op == nil {
- return
- }
- switch main.(type) {
- case map[int64]*bplus.Picture:
- pm := main.(map[int64]*bplus.Picture)
- p, ok := pm[op.ID]
- if !ok || len(p.Imgs) == 0 || p.ViewCount == 0 {
- return
- }
- c.Base.from(op.Param, p.Imgs[0], p.DynamicText, model.GotoPicture, strconv.FormatInt(p.DynamicID, 10), nil)
- c.CoverLeftText1 = model.StatString(int32(p.ViewCount), "")
- c.CoverLeftIcon1 = model.IconRead
- if p.ImgCount > 1 {
- c.CoverRightText = model.PictureCountString(p.ImgCount)
- c.CoverRightBackgroundColor = "#66666666"
- }
- if c.Rcmd != nil && c.Rcmd.RcmdReason != nil {
- c.RcmdReason, _ = rcmdReason(c.Rcmd.RcmdReason, p.NickName, c.IsAttenm[p.Mid], c.Cardm)
- c.RcmdReasonStyle = topReasonStyleFrom(c.Rcmd, c.RcmdReason, c.Base.Goto)
- } else {
- button = p
- c.Badge = "动态"
- }
- c.Avatar = avatarFrom(&AvatarStatus{Cover: p.FaceImg, Text: p.NickName, Goto: model.GotoDynamicMid, Param: strconv.FormatInt(p.Mid, 10), Type: model.AvatarRound})
- default:
- log.Warn("OnePicV2 From: unexpected type %T", main)
- return
- }
- c.DescButton = buttonFrom(button, op.Plat)
- c.Right = true
- }
- func (c *OnePicV2) Get() *Base {
- return c.Base
- }
|