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.
131 lines
3.4 KiB
131 lines
3.4 KiB
package service |
|
|
|
import ( |
|
"context" |
|
|
|
"go-common/app/job/main/archive/model/archive" |
|
"go-common/app/job/main/archive/model/result" |
|
"go-common/app/job/main/archive/model/retry" |
|
arcmdl "go-common/app/service/main/archive/model/archive" |
|
"go-common/library/log" |
|
) |
|
|
|
func (s *Service) isPGC(aid int64) bool { |
|
if addit, _ := s.archiveDao.Addit(context.TODO(), aid); addit != nil && (addit.UpFrom == archive.UpFromPGC || addit.UpFrom == archive.UpFromPGCSecret) { |
|
return true |
|
} |
|
return false |
|
} |
|
|
|
func (s *Service) consumerVideoup(i int) { |
|
defer s.waiter.Done() |
|
for { |
|
var ( |
|
aid int64 |
|
ok bool |
|
) |
|
if aid, ok = <-s.videoupAids[i]; !ok { |
|
log.Error("s.videoupAids chan closed") |
|
return |
|
} |
|
arc, _ := s.arcServices[0].Archive3(context.TODO(), &arcmdl.ArgAid2{Aid: aid}) |
|
if arc != nil && (arc.AttrVal(arcmdl.AttrBitIsPGC) == arcmdl.AttrYes || arc.AttrVal(arcmdl.AttrBitIsBangumi) == arcmdl.AttrYes) { |
|
if s.c.PGCAsync == 1 { |
|
rt := &retry.Info{Action: retry.FailResultAdd} |
|
rt.Data.Aid = aid |
|
s.PushFail(context.TODO(), rt) |
|
log.Warn("async PGC archive(%d)", aid) |
|
continue |
|
} |
|
s.pgcAids <- aid |
|
log.Info("aid(%d) title(%s) is PGC", aid, arc.Title) |
|
continue |
|
} |
|
if s.c.UGCAsync == 1 { |
|
rt := &retry.Info{Action: retry.FailResultAdd} |
|
rt.Data.Aid = aid |
|
s.PushFail(context.TODO(), rt) |
|
log.Warn("async UGC archive(%d)", aid) |
|
continue |
|
} |
|
s.arcUpdate(aid) |
|
} |
|
} |
|
|
|
func (s *Service) pgcConsumer() { |
|
defer s.waiter.Done() |
|
for { |
|
var ( |
|
aid int64 |
|
ok bool |
|
) |
|
if aid, ok = <-s.pgcAids; !ok { |
|
log.Error("s.pgcAids closed") |
|
return |
|
} |
|
s.arcUpdate(aid) |
|
} |
|
} |
|
|
|
func (s *Service) arcUpdate(aid int64) { |
|
var ( |
|
oldResult *result.Archive |
|
newResult *result.Archive |
|
c = context.TODO() |
|
upCids []int64 |
|
delCids []int64 |
|
err error |
|
changed bool |
|
) |
|
log.Info("sync resultDB archive(%d) start", aid) |
|
defer func() { |
|
if err != nil { |
|
if oldResult != nil && (oldResult.AttrVal(result.AttrBitIsBangumi) == result.AttrYes || oldResult.AttrVal(result.AttrBitIsPGC) == result.AttrYes) { |
|
s.pgcAids <- aid |
|
} else { |
|
s.videoupAids[aid%int64(s.c.ChanSize)] <- aid |
|
} |
|
log.Error("s.arcUpdate(%d) error(%v)", aid, err) |
|
} |
|
}() |
|
if oldResult, err = s.resultDao.Archive(c, aid); err != nil { |
|
log.Error("s.resultDao.Archive(%d) error(%v)", aid, err) |
|
} |
|
if changed, upCids, delCids, err = s.tranResult(c, aid); err != nil || !changed { |
|
log.Error("aid(%d) nothing changed err(%+v)", aid, err) |
|
err = nil |
|
return |
|
} |
|
s.upVideoCache(aid, upCids) |
|
s.delVideoCache(aid, delCids) |
|
if newResult, err = s.resultDao.Archive(c, aid); err != nil { |
|
log.Error("s.resultDao.Archive(%d) error(%v)", aid, err) |
|
return |
|
} |
|
err = s.updateResultCache(newResult, oldResult) |
|
if oldResult != nil { |
|
s.updateResultField(newResult, oldResult) |
|
s.updateSubjectMid(newResult, oldResult) |
|
s.sendMail(newResult, oldResult) |
|
} |
|
action := "update" |
|
if oldResult == nil { |
|
action = "insert" |
|
} |
|
s.sendNotify(&result.ArchiveUpInfo{Table: "archive", Action: action, Nw: newResult, Old: oldResult}) |
|
if oldResult != nil { |
|
log.Info("sync resultDB archive(%d) sync old(%+v) new(%+v) updated", aid, oldResult, newResult) |
|
return |
|
} |
|
log.Info("sync resultDB archive(%d) new(%+v) inserted", aid, newResult) |
|
} |
|
|
|
func (s *Service) hadPassed(c context.Context, aid int64) (had bool) { |
|
id, err := s.archiveDao.GetFirstPassByAID(c, aid) |
|
if err != nil { |
|
log.Error("hadPassed s.arc.GetFirstPassByAID error(%v) aid(%d)", err, aid) |
|
return |
|
} |
|
had = id > 0 |
|
return |
|
}
|
|
|