Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["const.go"],
importpath = "go-common/app/interface/main/app-show/model",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = ["//app/service/main/archive/api:go_default_library"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//app/interface/main/app-show/model/activity:all-srcs",
"//app/interface/main/app-show/model/ad:all-srcs",
"//app/interface/main/app-show/model/bangumi:all-srcs",
"//app/interface/main/app-show/model/banner:all-srcs",
"//app/interface/main/app-show/model/card:all-srcs",
"//app/interface/main/app-show/model/daily:all-srcs",
"//app/interface/main/app-show/model/dislike:all-srcs",
"//app/interface/main/app-show/model/feed:all-srcs",
"//app/interface/main/app-show/model/live:all-srcs",
"//app/interface/main/app-show/model/recommend:all-srcs",
"//app/interface/main/app-show/model/region:all-srcs",
"//app/interface/main/app-show/model/show:all-srcs",
"//app/interface/main/app-show/model/tag:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,28 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["activity.go"],
importpath = "go-common/app/interface/main/app-show/model/activity",
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,11 @@
package activity
type Activity struct {
ID int64 `json:"id"`
Name string `json:"name"`
H5URL string `json:"h5_url"`
H5Cover string `json:"h5_cover"`
Desc string `json:"desc"`
Stime string `json:"stime"`
Etime string `json:"etime"`
}

View File

@@ -0,0 +1,32 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["ad.go"],
importpath = "go-common/app/interface/main/app-show/model/ad",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-show/model/banner:go_default_library",
"//library/log:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,85 @@
package ad
import (
"strconv"
"go-common/app/interface/main/app-show/model/banner"
"go-common/library/log"
)
type ADRequest struct {
RequestID string `json:"request_id"`
ADIndexs map[string]map[string]*ADIndex `json:"ads_info"`
}
type ADIndex struct {
Index int `json:"index"`
Info *ADInfo `json:"ad_info"`
IsAd bool `json:"is_ad"`
CmMark int `json:"cm_mark"`
}
type ADInfo struct {
CreativeID int `json:"creative_id"`
CreativeType int `json:"creative_type"`
CreativeContent struct {
Title string `json:"title"`
Desc string `json:"description"`
VideoID int64 `json:"video_id"`
UserName string `json:"username"`
ImageURL string `json:"image_url"`
ImageMD5 string `json:"image_md5"`
LogURL string `json:"log_url"`
LogMD5 string `json:"log_md5"`
URL string `json:"url"`
ClickURL string `json:"click_url"`
ShowURL string `json:"show_url"`
} `json:"creative_content"`
AdCb string `json:"ad_cb"`
}
// RecoverBanner
func (adr *ADRequest) ConvertBanner(ip, mobiApp string, build int) (banners map[int]map[int]*banner.Banner) {
banners = map[int]map[int]*banner.Banner{}
for resIdStr, sAdis := range adr.ADIndexs {
resId, _ := strconv.Atoi(resIdStr)
if len(sAdis) == 0 {
log.Info("mobi_app:%v-build:%v-resource:%v-is_ad_loc:%v", mobiApp, build, resId, false)
continue
}
for sidStr, adi := range sAdis {
sid, _ := strconv.Atoi(sidStr)
var bnnr = &banner.Banner{
IsAdLoc: true,
IsAd: adi.IsAd,
IsAdReplace: false,
CmMark: adi.CmMark,
Rank: adi.Index,
SrcId: sid,
RequestId: adr.RequestID,
ClientIp: ip,
}
if adInfo := adi.Info; adInfo != nil {
bnnr.IsAdReplace = true
bnnr.CreativeId = adInfo.CreativeID
bnnr.AdCb = adInfo.AdCb
bnnr.ShowUrl = adInfo.CreativeContent.ShowURL
bnnr.ClickUrl = adInfo.CreativeContent.ClickURL
bnnr.Title = adInfo.CreativeContent.Title
bnnr.Image = adInfo.CreativeContent.ImageURL
bnnr.Hash = adInfo.CreativeContent.ImageMD5
bnnr.URI = adInfo.CreativeContent.URL
bnnr.Channel = "*"
}
if _, ok := banners[resId]; ok {
banners[resId][bnnr.Rank] = bnnr
} else {
banners[resId] = map[int]*banner.Banner{
bnnr.Rank: bnnr,
}
}
log.Info("mobi_app:%v-build:%v-source:%v-resource:%v-is_ad_loc:%v", mobiApp, build, sid, resId, true)
}
}
return
}

View File

@@ -0,0 +1,28 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["bangumi.go"],
importpath = "go-common/app/interface/main/app-show/model/bangumi",
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,35 @@
package bangumi
type Bangumi struct {
SeasonId string `json:"season_id"`
Spid string `json:"spid"`
Title string `json:"title"`
Brief string `json:"brief"`
Cover string `json:"cover"`
Evaluate string `json:"evaluate"`
TotalCount string `json:"total_count"`
PlayCount string `json:"play_count"`
DanmakuCount string `json:"danmaku_count"`
Finish string `json:"is_finish"`
Badge string `json:"badge"`
SeasonStatus int `json:"season_status"`
Favorites string `json:"favorites"`
NewEp struct {
Aid string `json:"av_id"`
Cover string `json:"cover"`
Index string `json:"index"`
UpTime string `json:"update_time"`
} `json:"new_ep"`
}
type SeasonInfo struct {
SeasonID int64 `json:"season_id"`
SeasonType int `json:"season_type"`
EpisodeID int `json:"episode_id"`
}
type Banner struct {
Title string `json:"title"`
Image string `json:"img"`
URI string `json:"link"`
}

View File

@@ -0,0 +1,34 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["banner.go"],
importpath = "go-common/app/interface/main/app-show/model/banner",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-show/model:go_default_library",
"//app/interface/main/app-show/model/bangumi:go_default_library",
"//app/service/main/resource/model:go_default_library",
"//library/time:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,179 @@
package banner
import (
"encoding/json"
xtime "go-common/library/time"
"strconv"
"go-common/app/interface/main/app-show/model"
"go-common/app/interface/main/app-show/model/bangumi"
resource "go-common/app/service/main/resource/model"
)
// Banner struct
type Banner struct {
ID int `json:"id"`
ParentID int `json:"-"`
Plat int8 `json:"-"`
Module string `json:"-"`
Position string `json:"-"`
Title string `json:"title"`
Image string `json:"image"`
Hash string `json:"hash"`
URI string `json:"uri"`
Goto string `json:"-"`
Value string `json:"-"`
Param string `json:"-"`
Channel string `json:"-"`
Build int `json:"-"`
Condition string `json:"-"`
Area string `json:"-"`
Rank int `json:"-"`
Rule string `json:"-"`
Type int8 `json:"-"`
Start xtime.Time `json:"-"`
End xtime.Time `json:"-"`
MTime xtime.Time `json:"-"`
ResourceID int `json:"resource_id"`
RequestId string `json:"request_id,omitempty"`
CreativeId int `json:"creative_id,omitempty"`
SrcId int `json:"src_id,omitempty"`
IsAd bool `json:"is_ad"`
IsAdReplace bool `json:"-"`
IsAdLoc bool `json:"is_ad_loc,omitempty"`
CmMark int `json:"cm_mark"`
AdCb string `json:"ad_cb,omitempty"`
ShowUrl string `json:"show_url,omitempty"`
ClickUrl string `json:"click_url,omitempty"`
ClientIp string `json:"client_ip,omitempty"`
Index int `json:"index"`
ServerType int `json:"server_type"`
Extra json.RawMessage `json:"extra,omitempty"`
}
type JsonBanner struct {
Area string `json:"area"`
Hash string `json:"hash"`
Build int `json:"build"`
Condition string `json:"conditions"`
Channel string `json:"channel"`
}
// Banner limit
type Limit struct {
Rule string `json:"-"`
}
// Json limit
type JsonLimit struct {
Limit int `json:"limit"`
Resrc []string `json:"resrc"`
}
// PlatChange
func (b *Banner) BannerChange() {
var tmp *JsonBanner
if err := json.Unmarshal([]byte(b.Rule), &tmp); err == nil {
b.Area = tmp.Area
b.Build = tmp.Build
b.Condition = tmp.Condition
if tmp.Channel == "" {
b.Channel = "*"
} else {
b.Channel = tmp.Channel
}
b.Hash = tmp.Hash
}
switch b.Plat {
case 1: // resource iphone
b.Plat = model.PlatIPhone
case 2: // resource android
b.Plat = model.PlatAndroid
case 3: // resource pad
b.Plat = model.PlatIPad
case 4: // resource iphoneg
b.Plat = model.PlatIPhoneI
case 5: // resource androidg
b.Plat = model.PlatAndroidG
case 6: // resource padg
b.Plat = model.PlatIPadI
case 8: // resource androidi
b.Plat = model.PlatAndroidI
}
if b.Value == "" {
return
}
switch b.Type {
case 6:
//GotoAv
b.URI = "bilibili://video/" + b.Value
case 4:
//GotoLive
if b.Plat == model.PlatIPad {
b.URI = "bilibili://player/live/" + b.Value
} else {
b.URI = "bilibili://live/" + b.Value
}
case 3:
//GotoBangumi
b.URI = "bilibili://bangumi/season/" + b.Value
case 5:
//GotoGame
b.URI = "bilibili://game/" + b.Value
case 2:
//GotoWeb
b.URI = b.Value
}
}
// LimitChange
func (l *Limit) LimitChange() (data map[int]int) {
data = map[int]int{}
var (
tmp = &JsonLimit{}
err error
resid int
)
if err = json.Unmarshal([]byte(l.Rule), tmp); err != nil {
return
}
l.Rule = ""
for _, residstr := range tmp.Resrc {
resid, err = strconv.Atoi(residstr)
if err != nil {
return
}
data[resid] = tmp.Limit
}
return
}
// ResChangeBanner
func (b *Banner) ResChangeBanner(resb *resource.Banner) {
b.ID = resb.ID
b.Title = resb.Title
b.Image = resb.Image
b.Hash = resb.Hash
b.URI = resb.URI
b.ResourceID = resb.ResourceID
b.RequestId = resb.RequestId
b.CreativeId = resb.CreativeId
b.SrcId = resb.SrcId
b.IsAd = resb.IsAd
b.IsAdLoc = resb.IsAdLoc
b.CmMark = resb.CmMark
b.AdCb = resb.AdCb
b.ShowUrl = resb.ShowUrl
b.ClickUrl = resb.ClickUrl
b.ClientIp = resb.ClientIp
b.Index = resb.Index
b.ServerType = resb.ServerType
b.Extra = resb.Extra
}
// BgmChangeBanner bangumiBanner change banner
func (b *Banner) BgmChangeBanner(bgmb *bangumi.Banner) {
b.Title = bgmb.Title
b.Image = bgmb.Image
b.URI = bgmb.URI
}

View File

@@ -0,0 +1,33 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["card.go"],
importpath = "go-common/app/interface/main/app-show/model/card",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-card/model/card/ai:go_default_library",
"//app/interface/main/app-show/model:go_default_library",
"//library/time:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,263 @@
package card
import (
"encoding/json"
"strconv"
"go-common/app/interface/main/app-card/model/card/ai"
"go-common/app/interface/main/app-show/model"
xtime "go-common/library/time"
)
type Column struct {
ID int `json:"-"`
Tab int `json:"-"`
RegionID int `json:"-"`
Tpl int `json:"-"`
Name string `json:"-"`
Desc string `json:"-"`
PlatVer string `json:"-"`
Plat int8 `json:"-"`
Build int `json:"-"`
Condition string `json:"-"`
Type string `json:"-"`
}
type ColumnNper struct {
ID int `json:"-"`
ColumnID int `json:"-"`
Name string `json:"-"`
Desc string `json:"-"`
Nper string `json:"-"`
NperTime xtime.Time `json:"-"`
Cover string `json:"-"`
PlatVer string `json:"-"`
Title string `json:"-"`
Rtype int `json:"-"`
Rvalue string `json:"-"`
Plat int8 `json:"-"`
Build int `json:"-"`
Condition string `json:"-"`
Goto string `json:"-"`
Param string `json:"-"`
URI string `json:"-"`
}
type Content struct {
ID int `json:"-"`
Module int `json:"-"`
RecID int `json:"-"`
Type int8 `json:"-"`
Value string `json:"-"`
Title string `json:"-"`
TagID int `json:"-"`
}
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:"-"`
}
type ColumnList struct {
Cid int `json:"-"`
Ceid int `json:"-"`
Name string `json:"-"`
Cname string `json:"-"`
PlatVer string `json:"-"`
Plat int8 `json:"-"`
Build int `json:"-"`
Condition string `json:"-"`
}
type PlatLimit struct {
Plat int8 `json:"plat"`
Build int `json:"build"`
Condition string `json:"conditions"`
}
type PopularCard struct {
ID int64 `json:"id"`
Title string `json:"title"`
ChannelID int64 `json:"channel_id"`
Type string `json:"type"`
Value int64 `json:"value"`
Reason string `json:"reason"`
ReasonType int8 `json:"reason_type"`
Pos int `json:"pos"`
FromType string `json:"from_type"`
PopularCardPlat map[int8][]*PopularCardPlat `json:"popularcardplat"`
Idx int64 `json:"-"`
CornerMark int8 `json:"corner_mark"`
}
type PopularCardPlat struct {
CardID int64 `json:"card_id"`
Plat int8 `json:"plat"`
Condition string `json:"condition"`
Build int `json:"build"`
}
func (c *Card) CardPlatChange() (platlinits []*PlatLimit) {
platlinits = platJsonChange(c.PlatVer)
return
}
func (c *Column) ColumnPlatChange() (platlinits []*PlatLimit) {
platlinits = platJsonChange(c.PlatVer)
return
}
func (c *ColumnList) ColumnListPlatChange() (platlinits []*PlatLimit) {
platlinits = platJsonChange(c.PlatVer)
return
}
func (c *ColumnNper) ColumnNperPlatChange() (platlinits []*PlatLimit) {
platlinits = platJsonChange(c.PlatVer)
return
}
func (c *Card) CardGotoChannge() {
c.TypeStr = cardTypeChange(c.Type)
c.Goto, c.Param, c.URi = gotoURI(c.Rtype, c.Rvalue)
}
func (c *Column) ColumnGotoChannge() {
switch c.Tpl {
case 1:
c.Type = model.GotoDaily
case 2:
c.Type = model.GotoColumn
}
}
func (c *ColumnNper) ColumnNperGotoChange() {
c.Goto, c.Param, c.URI = gotoURI(c.Rtype, c.Rvalue)
}
func gotoURI(typeInt int, value string) (gotoStr, paramStr, uri string) {
switch typeInt {
case 1:
gotoStr = model.GotoDaily
case 4:
gotoStr = model.GotoWeb
case 5:
gotoStr = model.GotoAv
case 6:
gotoStr = model.GotoLive
case 7:
gotoStr = model.GotoBangumi
case 8:
gotoStr = model.GotoGame
case 9:
gotoStr = model.GotoColumn
case 10:
gotoStr = model.GotoColumnStage
case 11:
gotoStr = model.GotoArticle
default:
return
}
paramStr = value
uri = model.FillURI(gotoStr, paramStr, nil)
return
}
func cardTypeChange(cardInt int) (cardStr string) {
switch cardInt {
case 1:
cardStr = model.GotoDaily
case 2:
cardStr = model.GotoTopic
case 3:
cardStr = model.GotoActivity
case 4:
cardStr = model.GotoRank
case 5:
cardStr = model.GotoCard
case 6:
cardStr = model.GotoVeidoCard
case 7:
cardStr = model.GotoSpecialCard
case 8:
cardStr = model.GotoTagCard
}
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 = model.PlatAndroid
case "1": // resource iphone
platlinit.Plat = model.PlatIPhone
case "2": // resource pad
platlinit.Plat = model.PlatIPad
case "5": // resource iphone_i
platlinit.Plat = model.PlatIPhoneI
case "8": // resource android_i
platlinit.Plat = model.PlatAndroidI
}
platlinit.Build, _ = strconv.Atoi(limit.Build)
platlinit.Condition = limit.Condition
platlinits = append(platlinits, platlinit)
}
}
return
}
func (c *PopularCard) PopularCardToAiChange() (a *ai.Item) {
a = &ai.Item{
Goto: c.Type,
ID: c.Value,
RcmdReason: c.fromRcmdReason(),
CornerMark: c.CornerMark,
}
if c.CornerMark == 2 {
a.CornerMark = 4
}
return
}
func (c *PopularCard) fromRcmdReason() (a *ai.RcmdReason) {
var content string
switch c.ReasonType {
case 0:
content = ""
case 1:
content = "编辑精选"
case 2:
content = "热门推荐"
case 3:
content = c.Reason
}
if content != "" {
a = &ai.RcmdReason{ID: 1, Content: content, BgColor: "yellow", IconLocation: "left_top"}
}
return
}

View File

@@ -0,0 +1,345 @@
package model
import (
"fmt"
"go-common/app/service/main/archive/api"
"strconv"
"strings"
)
const (
// PlatAndroid is int8 for android.
PlatAndroid = int8(0)
// PlatIPhone is int8 for iphone.
PlatIPhone = int8(1)
// PlatIPad is int8 for ipad.
PlatIPad = int8(2)
// PlatWPhone is int8 for wphone.
PlatWPhone = int8(3)
// PlatAndroidG is int8 for Android Global.
PlatAndroidG = int8(4)
// PlatIPhoneI is int8 for Iphone Global.
PlatIPhoneI = int8(5)
// PlatIPadI is int8 for IPAD Global.
PlatIPadI = int8(6)
// PlatAndroidTV is int8 for AndroidTV Global.
PlatAndroidTV = int8(7)
// PlatAndroidI is int8 for Android Global.
PlatAndroidI = int8(8)
// PlatAndroidB is int8 for Android Bule.
PlatAndroidB = int8(9)
GotoAv = "av"
GotoWeb = "web"
GotoBangumi = "bangumi"
GotoBangumiWeb = "bangumi_web"
GotoSp = "sp"
GotoLive = "live"
GotoGame = "game"
GotoArticle = "article"
GotoActivity = "activity_new"
GotoTopic = "topic_new"
GotoDaily = "daily"
GotoRank = "rank"
GotoCard = "card"
GotoVeidoCard = "video_card"
GotoSpecialCard = "special_card"
GotoTagCard = "tag_card"
GotoColumn = "column"
GotoColumnStage = "column_stage"
GotoTagID = "tag_id"
GotoHotTopic = "hottopic"
GotoUpRcmdNew = "up_rcmd_new"
GotoUpRcmdNewV2 = "up_rcmd_new_v2"
GotoHotDynamic = "hot_dynamic"
GotoEventTopic = "event_topic"
CardGotoAv = int8(1)
CardGotoTopic = int8(2)
CardGotoActivity = int8(3)
// EnvPro is pro.
EnvPro = "pro"
// EnvTest is env.
EnvTest = "test"
// EnvDev is env.
EnvDev = "dev"
// movie copywriting
CoverIng = "即将上映"
CoverPay = "付费观看"
CoverFree = "免费观看"
CoverVipFree = "付费观看"
CoverVipOnly = "专享"
CoverVipFirst = "抢先"
)
var (
AvHandler = func(a *api.Arc) func(uri string) string {
return func(uri string) string {
if a == nil {
return uri
}
if a.Dimension.Height != 0 || a.Dimension.Width != 0 {
return fmt.Sprintf("%s?player_width=%d&player_height=%d&player_rotate=%d", uri, a.Dimension.Width, a.Dimension.Height, a.Dimension.Rotate)
}
return uri
}
}
)
// IsAndroid check plat is android or ipad.
func IsAndroid(plat int8) bool {
return plat == PlatAndroid || plat == PlatAndroidG || plat == PlatAndroidB || plat == PlatAndroidI
}
// IsIOS check plat is iphone or ipad.
func IsIOS(plat int8) bool {
return plat == PlatIPad || plat == PlatIPhone || plat == PlatIPadI || plat == PlatIPhoneI
}
// IsIPad check plat is pad.
func IsIPad(plat int8) bool {
return plat == PlatIPad || plat == PlatIPadI
}
// FillURI deal app schema.
func FillURI(gt, param string, f func(uri string) string) (uri string) {
if param == "" {
return
}
switch gt {
case GotoAv, "":
uri = "bilibili://video/" + param
case GotoLive:
uri = "bilibili://live/" + param
case GotoBangumi:
uri = "bilibili://bangumi/season/" + param
case GotoBangumiWeb:
uri = "http://bangumi.bilibili.com/anime/" + param
case GotoGame:
uri = "bilibili://game/" + param
case GotoSp:
uri = "bilibili://splist/" + param
case GotoWeb:
uri = param
case GotoDaily:
uri = "bilibili://daily/" + param
case GotoColumn:
uri = "bilibili://pegasus/list/column/" + param
case GotoArticle:
uri = "bilibili://article/" + param
}
if f != nil {
uri = f(uri)
}
return
}
func FillURIHotTopic(tagID, tagName string) (uri string) {
return "bilibili://tag/" + tagID + "?name=" + tagName + "&show=dynamic"
}
func FillURIBangumi(gt, seasonID, episodeID string, episodeType int) (uri string) {
var typeStr string
switch episodeType {
case 1, 4:
typeStr = "anime"
}
switch gt {
case GotoBangumi:
uri = "http://bangumi.bilibili.com/" + typeStr + "/" + seasonID + "/play#" + episodeID
}
return
}
// FillURICategory deal app schema.
func FillURICategory(gt, columnID, sectionID string) (uri string) {
if columnID == "" || sectionID == "" {
return
}
switch gt {
case GotoColumnStage:
uri = "bilibili://pegasus/list/column/" + columnID + "/?sectionId=" + sectionID
}
return
}
func CoverURLHTTPS(uri string) (cover string) {
if strings.HasPrefix(uri, "http://") {
cover = "https://" + uri[7:]
} else {
cover = uri
}
return
}
// CoverURL convert cover url to full url.
func CoverURL(uri string) (cover string) {
if uri == "" {
cover = "http://static.hdslb.com/images/transparent.gif"
return
}
if strings.HasPrefix(uri, "http://i0.hdslb.com") || strings.HasPrefix(uri, "http://i1.hdslb.com") || strings.HasPrefix(uri, "http://i2.hdslb.com") {
uri = uri[19:]
} else if strings.HasPrefix(uri, "https://i0.hdslb.com") || strings.HasPrefix(uri, "https://i1.hdslb.com") || strings.HasPrefix(uri, "https://i2.hdslb.com") {
uri = uri[20:]
}
cover = uri
if strings.HasPrefix(uri, "/bfs") {
cover = "http://i0.hdslb.com" + uri
return
}
if strings.Index(uri, "http://") == 0 {
return
}
if len(uri) >= 10 && uri[:10] == "/templets/" {
return
}
if strings.HasPrefix(uri, "group1") || strings.HasPrefix(uri, "/group1") {
cover = "http://i0.hdslb.com/" + uri
return
}
if pos := strings.Index(uri, "/uploads/"); pos != -1 && (pos == 0 || pos == 3) {
cover = uri[pos+8:]
}
cover = strings.Replace(cover, "{IMG}", "", -1)
cover = "http://i0.hdslb.com" + cover
return
}
// InvalidBuild check source build is not allow by config build and condition.
// eg: when condition is gt, means srcBuild must gt cfgBuild, otherwise is invalid srcBuild.
func InvalidBuild(srcBuild, cfgBuild int, cfgCond string) bool {
if cfgBuild != 0 && cfgCond != "" {
switch cfgCond {
case "gt":
if cfgBuild >= srcBuild {
return true
}
case "lt":
if cfgBuild <= srcBuild {
return true
}
case "eq":
if cfgBuild != srcBuild {
return true
}
case "ne":
if cfgBuild == srcBuild {
return true
}
}
}
return false
}
// InvalidChannel check source channel is not allow by config channel.
func InvalidChannel(plat int8, srcCh, cfgCh string) bool {
return plat == PlatAndroid && cfgCh != "*" && cfgCh != srcCh
}
// Plat return plat by platStr or mobiApp
func Plat(mobiApp, device string) int8 {
switch mobiApp {
case "iphone", "iphone_b":
if device == "pad" {
return PlatIPad
}
return PlatIPhone
case "white":
return PlatIPhone
case "ipad":
return PlatIPad
case "android":
return PlatAndroid
case "win":
return PlatWPhone
case "android_G":
return PlatAndroidG
case "android_i":
return PlatAndroidI
case "android_b":
return PlatAndroid
case "iphone_i":
if device == "pad" {
return PlatIPadI
}
return PlatIPhoneI
case "ipad_i":
return PlatIPadI
case "android_tv":
return PlatAndroidTV
}
return PlatIPhone
}
// MobiApp plat by mobi_app
func MobiApp(plat int8) string {
switch plat {
case PlatAndroid:
return "android"
case PlatIPhone:
return "iphone"
case PlatIPad:
return "ipad"
case PlatAndroidI:
return "android_i"
case PlatIPhoneI:
return "iphone_i"
case PlatIPadI:
return "ipad_i"
case PlatAndroidG:
return "android_G"
}
return "iphone"
}
func StatusMark(status int8) string {
if status == 0 {
return CoverIng
} else if status == 1 {
return CoverPay
} else if status == 2 {
return CoverFree
} else if status == 3 {
return CoverVipFree
} else if status == 4 {
return CoverVipOnly
} else if status == 5 {
return CoverVipFirst
}
return ""
}
// IsOverseas is overseas
func IsOverseas(plat int8) bool {
return plat == PlatAndroidI || plat == PlatIPhoneI || plat == PlatIPadI
}
func IsGoto(gt string) bool {
return gt == GotoAv || gt == GotoWeb || gt == GotoBangumi || gt == GotoSp || gt == GotoLive || gt == GotoGame
}
func MobiAPPBuleChange(mobiApp string) string {
switch mobiApp {
case "android_b":
return "android"
case "iphone_b":
return "iphone"
}
return mobiApp
}
func Rounding(number, divisor int64) string {
if divisor > 0 {
tmp := float64(number) / float64(divisor)
tmpStr := fmt.Sprintf("%0.1f", tmp)
parts := strings.Split(tmpStr, ".")
if len(parts) > 1 && parts[1] == "0" {
return parts[0]
}
return tmpStr
}
return strconv.FormatInt(number, 10)
}

View File

@@ -0,0 +1,33 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["daily.go"],
importpath = "go-common/app/interface/main/app-show/model/daily",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-show/model:go_default_library",
"//app/service/main/archive/api:go_default_library",
"//library/time:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,93 @@
package daily
import (
xtime "go-common/library/time"
"strconv"
"go-common/app/interface/main/app-show/model"
"go-common/app/service/main/archive/api"
)
// Show is module.
type Show struct {
*Head
Body []*Item `json:"body"`
}
// Head is show head.
type Head struct {
ID int `json:"-"`
ColumnID int `json:"column_id,omitempty"`
Plat int8 `json:"-"`
Title string `json:"title"`
Desc string `json:"desc"`
Rank int `json:"-"`
Build int `json:"-"`
Condition string `json:"-"`
Date int64 `json:"date,omitempty"`
Cover string `json:"cover,omitempty"`
Type string `json:"type,omitempty"`
Goto string `json:"goto,omitempty"`
Param string `json:"param,omitempty"`
URI string `json:"uri,omitempty"`
}
type Item struct {
Title string `json:"title"`
Cover string `json:"cover"`
URI string `json:"uri"`
Param string `json:"param"`
Goto string `json:"goto"`
// up
Name string `json:"name,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"`
// av
PubDate xtime.Time `json:"pubdate"`
// av stat
Duration int64 `json:"duration,omitempty"`
// region
Rid int `json:"rid,omitempty"`
Rname string `json:"rname,omitempty"`
// tag
TagID int64 `json:"tag_id,omitempty"`
TagName string `json:"tag_name,omitempty"`
}
// ColumnList
type ColumnList struct {
Cid int `json:"cid,omitempty"`
Ceid int `json:"ceid,omitempty"`
Name string `json:"name,omitempty"`
Cname string `json:"-"`
Children []*ColumnList `json:"children,omitempty"`
}
// FromArchivePB from archive.
func (i *Item) FromArchivePB(a *api.Arc) {
i.Title = a.Title
i.Cover = a.Pic
i.Param = strconv.FormatInt(a.Aid, 10)
i.URI = model.FillURI(model.GotoAv, i.Param, nil)
i.Goto = model.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
if a.Access > 0 {
i.Play = 0
}
}

View File

@@ -0,0 +1,29 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["dislike.go"],
importmap = "go-common/app/interface/main/app-show/model/dislike",
importpath = "go-common/app/interface/main/app-show/model/dislike",
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,6 @@
package dislike
type DisklikeReason struct {
ReasonID int `json:"reason_id,omitempty"`
ReasonName string `json:"reason_name,omitempty"`
}

View File

@@ -0,0 +1,38 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["feed.go"],
importmap = "go-common/app/interface/main/app-show/model/feed",
importpath = "go-common/app/interface/main/app-show/model/feed",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-card/model/card/live:go_default_library",
"//app/interface/main/app-show/model:go_default_library",
"//app/interface/main/app-show/model/card:go_default_library",
"//app/interface/main/app-show/model/dislike:go_default_library",
"//app/interface/main/app-show/model/tag:go_default_library",
"//app/service/main/archive/api:go_default_library",
"//library/time:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,308 @@
package feed
import (
"encoding/json"
"strconv"
clive "go-common/app/interface/main/app-card/model/card/live"
"go-common/app/interface/main/app-show/model"
"go-common/app/interface/main/app-show/model/card"
"go-common/app/interface/main/app-show/model/dislike"
"go-common/app/interface/main/app-show/model/tag"
"go-common/app/service/main/archive/api"
xtime "go-common/library/time"
)
type Item struct {
Title string `json:"title,omitempty"`
Subtitle string `json:"subtitle,omitempty"`
Cover string `json:"cover,omitempty"`
URI string `json:"uri,omitempty"`
Redirect string `json:"redirect,omitempty"`
RedirectURI string `json:"redirect_uri,omitempty"`
Param string `json:"param,omitempty"`
Goto string `json:"goto,omitempty"`
ViewType string `json:"view_type,omitempty"`
Kind string `json:"kind,omitempty"`
Desc string `json:"desc,omitempty"`
Play int `json:"play,omitempty"`
Danmaku int `json:"danmaku,omitempty"`
Reply int `json:"reply,omitempty"`
Fav int `json:"favorite,omitempty"`
Coin int `json:"coin,omitempty"`
Share int `json:"share,omitempty"`
Like int `json:"like,omitempty"`
Count int `json:"count,omitempty"`
Status int8 `json:"status,omitempty"`
Type int8 `json:"type,omitempty"`
Badge string `json:"badge,omitempty"`
StatType int8 `json:"stat_type,omitempty"`
RcmdReason *RcmdReason `json:"rcmd_reason,omitempty"`
Item []*Item `json:"item,omitempty"`
CornerMark int8 `json:"-"`
CardStyle int8 `json:"-"`
RcmdContent string `json:"-"`
// sortedset index
Idx int64 `json:"idx,omitempty"`
// av info
Cid int64 `json:"cid,omitempty"`
Rid int16 `json:"tid,omitempty"`
TName string `json:"tname,omitempty"`
Tag *Tag `json:"tag,omitempty"`
DisklikeReasons []*dislike.DisklikeReason `json:"dislike_reasons,omitempty"`
PTime xtime.Time `json:"ctime,omitempty"`
Autoplay int32 `json:"autoplay,omitempty"`
// av stat
Duration int64 `json:"duration,omitempty"`
// upper
Mid int64 `json:"mid,omitempty"`
Name string `json:"name,omitempty"`
Face string `json:"face,omitempty"`
IsAtten int8 `json:"is_atten,omitempty"`
Fans int64 `json:"fans,omitempty"`
RecCnt int `json:"recent_count,omitempty"`
Recent []*Item `json:"recent,omitempty"`
Official *OfficialInfo `json:"official,omitempty"`
// live
Online int `json:"online,omitempty"`
Area string `json:"area,omitempty"`
AreaID int `json:"area_id,omitempty"`
Area2 *Area2 `json:"area2,omitempty"`
// bangumi
Index string `json:"index,omitempty"`
IndexTitle string `json:"index_title,omitempty"`
CoverMark string `json:"cover_mark,omitempty"`
Finish bool `json:"finish,omitempty"`
LatestIndex string `json:"last_index,omitempty"`
// bangumi recommend
Updates int `json:"updates,omitempty"`
// live or bangumi
From int8 `json:"from,omitempty"`
// adviertisement
RequestID string `json:"request_id,omitempty"`
CreativeID int64 `json:"creative_id,omitempty"`
SrcID int `json:"src_id,omitempty"`
IsAd bool `json:"is_ad,omitempty"`
IsAdLoc bool `json:"is_ad_loc,omitempty"`
AdCb string `json:"ad_cb,omitempty"`
ShowURL string `json:"show_url,omitempty"`
ClickURL string `json:"click_url,omitempty"`
ClientIP string `json:"client_ip,omitempty"`
CmMark int64 `json:"cm_mark,omitempty"`
AdIndex int `json:"ad_index,omitempty"`
Extra json.RawMessage `json:"extra,omitempty"`
CardIndex int `json:"card_index,omitempty"`
// activity
STime string `json:"stime,omitempty"`
ETime string `json:"etime,omitempty"`
// tag
Tags []*tag.Tag `json:"tags,omitempty"`
// rank
Cover1 string `json:"cover1,omitempty"`
Cover2 string `json:"cover2,omitempty"`
Cover3 string `json:"cover3,omitempty"`
// banner`
Hash string `json:"hash,omitempty"`
// upper article
Covers []string `json:"covers,omitempty"`
Temple int `json:"temple,omitempty"`
Category *Category `json:"category,omitempty"`
BannerURL string `json:"banner_url,omitempty"`
// game download
GameDownloadButton *GameDownloadButton `json:"button,omitempty"`
Download int `json:"download,omitempty"`
BigCover string `json:"big_cover,omitempty"`
// special
HideBadge bool `json:"hide_badge,omitempty"`
Ratio float64 `json:"ratio,omitempty"`
// shopping
City string `json:"city,omitempty"`
PType string `json:"ptype,omitempty"`
Price string `json:"price,omitempty"`
// news
Content string `json:"content,omitempty"`
// bigdata source
Source string `json:"-"`
AvFeature json.RawMessage `json:"-"`
// common
GotoOrg string `json:"-"`
FromType string `json:"from_type,omitempty"`
Pos int `json:"-"`
Score string `json:"score,omitempty"`
}
type Tag struct {
TagID int64 `json:"tag_id,omitempty"`
TagName string `json:"tag_name,omitempty"`
IsAtten int8 `json:"is_atten,omitempty"`
Count *TagCount `json:"count,omitempty"`
Name string `json:"name,omitempty"`
URI string `json:"uri,omitempty"`
//channel
ID int64 `json:"id,omitempty"`
Face string `json:"face,omitempty"`
Fans int64 `json:"fans,omitempty"`
}
type RcmdReason struct {
ID int `json:"id,omitempty"`
Content string `json:"content,omitempty"`
BgColor string `json:"bg_color,omitempty"`
IconLocation string `json:"icon_location,omitempty"`
Message string `json:"message,omitempty"`
}
type TagCount struct {
Atten int `json:"atten,omitempty"`
}
type Category struct {
ID int64 `json:"id,omitempty"`
Name string `json:"name,omitempty"`
Children *Category `json:"children,omitempty"`
}
type GameDownloadButton struct {
Name string `json:"name,omitempty"`
URI string `json:"uri,omitempty"`
RedirectURI string `json:"redirect_uri,omitempty"`
}
type Area2 struct {
ID int64 `json:"id,omitempty"`
Name string `json:"name,omitempty"`
Children *Area2 `json:"children,omitempty"`
}
type OfficialInfo struct {
Role int8 `json:"role,omitempty"`
Title string `json:"title,omitempty"`
Desc string `json:"desc,omitempty"`
}
func (i *Item) fillArcStat(a *api.Arc) {
if a.Access == 0 {
i.Play = int(a.Stat.View)
}
i.Danmaku = int(a.Stat.Danmaku)
i.Reply = int(a.Stat.Reply)
i.Fav = int(a.Stat.Fav)
i.Coin = int(a.Stat.Coin)
i.Share = int(a.Stat.Share)
i.Like = int(a.Stat.Like)
}
func (i *Item) FromPlayerAv(a *api.Arc, uri string) {
if i.Title == "" {
i.Title = a.Title
}
if i.Cover == "" {
i.Cover = model.CoverURLHTTPS(a.Pic)
} else {
i.Cover = model.CoverURLHTTPS(i.Cover)
}
i.Param = strconv.FormatInt(a.Aid, 10)
i.Goto = model.GotoAv
i.URI = uri
if i.URI == "" {
i.URI = model.FillURI(i.Goto, i.Param, model.AvHandler(a))
}
i.Rid = int16(a.TypeID)
i.TName = a.TypeName
// i.Desc = a.Desc
i.fillArcStat(a)
i.Duration = a.Duration
i.Mid = a.Author.Mid
i.Name = a.Author.Name
i.Face = a.Author.Face
i.PTime = a.PubDate
i.Autoplay = a.Rights.Autoplay
i.Cid = a.FirstCid
// TODO
// if a.Stat.Like > 0 && a.Stat.DisLike > 0 {
// percent := int(a.Stat.Like / (a.Stat.Like + a.Stat.DisLike) * 100)
// if percent != 0 {
// i.Desc = strconv.Itoa(percent) + "%的人推荐"
// }
// }
}
func (i *Item) FromRcmdReason(c *card.PopularCard) {
var content string
switch c.ReasonType {
case 0:
content = ""
case 1:
content = "编辑精选"
case 2:
content = "热门推荐"
case 3:
content = c.Reason
}
if content != "" {
i.RcmdReason = &RcmdReason{ID: 1, Content: content, BgColor: "yellow", IconLocation: "left_top"}
i.RcmdContent = content
}
}
func (i *Item) FromRank(aids []int64, score map[int64]int64, am map[int64]*api.Arc) {
var _rankCount = 3
if len(aids) < _rankCount {
return
}
items := []*Item{}
for _, aid := range aids {
if a, ok := am[aid]; ok {
it := &Item{
Title: a.Title,
Cover: a.Pic,
Goto: model.GotoAv,
Param: strconv.FormatInt(a.Aid, 10),
}
it.fillArcStat(a)
it.Duration = a.Duration
it.URI = model.FillURI(it.Goto, it.Param, model.AvHandler(a))
if s, ok := score[aid]; ok {
if s < 10000 {
it.Score = model.Rounding(s, 0)
} else if s >= 10000 && s < 100000000 {
it.Score = model.Rounding(s, 10000) + "万"
} else if s >= 100000000 {
it.Score = model.Rounding(s, 100000000) + "亿"
}
}
if it.Score != "" {
it.Score = "综合评分:" + it.Score
} else {
it.Score = "综合评分:-"
}
items = append(items, it)
if len(items) >= _rankCount {
break
}
}
}
i.Title = "全站排行榜"
i.Goto = model.GotoRank
i.Item = items
i.Param = "0"
i.URI = "bilibili://rank?order_type=1&tid=0"
}
func (i *Item) FromHotTopic(hotTopics []*clive.TopicHot) {
is := []*Item{}
for _, t := range hotTopics {
it := &Item{}
it.Name = t.TName
it.Param = strconv.Itoa(t.TID)
it.Cover = t.ImageURL
it.URI = model.FillURIHotTopic(it.Param, it.Name)
is = append(is, it)
}
i.Item = is
i.Title = "热门话题"
i.Param = "0"
i.Goto = model.GotoHotTopic
i.URI = "activity://following/hot_topic_list"
i.Desc = "更多热门话题"
}

