@@ -0,0 +1,111 @@
|
||||
package mediaService
|
||||
|
||||
import (
|
||||
"91porn-server/common/log"
|
||||
"91porn-server/common/mediaCenter"
|
||||
"91porn-server/common/redis"
|
||||
v10 "91porn-server/common/v10"
|
||||
"91porn-server/models/v/mediamod"
|
||||
"91porn-server/models/v/mediatagmod"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"time"
|
||||
)
|
||||
|
||||
type mediaSync struct {
|
||||
rd *redis.Client
|
||||
Ms *mediaCenter.MediaCenterService
|
||||
Worker *worker
|
||||
}
|
||||
|
||||
func NewMediaSync(rd *redis.Client, ms *mediaCenter.MediaCenterService) *mediaSync {
|
||||
return &mediaSync{
|
||||
rd: rd,
|
||||
Ms: ms,
|
||||
Worker: w, //最多同时N个协程处理任务
|
||||
}
|
||||
}
|
||||
|
||||
func (m *mediaSync) SyncAll(admin string) {
|
||||
// 判断当前是否有正在同步的任务,有的话就不执行
|
||||
key := "MediaSyncAll"
|
||||
|
||||
has, err := m.rd.SetNX(key, 1, time.Minute*10)
|
||||
if err != nil {
|
||||
log.Error("SyncAll setNx fail", log.E(err))
|
||||
return
|
||||
}
|
||||
if !has {
|
||||
return
|
||||
}
|
||||
// 释放锁
|
||||
defer m.rd.Del(key)
|
||||
// 获取所有订阅未完结的动漫
|
||||
filter := bson.M{
|
||||
"mediaCenterId": bson.M{"$gt": 0},
|
||||
"updateStatus": 1, //未完结的状态
|
||||
"isDelete": false,
|
||||
}
|
||||
sort := bson.D{{"_id", -1}, {"createdAt", -1}}
|
||||
var skip int64
|
||||
var limit int64 = 500
|
||||
for {
|
||||
list, hasNext, err := mediamod.GetList(filter, skip, limit, sort)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
for _, v := range list {
|
||||
media := v
|
||||
m.Worker.Exec(func() {
|
||||
err = m.SyncMediaData(media)
|
||||
if err != nil {
|
||||
log.Error("SyncMediaData fail", log.Any("mediaId", media.ID), log.E(err))
|
||||
return
|
||||
}
|
||||
})
|
||||
}
|
||||
skip += limit
|
||||
if !hasNext {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (m *mediaSync) OnSyncTimeChange(mediaId primitive.ObjectID, syncTime int64) {
|
||||
if mediaId.IsZero() || syncTime <= 0 {
|
||||
return
|
||||
}
|
||||
// 修改下一次需要同步的时间点位
|
||||
updataData := make(map[string]interface{})
|
||||
updataData["syncTime"] = syncTime
|
||||
updataData["updateTime"] = time.Now()
|
||||
mediamod.UpdateByID(nil, mediaId, updataData)
|
||||
}
|
||||
|
||||
// HandleTag 处理标签
|
||||
func HandleTag(tagname, dimension string, dimensionType, kind int) (tagID primitive.ObjectID, suc bool) {
|
||||
tMod := mediatagmod.MediaTag{}
|
||||
tagname = v10.ExtractPureChar(tagname)
|
||||
tagInfo, err := mediatagmod.FindOneTagByFilter(bson.M{
|
||||
"name": tagname,
|
||||
"kind": kind,
|
||||
"dimension": dimension,
|
||||
"type": dimensionType,
|
||||
})
|
||||
if err == nil && !tagInfo.ID.IsZero() {
|
||||
return tagInfo.ID, true
|
||||
}
|
||||
tMod.Name = tagname
|
||||
tMod.Dimension = dimension
|
||||
tMod.Kind = kind
|
||||
tMod.Type = dimensionType
|
||||
tMod.Active = true
|
||||
tMod.CreatedAt = time.Now()
|
||||
tMod.UpdateTime = time.Now()
|
||||
id, err := mediatagmod.Insert(nil, tMod)
|
||||
if err != nil {
|
||||
return primitive.NilObjectID, false
|
||||
}
|
||||
return id, true
|
||||
}
|
||||
Reference in New Issue
Block a user