270 lines
6.5 KiB
Go
Raw Normal View History

2019-04-22 02:59:20 +00:00
package space
import (
"go-common/app/interface/main/app-interface/model"
"go-common/app/interface/main/app-interface/model/audio"
"go-common/app/interface/main/app-interface/model/bplus"
article "go-common/app/interface/openplatform/article/model"
"go-common/app/service/main/archive/api"
xtime "go-common/library/time"
"strconv"
)
const (
_gotoAv = 0
_gotoArticle = 1
_gotoClip = 2
_gotoAlbum = 3
_gotoAudio = 4
)
// Contributes struct
type Contributes struct {
Tab *Tab `json:"tab,omitempty"`
Items []*Item `json:"items,omitempty"`
Links *Links `json:"links,omitempty"`
}
// Tab struct
type Tab struct {
Archive bool `json:"archive"`
Article bool `json:"article"`
Clip bool `json:"clip"`
Album bool `json:"album"`
Favorite bool `json:"favorite"`
Bangumi bool `json:"bangumi"`
Coin bool `json:"coin"`
Like bool `json:"like"`
Community bool `json:"community"`
Dynamic bool `json:"dynamic"`
Audios bool `json:"audios"`
Shop bool `json:"shop"`
}
// Item struct
type Item struct {
ID int64 `json:"id,omitempty"`
TypeName string `json:"tname,omitempty"`
Category *article.Category `json:"category,omitempty"`
Title string `json:"title,omitempty"`
Cover string `json:"cover,omitempty"`
Tag string `json:"tag,omitempty"`
Tags []*article.Tag `json:"tags,omitempty"`
Desc string `json:"description,omitempty"`
URI string `json:"uri,omitempty"`
Param string `json:"param,omitempty"`
Goto string `json:"goto,omitempty"`
Length string `json:"length,omitempty"`
Duration int64 `json:"duration,omitempty"`
Banner string `json:"banner,omitempty"`
Play int `json:"play,omitempty"`
Comment int `json:"comment,omitempty"`
Danmaku int `json:"danmaku,omitempty"`
Count int `json:"count,omitempty"`
Reply int `json:"reply,omitempty"`
CTime xtime.Time `json:"ctime,omitempty"`
MTime xtime.Time `json:"mtime,omitempty"`
ImageURLs []string `json:"image_urls,omitempty"`
Pictures []*bplus.Pictures `json:"pictures,omitempty"`
Words int64 `json:"words,omitempty"`
Stats *article.Stats `json:"stats,omitempty"`
AuthType int `json:"authType,omitempty"`
Member int64 `json:"member,omitempty"`
}
// Links struct
type Links struct {
Previous int64 `json:"previous,omitempty"`
Next int64 `json:"next,omitempty"`
}
// Link func
func (l *Links) Link(sinceID, untilID int64) {
if sinceID < 0 || untilID < 0 {
return
}
l.Previous = sinceID
l.Next = untilID
}
// Items struct
type Items []*Item
//Len()
func (is Items) Len() int { return len(is) }
//Less()
func (is Items) Less(i, j int) bool {
var it, jt xtime.Time
if is[i] != nil {
it = is[i].CTime
}
if is[j] != nil {
jt = is[j].CTime
}
return it > jt
}
//Swap()
func (is Items) Swap(i, j int) {
is[i], is[j] = is[j], is[i]
}
// Clip struct
type Clip struct {
ID int64 `json:"id"`
Duration int64 `json:"duration"`
CTime xtime.Time `json:"ctime"`
View int `json:"view"`
Damaku int `json:"damaku"`
Title string `json:"title"`
Cover string `json:"cover"`
Tag string `json:"tag"`
}
// Album struct
type Album struct {
ID int64 `json:"doc_id"`
CTime xtime.Time `json:"ctime"`
Count int `json:"count"`
View int `json:"view"`
Comment int `json:"comment"`
Title string `json:"title"`
Desc string `json:"description"`
Pictures []*Pictures `json:"pictures"`
}
// Pictures struct
type Pictures struct {
ImgSrc string `json:"img_src"`
ImgWidth string `json:"img_width"`
ImgHeight string `json:"img_height"`
}
// Tag tag.
type Tag struct {
Tid int64 `json:"tid"`
Name string `json:"name"`
}
// FromArc3 func
func (i *Item) FromArc3(a *api.Arc) {
i.ID = a.Aid
i.Title = a.Title
i.Cover = a.Pic
i.TypeName = a.TypeName
i.Param = strconv.FormatInt(a.Aid, 10)
i.Goto = model.GotoAv
i.URI = model.FillURI(i.Goto, i.Param, nil)
i.Danmaku = int(a.Stat.Danmaku)
i.Duration = a.Duration
i.CTime = a.PubDate
i.Play = int(a.Stat.View)
}
// FromArticle func
func (i *Item) FromArticle(a *article.Meta) {
i.ID = a.ID
i.Title = a.Title
i.Category = a.Category
i.Desc = a.Summary
i.ImageURLs = a.ImageURLs
i.CTime = a.Ctime
i.Tags = a.Tags
i.Banner = a.BannerURL
i.Param = strconv.FormatInt(a.ID, 10)
i.Goto = model.GotoArticle
i.URI = model.FillURI(i.Goto, i.Param, nil)
i.Stats = a.Stats
}
// FromClip func
func (i *Item) FromClip(c *bplus.Clip) {
i.ID = c.ID
i.Duration = c.Duration
i.CTime = c.CTime
i.Play = c.View
i.Danmaku = c.Damaku
i.Param = strconv.FormatInt(c.ID, 10)
i.Goto = model.GotoClip
i.URI = model.FillURI(i.Goto, i.Param, nil)
i.Title = c.Title
i.Cover = c.Cover
i.Tag = c.Tag
}
// FromAlbum func
func (i *Item) FromAlbum(a *bplus.Album) {
i.ID = a.ID
i.CTime = a.CTime
i.Count = a.Count
i.Play = a.View
i.Comment = a.Comment
i.Param = strconv.FormatInt(a.ID, 10)
i.Goto = model.GotoAlbum
i.URI = model.FillURI(i.Goto, i.Param, nil)
i.Title = a.Title
i.Desc = a.Desc
i.Pictures = a.Pictures
}
// FromAudio func
func (i *Item) FromAudio(a *audio.Audio) {
i.ID = a.ID
i.CTime = a.CTime
i.Play = a.Play
i.Reply = a.Reply
i.Param = strconv.FormatInt(a.ID, 10)
i.Goto = model.GotoAudio
i.URI = a.Schema
i.Cover = a.Cover
i.Title = a.Title
i.AuthType = a.AuthType
i.Duration = a.Duration
}
// FormatKey func
func (i *Item) FormatKey() {
switch i.Goto {
case model.GotoAv:
i.Member = i.ID<<6 | _gotoAv
case model.GotoArticle:
i.Member = i.ID<<6 | _gotoArticle
case model.GotoClip:
i.Member = i.ID<<6 | _gotoClip
case model.GotoAlbum:
i.Member = i.ID<<6 | _gotoAlbum
case model.GotoAudio:
i.Member = i.ID<<6 | _gotoAudio
default:
i.Member = i.ID
}
}
// ParseKey func
func (i *Item) ParseKey() {
i.ID = i.Member >> 6
switch int(i.Member & 0x3f) {
case _gotoAv:
i.Goto = model.GotoAv
case _gotoArticle:
i.Goto = model.GotoArticle
case _gotoClip:
i.Goto = model.GotoClip
case _gotoAlbum:
i.Goto = model.GotoAlbum
case _gotoAudio:
i.Goto = model.GotoAudio
}
}
// Attrs struct
type Attrs struct {
Archive bool `json:"archive,omitempty"`
Article bool `json:"article,omitempty"`
Clip bool `json:"clip,omitempty"`
Album bool `json:"album,omitempty"`
Audio bool `json:"audio,omitempty"`
}