fix: check expired error

pull/282/head
zijiren233 1 month ago
parent 6c835ae043
commit bf07d4e7ca

@ -396,8 +396,8 @@ type BilibiliMovieCache struct {
func NewBilibiliMovieCache(movie *model.Movie) *BilibiliMovieCache {
return &BilibiliMovieCache{
NoSharedMovie: newMapCache(NewBilibiliNoSharedMovieCacheInitFunc(movie), time.Minute*60),
SharedMpd: refreshcache1.NewRefreshCache(NewBilibiliSharedMpdCacheInitFunc(movie), time.Minute*60),
NoSharedMovie: newMapCache(NewBilibiliNoSharedMovieCacheInitFunc(movie), time.Minute*55),
SharedMpd: refreshcache1.NewRefreshCache(NewBilibiliSharedMpdCacheInitFunc(movie), time.Minute*55),
Subtitle: refreshcache1.NewRefreshCache(NewBilibiliSubtitleCacheInitFunc(movie), -1),
Live: refreshcache0.NewRefreshCache(NewBilibiliLiveCacheInitFunc(movie), time.Minute*55),
}

@ -38,30 +38,39 @@ func (m *Movie) SubPath() string {
return m.subPath
}
func (m *Movie) ExpireID() uint64 {
func (m *Movie) ExpireID(ctx context.Context) (uint64, error) {
switch {
case m.Movie.MovieBase.VendorInfo.Vendor == model.VendorAlist:
amcd, _ := m.AlistCache().Raw()
if amcd != nil && amcd.Ali != nil {
return uint64(amcd.Ali.Last())
return uint64(amcd.Ali.Last()), nil
}
case m.Movie.MovieBase.Live && m.Movie.MovieBase.VendorInfo.Vendor == model.VendorBilibili:
return uint64(m.BilibiliCache().Live.Last())
liveCache := m.BilibiliCache().Live
_, err := liveCache.Get(ctx)
if err != nil {
return 0, err
}
return uint64(liveCache.Last()), nil
}
return uint64(crc32.ChecksumIEEE([]byte(m.Movie.ID)))
return uint64(crc32.ChecksumIEEE([]byte(m.Movie.ID))), nil
}
func (m *Movie) CheckExpired(expireID uint64) bool {
func (m *Movie) CheckExpired(ctx context.Context, expireID uint64) (bool, error) {
switch {
case m.Movie.MovieBase.VendorInfo.Vendor == model.VendorAlist:
amcd, _ := m.AlistCache().Raw()
if amcd != nil && amcd.Ali != nil {
return time.Now().UnixNano()-int64(amcd.Ali.Last()) > amcd.Ali.MaxAge()
return time.Now().UnixNano()-int64(amcd.Ali.Last()) > amcd.Ali.MaxAge(), nil
}
case m.Movie.MovieBase.Live && m.Movie.MovieBase.VendorInfo.Vendor == model.VendorBilibili:
return time.Now().UnixNano()-int64(expireID) > m.BilibiliCache().Live.MaxAge()
return time.Now().UnixNano()-int64(expireID) > m.BilibiliCache().Live.MaxAge(), nil
}
id, err := m.ExpireID(ctx)
if err != nil {
return false, err
}
return expireID != m.ExpireID()
return expireID != id, nil
}
func (m *Movie) ClearCache() error {

@ -1,6 +1,7 @@
package op
import (
"context"
"errors"
"fmt"
"sync/atomic"
@ -434,12 +435,12 @@ func (r *Room) LoadCurrentMovie() (*Movie, error) {
return r.GetMovieByID(id)
}
func (r *Room) CheckCurrentExpired(expireID uint64) (bool, error) {
func (r *Room) CheckCurrentExpired(ctx context.Context, expireID uint64) (bool, error) {
m, err := r.LoadCurrentMovie()
if err != nil {
return false, err
}
return m.CheckExpired(expireID), nil
return m.CheckExpired(ctx, expireID)
}
func (r *Room) SetCurrentMovie(movieID string, subPath string, play bool) error {

@ -131,10 +131,14 @@ func genCurrentRespWithCurrent(ctx context.Context, room *op.Room, user *op.User
if err != nil {
return nil, fmt.Errorf("gen current movie info error: %w", err)
}
expireID, err := opMovie.ExpireID(ctx)
if err != nil {
return nil, fmt.Errorf("get expire id error: %w", err)
}
resp := &model.CurrentMovieResp{
Status: current.UpdateStatus(),
Movie: mr,
ExpireID: opMovie.ExpireID(),
ExpireID: expireID,
}
return resp, nil
}

@ -1,6 +1,7 @@
package handlers
import (
"context"
"errors"
"fmt"
"io"
@ -420,7 +421,13 @@ func handleExpiredMessage(cli *op.Client, expirationID uint64) error {
if err != nil {
return sendErrorMessage(cli, fmt.Sprintf("get movie by id error: %v", err))
}
if currentMovie.CheckExpired(expirationID) {
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
defer cancel()
expired, err := currentMovie.CheckExpired(ctx, expirationID)
if err != nil {
return sendErrorMessage(cli, fmt.Sprintf("check expired error: %v", err))
}
if expired {
return cli.Send(&pb.Message{
Type: pb.MessageType_EXPIRED,
})

@ -1 +1 @@
Subproject commit 06afd9cf4a261f8395d09f7859db9ec40abc67c7
Subproject commit b2d6acf0abff3947ade63d17c0a3cfecf55726d6
Loading…
Cancel
Save