Files
2026-09-29 10:47:38 +08:00

126 lines
2.8 KiB
Go

package pubdef
import (
"slices"
)
type IMedia interface {
GetID() int64
GetTitle() string
GetPrice() int64
GetCover() string
GetPublishID() int64
GetLocationType() LocationType
GetIsVIP() bool
GetIsDark() bool
GetCollectionIds() []int64
GetEpisodeIds() []int64
}
type DateCount struct {
Date string `json:"date" bson:"date"` // 日期: yyyy-MM-dd
Count int64 `json:"count" bson:"count"` // 数量
}
type DateCountList []DateCount
type MediaType = LocationType
type ContentType int32
const (
ContentTypeVideoLong ContentType = 1 // 长视频
ContentTypeVideoDsp ContentType = 2 // 短视频
)
type LocationType int32
const (
LocationTypeNone LocationType = 0 // 占位符,无意义
LocationTypeVideo LocationType = 1 // 视频
LocationTypeVideoLLD LocationType = 2 // 萝莉岛
LocationTypeCartoon LocationType = 3 // 动漫
LocationTypePost LocationType = 4 // 帖子
LocationTypeComment LocationType = 5 // 评论
LocationTypeCollection LocationType = 6 // 合集
LocationTypeComics LocationType = 7 // 漫画
LocationTypeNovel LocationType = 8 // 小说
LocationTypeVoiceNovel LocationType = 9 // 有声小说
LocationTypePhoto LocationType = 10 // 图集
LocationTypeGame LocationType = 11 // 黄游
LocationTypeShort LocationType = 12 // 短视频
)
func (s LocationType) String() string {
switch s {
case LocationTypeVideo:
return "长视频"
case LocationTypeVideoLLD:
return "萝莉岛"
case LocationTypeCartoon:
return "动漫"
case LocationTypePost:
return "动态"
case LocationTypeComment:
return "评论"
case LocationTypeCollection:
return "合集"
case LocationTypeComics:
return "漫画"
case LocationTypeNovel:
return "小说"
case LocationTypeVoiceNovel:
return "有声小说"
case LocationTypePhoto:
return "图集"
case LocationTypeGame:
return "黄游"
case LocationTypeShort:
return "短视频"
default:
return "未知"
}
}
func (s LocationType) HasIntersection(other ...LocationType) bool {
for _, v := range other {
if s == v {
return true
}
}
return false
}
// 哪些类型可以分配创作者收益, 目前是所有类型
func (s LocationType) CanDistributionWorkerIncome() bool {
return slices.Contains([]LocationType{
LocationTypeVideo,
LocationTypeVideoLLD,
LocationTypeCartoon,
LocationTypePost,
LocationTypeCollection,
LocationTypeComics,
LocationTypeNovel,
LocationTypePhoto,
LocationTypeGame,
}, s)
}
type MediaTagInfo struct {
Id int64 `json:"id"`
Name string `json:"name"`
}
type MediaTagInfoList []MediaTagInfo
func (s MediaTagInfoList) ToUniqueList() MediaTagInfoList {
var ret MediaTagInfoList
dict := make(map[int64]struct{})
for _, v := range s {
if _, ok := dict[v.Id]; !ok {
dict[v.Id] = struct{}{}
ret = append(ret, v)
}
}
return ret
}