270 lines
6.5 KiB
Go
270 lines
6.5 KiB
Go
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"`
|
|
}
|