You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
269 lines
6.5 KiB
269 lines
6.5 KiB
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"` |
|
}
|
|
|