View File

@@ -0,0 +1,28 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["live.go"],
importpath = "go-common/app/interface/main/app-show/model/live",
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,58 @@
package live
import "encoding/json"
// Feed is live feed
type Feed struct {
Count int `json:"count"`
Lives []*Room `json:"lives"`
}
// Recommend is live recommend
type Recommend struct {
Count int `json:"count"`
Lives struct {
Subject []*Room `json:"subject"`
Hot []*Room `json:"hot"`
} `json:"lives"`
}
type Room struct {
Owner struct {
Face string `json:"face"`
Mid int `json:"mid"`
Name string `json:"name"`
} `json:"owner"`
Cover struct {
Src string `json:"src"`
Height int `json:"height"`
Width int `json:"width"`
} `json:"cover"`
Title string `json:"title"`
ID int64 `json:"room_id"`
Online int `json:"online"`
Area string `json:"area"`
AreaID int `json:"area_id"`
}
type TopicHot struct {
TID int `json:"topic_id"`
TName string `json:"topic_name"`
Picture string `json:"picture"`
ImageURL string `json:"-"`
}
type TopicImage struct {
ImageSrc string `json:"image_src"`
ImageWidth int `json:"image_width"`
ImageHeight int `json:"image_height"`
}
func (t *TopicHot) TopicJSONChange() (err error) {
var tmp TopicImage
if err = json.Unmarshal([]byte(t.Picture), &tmp); err != nil {
return
}
t.ImageURL = tmp.ImageSrc
return
}

