mirror of
https://github.com/ProudMuBai/GoFilm.git
synced 2026-02-24 12:24:44 +08:00
add BAM
This commit is contained in:
176
server/model/system/CollectSource.go
Normal file
176
server/model/system/CollectSource.go
Normal file
@@ -0,0 +1,176 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/redis/go-redis/v9"
|
||||
"log"
|
||||
"server/config"
|
||||
"server/plugin/common/util"
|
||||
"server/plugin/db"
|
||||
)
|
||||
|
||||
/*
|
||||
影视采集站点信息
|
||||
*/
|
||||
|
||||
type SourceGrade int
|
||||
|
||||
const (
|
||||
MasterCollect SourceGrade = iota
|
||||
SlaveCollect
|
||||
)
|
||||
|
||||
type CollectResultModel int
|
||||
|
||||
const (
|
||||
JsonResult CollectResultModel = iota
|
||||
XmlResult
|
||||
)
|
||||
|
||||
type ResourceType int
|
||||
|
||||
func (rt ResourceType) GetActionType() string {
|
||||
var ac string = ""
|
||||
switch rt {
|
||||
case CollectVideo:
|
||||
ac = "detail"
|
||||
case CollectArticle:
|
||||
ac = "article"
|
||||
case CollectActor:
|
||||
ac = "actor"
|
||||
case CollectRole:
|
||||
ac = "role"
|
||||
case CollectWebSite:
|
||||
ac = "web"
|
||||
default:
|
||||
ac = "detail"
|
||||
}
|
||||
return ac
|
||||
}
|
||||
|
||||
const (
|
||||
CollectVideo = iota
|
||||
CollectArticle
|
||||
CollectActor
|
||||
CollectRole
|
||||
CollectWebSite
|
||||
)
|
||||
|
||||
// FilmSource 影视站点信息保存结构体
|
||||
type FilmSource struct {
|
||||
Id string `json:"id"` // 唯一ID
|
||||
Name string `json:"name"` // 采集站点备注名
|
||||
Uri string `json:"uri"` // 采集链接
|
||||
ResultModel CollectResultModel `json:"resultModel"` // 接口返回类型, json || xml
|
||||
Grade SourceGrade `json:"grade"` // 采集站等级 主站点 || 附属站
|
||||
SyncPictures bool `json:"syncPictures"` // 是否同步图片到服务器
|
||||
CollectType ResourceType `json:"collectType"` // 采集资源类型
|
||||
State bool `json:"state"` // 是否启用
|
||||
}
|
||||
|
||||
// SaveCollectSourceList 保存采集站Api列表
|
||||
func SaveCollectSourceList(list []FilmSource) error {
|
||||
var zl []redis.Z
|
||||
for _, v := range list {
|
||||
m, _ := json.Marshal(v)
|
||||
zl = append(zl, redis.Z{Score: float64(v.Grade), Member: m})
|
||||
}
|
||||
return db.Rdb.ZAdd(db.Cxt, config.FilmSourceListKey, zl...).Err()
|
||||
}
|
||||
|
||||
// GetCollectSourceList 获取采集站API列表
|
||||
func GetCollectSourceList() []FilmSource {
|
||||
l, err := db.Rdb.ZRange(db.Cxt, config.FilmSourceListKey, 0, -1).Result()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil
|
||||
}
|
||||
return getCollectSource(l)
|
||||
}
|
||||
|
||||
// GetCollectSourceListByGrade 返回指定类型的采集Api信息 Master | Slave
|
||||
func GetCollectSourceListByGrade(grade SourceGrade) []FilmSource {
|
||||
s := fmt.Sprintf("%d", grade)
|
||||
zl, err := db.Rdb.ZRangeByScore(db.Cxt, config.FilmSourceListKey, &redis.ZRangeBy{Max: s, Min: s}).Result()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil
|
||||
}
|
||||
return getCollectSource(zl)
|
||||
}
|
||||
|
||||
// FindCollectSourceById 通过Id标识获取对应的资源站信息
|
||||
func FindCollectSourceById(id string) *FilmSource {
|
||||
for _, v := range GetCollectSourceList() {
|
||||
if v.Id == id {
|
||||
return &v
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 将 []string 转化为 []FilmSourceApi
|
||||
func getCollectSource(sl []string) []FilmSource {
|
||||
var l []FilmSource
|
||||
for _, s := range sl {
|
||||
f := FilmSource{}
|
||||
_ = json.Unmarshal([]byte(s), &f)
|
||||
l = append(l, f)
|
||||
}
|
||||
return l
|
||||
}
|
||||
|
||||
// DelCollectResource 通过Id删除对应的采集站点信息
|
||||
func DelCollectResource(id string) {
|
||||
for _, v := range GetCollectSourceList() {
|
||||
if v.Id == id {
|
||||
data, _ := json.Marshal(v)
|
||||
db.Rdb.ZRem(db.Cxt, config.FilmSourceListKey, data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// AddCollectSource 添加采集站信息
|
||||
func AddCollectSource(s FilmSource) error {
|
||||
for _, v := range GetCollectSourceList() {
|
||||
if v.Uri == s.Uri {
|
||||
return errors.New("当前采集站点信息已存在, 请勿重复添加")
|
||||
}
|
||||
}
|
||||
// 生成一个短uuid
|
||||
s.Id = util.GenerateSalt()
|
||||
data, _ := json.Marshal(s)
|
||||
return db.Rdb.ZAddNX(db.Cxt, config.FilmSourceListKey, redis.Z{Score: float64(s.Grade), Member: data}).Err()
|
||||
}
|
||||
|
||||
// UpdateCollectSource 更新采集站信息
|
||||
func UpdateCollectSource(s FilmSource) error {
|
||||
for _, v := range GetCollectSourceList() {
|
||||
if v.Id != s.Id && v.Uri == s.Uri {
|
||||
return errors.New("当前采集站链接已存在其他站点中, 请勿重复添加")
|
||||
} else if v.Id == s.Id {
|
||||
// 删除当前旧的采集信息
|
||||
DelCollectResource(s.Id)
|
||||
// 将新的采集信息存入list中
|
||||
data, _ := json.Marshal(s)
|
||||
db.Rdb.ZAdd(db.Cxt, config.FilmSourceListKey, redis.Z{Score: float64(s.Grade), Member: data})
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ClearAllCollectSource 删除所有采集站信息
|
||||
func ClearAllCollectSource() {
|
||||
db.Rdb.Del(db.Cxt, config.FilmSourceListKey)
|
||||
}
|
||||
|
||||
// ExistCollectSourceList 查询是否已经存在站点list相关数据
|
||||
func ExistCollectSourceList() bool {
|
||||
if db.Rdb.Exists(db.Cxt, config.FilmSourceListKey).Val() == 0 {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user