mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-28 11:16:37 +08:00
66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
// Package service — library / media bookkeeping.
|
|
package service
|
|
|
|
import (
|
|
"go.uber.org/zap"
|
|
"golang.org/x/sync/singleflight"
|
|
|
|
"github.com/truewhile/MeBox/internal/config"
|
|
"github.com/truewhile/MeBox/internal/model"
|
|
"github.com/truewhile/MeBox/internal/repository"
|
|
)
|
|
|
|
// MediaService offers high-level CRUD over libraries and media items.
|
|
type MediaService struct {
|
|
cfg *config.Config
|
|
log *zap.Logger
|
|
repo *repository.Container
|
|
cache *RuntimeCacheService
|
|
groupedMediaFlight singleflight.Group
|
|
libraryRowsFlight singleflight.Group
|
|
}
|
|
|
|
type MediaVisibility struct {
|
|
IncludeNSFW bool
|
|
AllowedLibraryIDs []string
|
|
HiddenLibraryIDs []string
|
|
}
|
|
|
|
const maxMediaSearchLimit = 50000
|
|
const maxMediaSearchPageSize = 2000
|
|
|
|
func (v MediaVisibility) Allows(media *model.Media) bool {
|
|
if media == nil {
|
|
return false
|
|
}
|
|
if !v.IncludeNSFW && media.NSFW {
|
|
return false
|
|
}
|
|
for _, id := range v.HiddenLibraryIDs {
|
|
if id == media.LibraryID {
|
|
return false
|
|
}
|
|
}
|
|
if len(v.AllowedLibraryIDs) == 0 {
|
|
return true
|
|
}
|
|
for _, id := range v.AllowedLibraryIDs {
|
|
if id == media.LibraryID {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// NewMediaService is the constructor.
|
|
func NewMediaService(cfg *config.Config, log *zap.Logger, repo *repository.Container) *MediaService {
|
|
return &MediaService{cfg: cfg, log: log, repo: repo}
|
|
}
|
|
|
|
func (s *MediaService) SetRuntimeCache(cache *RuntimeCacheService) *MediaService {
|
|
if s != nil {
|
|
s.cache = cache
|
|
}
|
|
return s
|
|
}
|