View File

@@ -0,0 +1,29 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["recommend.go"],
importpath = "go-common/app/interface/main/app-show/model/recommend",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = ["//app/interface/main/app-show/model/card:go_default_library"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,67 @@
package recommend
import (
"go-common/app/interface/main/app-show/model/card"
)
// Arc is index show recommend.
type Arc struct {
Aid interface{} `json:"aid"`
Author string `json:"author"`
Title string `json:"title"`
Description string `json:"description"`
Pic string `json:"pic"`
Views interface{} `json:"play"`
Comments int64 `json:"review"`
Coins int64 `json:"coins"`
Danmaku int `json:"video_review"`
Favorites int64 `json:"favorites"`
Pts int64 `json:"pts"`
Others []*Arc `json:"others"`
}
type List struct {
Aid int64 `json:"aid"`
Desc string `json:"desc"`
CornerMark int8 `json:"corner_mark"`
}
type CardList struct {
ID int64 `json:"id"`
Goto string `json:"goto"`
FromType string `json:"from_type"`
Desc string `json:"desc"`
CornerMark int8 `json:"corner_mark"`
Condition []*CardCondition `json:"condition"`
}
type CardCondition struct {
Plat int8 `json:"plat"`
Condition string `json:"conditions"`
Build int `json:"build"`
}
func (c *CardList) CardListChange() (p *card.PopularCard) {
p = &card.PopularCard{
Value: c.ID,
Type: c.Goto,
FromType: c.FromType,
Reason: c.Desc,
CornerMark: c.CornerMark,
}
if p.Reason != "" {
p.ReasonType = 3
}
if len(c.Condition) > 0 {
tmpcondition := map[int8][]*card.PopularCardPlat{}
for _, condition := range c.Condition {
tmpcondition[condition.Plat] = append(tmpcondition[condition.Plat], &card.PopularCardPlat{
Plat: condition.Plat,
Condition: condition.Condition,
Build: condition.Build,
})
}
p.PopularCardPlat = tmpcondition
}
return
}

View File

@@ -0,0 +1,39 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["region.go"],
importpath = "go-common/app/interface/main/app-show/model/region",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-show/model:go_default_library",
"//app/interface/main/app-show/model/activity:go_default_library",
"//app/interface/main/app-show/model/banner:go_default_library",
"//app/interface/main/app-show/model/recommend:go_default_library",
"//app/interface/main/app-show/model/tag:go_default_library",
"//app/service/main/account/api:go_default_library",
"//app/service/main/archive/api:go_default_library",
"//app/service/openplatform/pgc-season/api/grpc/season/v1:go_default_library",
"//library/time:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,403 @@
package region
import (
"strconv"
"time"
"go-common/app/interface/main/app-show/model"
"go-common/app/interface/main/app-show/model/activity"
"go-common/app/interface/main/app-show/model/banner"
"go-common/app/interface/main/app-show/model/recommend"
"go-common/app/interface/main/app-show/model/tag"
accv1 "go-common/app/service/main/account/api"
"go-common/app/service/main/archive/api"
seasongrpc "go-common/app/service/openplatform/pgc-season/api/grpc/season/v1"
xtime "go-common/library/time"
)
const (
_activityForm = "2006-01-02 15:04:05"
)
type Region struct {
ID int64 `json:"-"`
Rid int `json:"tid"`
Reid int `json:"reid"`
Name string `json:"name"`
Logo string `json:"logo"`
Goto string `json:"goto"`
Param string `json:"param"`
Rank string `json:"-"`
Plat int8 `json:"-"`
Build int `json:"-"`
Condition string `json:"-"`
Area string `json:"-"`
Language string `json:"-"`
URI string `json:"uri,omitempty"`
Islogo int8 `json:"-"`
Rtype int8 `json:"type"`
Entrance int8 `json:"-"`
IsBangumi int8 `json:"is_bangumi,omitempty"`
Children []*Region `json:"children,omitempty"`
Config []*Config `json:"config,omitempty"`
}
type Limit struct {
ID int64 `json:"-"`
Rid int64 `json:"-"`
Build int `json:"-"`
Condition string `json:"-"`
}
type Config struct {
ID int64 `json:"-"`
Rid int64 `json:"-"`
ScenesID int `json:"-"`
ScenesName string `json:"scenes_name,omitempty"`
ScenesType string `json:"scenes_type,omitempty"`
}
type Show struct {
Banner map[string][]*banner.Banner `json:"banner,omitempty"`
Card []*Head `json:"card,omitempty"`
Tag *tag.Tag `json:"tag,omitempty"`
TopTag []*SimilarTag `json:"top_tag,omitempty"`
NewTag *NewTag `json:"new_tag,omitempty"`
Cbottom xtime.Time `json:"cbottom,omitempty"`
Ctop xtime.Time `json:"ctop,omitempty"`
Recommend []*ShowItem `json:"recommend,omitempty"`
New []*ShowItem `json:"new"`
Dynamic []*ShowItem `json:"dynamic,omitempty"`
}
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"`
}
type ShowItem struct {
Title string `json:"title"`
Cover string `json:"cover"`
URI string `json:"uri"`
NewURI string `json:"-"`
Param string `json:"param"`
FirstCid int64 `json:"cid,omitempty"`
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"`
RedirectURL string `json:"-"`
UGCPay int32 `json:"ugc_pay,omitempty"`
Cooperation string `json:"cooperation,omitempty"`
}
type OfficialVerify struct {
Type int `json:"type"`
Desc string `json:"desc"`
}
type SimilarTag struct {
TagId int `json:"tid"`
TagName string `json:"tname"`
Rid int `json:"rid,omitempty"`
Rname string `json:"rname,omitempty"`
Reid int `json:"reid,omitempty"`
Rename string `json:"rename,omitempty"`
}
type NewTag struct {
Position int `json:"pos"`
Tag []*SimilarTag `json:"tag"`
}
func (c *Config) ConfigChange() {
switch c.ScenesID {
case 0:
c.ScenesName = "region"
c.ScenesType = "bottom"
case 1:
c.ScenesName = "region"
c.ScenesType = "top"
case 2:
c.ScenesName = "rank"
case 3:
c.ScenesName = "search"
case 4:
c.ScenesName = "tag"
case 5:
c.ScenesName = "attention"
}
}
// FromArc from recommend arc.
func (i *ShowItem) FromArc(a *recommend.Arc) {
i.fromArc(a)
for _, as := range a.Others {
child := &ShowItem{}
child.fromArc(as)
i.Children = append(i.Children, child)
}
}
// FromArcBangumi from recommend arc bangumi.
func (i *ShowItem) FromArcBangumi(a *recommend.Arc, sids map[int64]int64) {
aidInt := fromAid(a.Aid)
if sid, ok := sids[aidInt]; ok && sid != 0 {
i.fromArcBangumi(a, sid)
} else {
i.fromArc(a)
}
for _, as := range a.Others {
child := &ShowItem{}
aidInt = fromAid(as.Aid)
if sid, ok := sids[aidInt]; ok && sid != 0 {
child.fromArcBangumi(as, sid)
} else {
child.fromArc(as)
}
i.Children = append(i.Children, child)
}
}
// fromAid
func fromAid(aidInter interface{}) (aid int64) {
switch aidType := aidInter.(type) {
case string:
if aidtmp, err := strconv.ParseInt(aidType, 10, 64); err == nil && aidtmp != 0 {
aid = aidtmp
}
case float64:
aid = int64(aidType)
}
return
}
func (i *ShowItem) fromArc(a *recommend.Arc) {
i.Title = a.Title
i.Cover = a.Pic
switch aid := a.Aid.(type) {
case string:
i.Param = aid
case float64:
i.Param = strconv.FormatInt(int64(aid), 10)
}
i.URI = model.FillURI(model.GotoAv, i.Param, nil)
i.Goto = model.GotoAv
v, ok := a.Views.(float64)
if ok {
i.Play = int(v)
}
i.Danmaku = a.Danmaku
i.Name = a.Author
i.Reply = int(a.Comments)
i.Fav = int(a.Favorites)
i.Pts = a.Pts
}
func (i *ShowItem) fromArcBangumi(a *recommend.Arc, sid int64) {
i.Title = a.Title
i.Cover = a.Pic
i.Param = strconv.FormatInt(sid, 10)
i.URI = model.FillURI(model.GotoBangumi, i.Param, nil)
i.Goto = model.GotoBangumi
v, ok := a.Views.(float64)
if ok {
i.Play = int(v)
}
i.Danmaku = a.Danmaku
i.Name = a.Author
i.Reply = int(a.Comments)
i.Fav = int(a.Favorites)
i.Pts = a.Pts
}
// 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 = model.FillURI(model.GotoAv, i.Param, model.AvHandler(a))
i.Goto = model.GotoAv
i.Play = int(a.Stat.View)
i.Danmaku = int(a.Stat.Danmaku)
i.Name = a.Author.Name
i.Face = a.Author.Face
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
}
i.UGCPay = a.Rights.UGCPay
}
// FromBangumi from archive archive.
func (i *ShowItem) FromBangumiArchivePB(a *api.Arc, season *seasongrpc.CardInfoProto, bangumiType int) {
var (
_bangumiSeasonID = 1
_bangumiEpisodeID = 2
)
if season == nil {
return
}
i.Title = a.Title
i.Cover = a.Pic
i.Param = strconv.Itoa(int(season.SeasonId))
switch bangumiType {
case _bangumiSeasonID:
i.URI = model.FillURI(model.GotoBangumi, i.Param, nil)
case _bangumiEpisodeID:
if season.NewEp != nil && season.NewEp.Id > 0 {
epid := strconv.Itoa(int(season.NewEp.Id))
i.URI = model.FillURIBangumi(model.GotoBangumi, i.Param, epid, int(season.SeasonType))
} else {
i.URI = model.FillURI(model.GotoBangumi, i.Param, nil)
}
}
i.Goto = model.GotoBangumi
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
}
}
// FromArchivePBRank from archive archive.
func (i *ShowItem) FromArchivePBRank(a *api.Arc, scores map[int64]int64) {
i.Title = a.Title
i.Cover = a.Pic
i.Param = strconv.FormatInt(a.Aid, 10)
i.URI = model.FillURI(model.GotoAv, i.Param, nil)
i.RedirectURL = a.RedirectURL
i.Goto = model.GotoAv
i.Play = int(a.Stat.View)
i.Danmaku = int(a.Stat.Danmaku)
i.Mid = a.Author.Mid
i.Name = a.Author.Name
i.Face = a.Author.Face
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)
i.FirstCid = a.FirstCid
if score, ok := scores[a.Aid]; ok {
i.Pts = score
}
if a.Access > 0 {
i.Play = 0
}
if a.Rights.IsCooperation > 0 {
i.Cooperation = "等联合创作"
}
}
// FromTopic
func (i *ShowItem) FromTopic(a *activity.Activity) {
i.Title = a.Name
i.Cover = a.H5Cover
i.Goto = model.GotoWeb
i.Param = a.H5URL
i.URI = model.FillURI(model.GotoWeb, i.Param, nil)
i.Desc = a.Desc
}
// FromActivity
func (i *ShowItem) FromActivity(a *activity.Activity, now time.Time) {
stime, err := time.ParseInLocation(_activityForm, a.Stime, time.Local)
if err != nil {
return
}
etime, err := time.ParseInLocation(_activityForm, a.Etime, time.Local)
if err != nil {
return
}
if now.After(etime) {
i.Status = 1
} else if now.Before(stime) {
i.Status = 2
}
i.Title = a.Name
i.Cover = a.H5Cover
i.Goto = model.GotoWeb
i.Param = a.H5URL
i.URI = model.FillURI(model.GotoWeb, i.Param, nil)
i.Desc = a.Desc
i.Stime = a.Stime
i.Etime = a.Etime
}
// FromOfficialVerify from official
func (i *OfficialVerify) FromOfficialVerify(a accv1.OfficialInfo) {
if a.Role == 0 {
i.Type = -1
} else {
if a.Role <= 2 {
i.Type = 0
} else {
i.Type = 1
}
i.Desc = a.Title
}
}
func (h *Head) FillBuildURI(plat int8, build int) {
switch h.Goto {
case model.GotoDaily:
if (plat == model.PlatIPhone && build > 6670) || (plat == model.PlatAndroid && build > 5250000) {
h.URI = "bilibili://pegasus/list/daily/" + h.Param
}
}
}

View File

@@ -0,0 +1,38 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["show.go"],
importpath = "go-common/app/interface/main/app-show/model/show",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-show/model:go_default_library",
"//app/interface/main/app-show/model/activity:go_default_library",
"//app/interface/main/app-show/model/bangumi:go_default_library",
"//app/interface/main/app-show/model/banner:go_default_library",
"//app/interface/main/app-show/model/live:go_default_library",
"//app/interface/main/app-show/model/recommend:go_default_library",
"//app/service/main/archive/api:go_default_library",
"//app/service/openplatform/pgc-season/api/grpc/season/v1:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,292 @@
package show
import (
"strconv"
"time"
"go-common/app/interface/main/app-show/model"
"go-common/app/interface/main/app-show/model/activity"
"go-common/app/interface/main/app-show/model/bangumi"
"go-common/app/interface/main/app-show/model/banner"
"go-common/app/interface/main/app-show/model/live"
"go-common/app/interface/main/app-show/model/recommend"
"go-common/app/service/main/archive/api"
seasongrpc "go-common/app/service/openplatform/pgc-season/api/grpc/season/v1"
)
const (
_activityForm = "2006-01-02 15:04:05"
)
// Show is module.
type Show struct {
*Head
Body []*Item `json:"body"`
Banner map[string][]*banner.Banner `json:"banner,omitempty"`
Ext *Ext `json:"ext,omitempty"`
}
// Slice is for sort.
type Slice []*Show
func (ss Slice) Len() int { return len(ss) }
func (ss Slice) Less(i, j int) bool { return ss[i].Rank > ss[j].Rank }
func (ss Slice) Swap(i, j int) { ss[i], ss[j] = ss[j], ss[i] }
// Head is show head.
type Head struct {
ID int `json:"-"`
CardID int `json:"card_id,omitempty"`
Plat int8 `json:"-"`
Param string `json:"param"`
Type string `json:"type"`
Style string `json:"style"`
Title string `json:"title"`
Rank int `json:"-"`
Build int `json:"-"`
Condition string `json:"-"`
Language string `json:"-"`
Date int64 `json:"date,omitempty"`
Cover string `json:"cover,omitempty"`
URI string `json:"uri,omitempty"`
Goto string `json:"goto,omitempty"`
}
// Item is show item, contains av, bangumi, live, banner, feed...
type Item struct {
Sid int `json:"-"`
Title string `json:"title"`
Cover string `json:"cover"`
URI string `json:"uri"`
NewURI string `json:"-"`
Param string `json:"param"`
Goto string `json:"goto"`
Random int `json:"-"`
// av
Play int `json:"play,omitempty"`
Danmaku int `json:"danmaku,omitempty"`
Area string `json:"area,omitempty"`
AreaID int `json:"area_id,omitempty"`
Rname string `json:"rname,omitempty"`
// av stat
Duration int64 `json:"duration,omitempty"`
// live and feed
Name string `json:"name,omitempty"`
Face string `json:"face,omitempty"`
// only live
Online int `json:"online,omitempty"`
// only feed
CTime int64 `json:"ctime,omitempty"`
// bangumi
Finish int8 `json:"finish,omitempty"`
Index string `json:"index,omitempty"`
TotalCount string `json:"total_count,omitempty"`
MTime string `json:"mtime,omitempty"`
// movie and bangumi badge
Status int8 `json:"status,omitempty"`
CoverMark string `json:"cover_mark,omitempty"`
Fav int `json:"favourite,omitempty"`
// rank
Rank int `json:"-"`
// cpm
RequestId string `json:"request_id,omitempty"`
CreativeId int `json:"creative_id,omitempty"`
SrcId int `json:"src_id,omitempty"`
IsAd bool `json:"is_ad"`
IsAdReplace bool `json:"-"`
IsAdLoc bool `json:"is_ad_loc,omitempty"`
CmMark int `json:"cm_mark"`
AdCb string `json:"ad_cb,omitempty"`
ShowUrl string `json:"show_url,omitempty"`
ClickUrl string `json:"click_url,omitempty"`
ClientIp string `json:"client_ip,omitempty"`
// article
CateID int `json:"cate_id,omitempty"`
CateName string `json:"cate_name,omitempty"`
Summary string `json:"summary,omitempty"`
Covers []string `json:"covers,omitempty"`
Reply int `json:"reply,omitempty"`
TemplateID int `json:"template_id,omitempty"`
BannerURL string `json:"banner_url,omitempty"`
//new manager
Desc string `json:"desc,omitempty"`
Stime string `json:"stime,omitempty"`
Etime string `json:"etime,omitempty"`
// rank
Pts int64 `json:"pts,omitempty"`
Children []*Item `json:"children,omitempty"`
Like int `json:"like,omitempty"`
// region
Rid int `json:"rid,omitempty"`
Reid int `json:"reid,omitempty"`
}
type Ext struct {
LiveCnt int `json:"live_count,omitempty"`
}
// IsRandom check item whether or not random.
func (i *Item) IsRandom() bool {
return i.Random == 1
}
// FromArc from recommend arc.
func (i *Item) FromArc(r *recommend.Arc) {
i.Title = r.Title
i.Cover = r.Pic
i.Goto = model.GotoAv
switch aid := r.Aid.(type) {
case string:
i.Param = aid
case float64:
i.Param = strconv.FormatInt(int64(aid), 10)
}
i.URI = model.FillURI(model.GotoAv, i.Param, nil)
i.Danmaku = r.Danmaku
v, ok := r.Views.(float64)
if ok {
i.Play = int(v)
}
}
// FromBangumi from bangumi.
func (i *Item) FromBangumi(b *bangumi.Bangumi) {
i.Title = b.Title
i.Cover = b.NewEp.Cover
i.Goto = model.GotoBangumi
i.Param = b.SeasonId
i.URI = model.FillURI(model.GotoBangumiWeb, b.SeasonId, nil)
i.Index = b.NewEp.Index
i.TotalCount = b.TotalCount
i.MTime = b.NewEp.UpTime
i.Status = int8(b.SeasonStatus)
// i.CoverMark = b.Badge
i.Play, _ = strconv.Atoi(b.PlayCount)
i.Fav, _ = strconv.Atoi(b.Favorites)
if b.Finish == "1" {
i.Finish = 1
}
}
// FromLive from live.
func (i *Item) FromLive(r *live.Room) {
i.Title = r.Title
i.Cover = r.Cover.Src
i.Name = r.Owner.Name
i.Face = r.Owner.Face
i.Goto = model.GotoLive
i.Param = strconv.FormatInt(r.ID, 10)
i.URI = model.FillURI(model.GotoLive, strconv.FormatInt(r.ID, 10), nil)
i.Online = r.Online
i.Area = r.Area
i.AreaID = r.AreaID
}
// FromArchivePB from archive archive.
func (i *Item) FromArchivePB(a *api.Arc) {
i.Title = a.Title
i.Cover = a.Pic
i.Goto = model.GotoAv
i.Param = strconv.FormatInt(a.Aid, 10)
i.URI = model.FillURI(model.GotoAv, i.Param, nil)
i.Danmaku = int(a.Stat.Danmaku)
i.Play = int(a.Stat.View)
i.Like = int(a.Stat.Like)
if a.Access > 0 {
i.Play = 0
}
}
// FromArchivePBBangumi from archive archive.
func (i *Item) FromArchivePBBangumi(a *api.Arc, season *seasongrpc.CardInfoProto, bangumiType int) {
var (
_bangumiSeasonID = 1
_bangumiEpisodeID = 2
)
i.Title = a.Title
i.Cover = a.Pic
i.Goto = model.GotoBangumi
i.Param = strconv.Itoa(int(season.SeasonId))
switch bangumiType {
case _bangumiSeasonID:
i.URI = model.FillURI(model.GotoBangumi, i.Param, nil)
case _bangumiEpisodeID:
if season.NewEp != nil && season.NewEp.Id > 0 {
epid := strconv.Itoa(int(season.NewEp.Id))
i.URI = model.FillURIBangumi(model.GotoBangumi, i.Param, epid, int(season.SeasonType))
} else {
i.URI = model.FillURI(model.GotoBangumi, i.Param, nil)
}
}
i.Danmaku = int(a.Stat.Danmaku)
i.Play = int(a.Stat.View)
i.Like = int(a.Stat.Like)
i.Fav = int(a.Stat.Fav)
if a.Access > 0 {
i.Play = 0
}
}
// FromArchiveRank from archive archive.
func (i *Item) FromArchiveRank(a *api.Arc, scores map[int64]int64) {
i.Title = a.Title
i.Cover = a.Pic
i.Goto = model.GotoAv
i.Param = strconv.FormatInt(a.Aid, 10)
i.URI = model.FillURI(model.GotoAv, i.Param, nil)
i.Danmaku = int(a.Stat.Danmaku)
i.Play = int(a.Stat.View)
i.Title = a.Title
i.Name = a.Author.Name
i.Like = int(a.Stat.Like)
if score, ok := scores[a.Aid]; ok {
i.Pts = score
}
if a.Access > 0 {
i.Play = 0
}
}
// FromActivity
func (i *Item) FromActivity(a *activity.Activity, now time.Time) {
stime, err := time.ParseInLocation(_activityForm, a.Stime, time.Local)
if err != nil {
return
}
etime, err := time.ParseInLocation(_activityForm, a.Etime, time.Local)
if err != nil {
return
}
if now.After(etime) {
i.Status = 1
} else if now.Before(stime) {
i.Status = 2
}
i.Title = a.Name
i.Cover = a.H5Cover
i.Goto = model.GotoWeb
i.Param = a.H5URL
i.URI = model.FillURI(model.GotoWeb, i.Param, nil)
i.Desc = a.Desc
i.Stime = a.Stime
i.Etime = a.Etime
}
// FromTopic
func (i *Item) FromTopic(a *activity.Activity) {
i.Title = a.Name
i.Cover = a.H5Cover
i.Goto = model.GotoWeb
i.Param = a.H5URL
i.URI = model.FillURI(model.GotoWeb, i.Param, nil)
i.Desc = a.Desc
}
func (h *Head) FillBuildURI(plat int8, build int) {
switch h.Goto {
case model.GotoDaily:
if (plat == model.PlatIPhone && build > 6670) || (plat == model.PlatAndroid && build > 5250000) {
h.URI = "bilibili://pegasus/list/daily/" + h.Param
}
}
}

View File

@@ -0,0 +1,28 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["tag.go"],
importpath = "go-common/app/interface/main/app-show/model/tag",
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,10 @@
package tag
type Tag struct {
Tid int64 `json:"tag_id"`
Name string `json:"tag_name"`
IsAtten int8 `json:"is_atten"`
Count struct {
Atten int `json:"atten,omitempty"`
} `json:"count,omitempty"`
}