manager

package
v0.16.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 25, 2022 License: AGPL-3.0 Imports: 66 Imported by: 0

Documentation

Index

Constants

View Source
const APIKeySubject = "APIKey"

Variables

View Source
var ErrInput = errors.New("invalid request input")
View Source
var ErrInvalidToken = errors.New("invalid apikey")

Functions

func DeleteGalleryFile

func DeleteGalleryFile(gallery *models.Gallery)

func GenerateAPIKey

func GenerateAPIKey(userID string) (string, error)

func GetSceneFileContainer

func GetSceneFileContainer(scene *models.Scene) (ffmpeg.Container, error)

func GetSceneStreamPaths

func GetSceneStreamPaths(scene *models.Scene, directStreamURL string, maxStreamingTranscodeSize models.StreamingResolutionEnum) ([]*models.SceneStreamEndpoint, error)

func GetUserIDFromAPIKey

func GetUserIDFromAPIKey(apiKey string) (string, error)

GetUserIDFromAPIKey validates the provided api key and returns the user ID

func HasTranscode

func HasTranscode(scene *models.Scene, fileNamingAlgo models.HashAlgorithm) bool

HasTranscode returns true if a transcoded video exists for the provided scene. It will check using the OSHash of the scene first, then fall back to the checksum.

func KillRunningStreams

func KillRunningStreams(scene *models.Scene, fileNamingAlgo models.HashAlgorithm)

func ValidateModifyStudio

func ValidateModifyStudio(studio models.StudioPartial, qb models.StudioReader) error

func ValidateVideoFileNamingAlgorithm

func ValidateVideoFileNamingAlgorithm(txnManager models.TransactionManager, newValue models.HashAlgorithm) error

ValidateVideoFileNamingAlgorithm validates changing the VideoFileNamingAlgorithm configuration flag.

If setting VideoFileNamingAlgorithm to MD5, then this function will ensure that all checksum values are set on all scenes.

Likewise, if VideoFileNamingAlgorithm is set to oshash, then this function will ensure that all oshash values are set on all scenes.

Types

type APIKeyClaims

type APIKeyClaims struct {
	UserID string `json:"uid"`
	jwt.StandardClaims
}

type Action

type Action struct {
	// At time in milliseconds the action should fire.
	At int64 `json:"at"`
	// Pos is the place in percent to move to.
	Pos int `json:"pos"`

	Slope     float64
	Intensity int64
	Speed     float64
}

Action is a move at a specific time.

type DownloadStore

type DownloadStore struct {
	// contains filtered or unexported fields
}

DownloadStore manages single-use generated files for the UI to download.

func NewDownloadStore

func NewDownloadStore() *DownloadStore

func (*DownloadStore) RegisterFile

func (s *DownloadStore) RegisterFile(fp string, contentType string, keep bool) (string, error)

func (*DownloadStore) Serve

func (s *DownloadStore) Serve(hash string, w http.ResponseWriter, r *http.Request)

type ExportTask

type ExportTask struct {
	Mappings *jsonschema.Mappings

	DownloadHash string
	// contains filtered or unexported fields
}

func (*ExportTask) ExportGalleries

func (t *ExportTask) ExportGalleries(workers int, repo models.ReaderRepository)

func (*ExportTask) ExportImages

func (t *ExportTask) ExportImages(workers int, repo models.ReaderRepository)

func (*ExportTask) ExportMovies

func (t *ExportTask) ExportMovies(workers int, repo models.ReaderRepository)

func (*ExportTask) ExportPerformers

func (t *ExportTask) ExportPerformers(workers int, repo models.ReaderRepository)

func (*ExportTask) ExportScenes

func (t *ExportTask) ExportScenes(workers int, repo models.ReaderRepository)

func (*ExportTask) ExportScrapedItems

func (t *ExportTask) ExportScrapedItems(repo models.ReaderRepository)

func (*ExportTask) ExportStudios

func (t *ExportTask) ExportStudios(workers int, repo models.ReaderRepository)

func (*ExportTask) ExportTags

func (t *ExportTask) ExportTags(workers int, repo models.ReaderRepository)

func (*ExportTask) Start

func (t *ExportTask) Start(ctx context.Context, wg *sync.WaitGroup)

type FaviconProvider

type FaviconProvider struct {
	UIBox embed.FS
}

func (*FaviconProvider) GetFavicon

func (p *FaviconProvider) GetFavicon() []byte

func (*FaviconProvider) GetFaviconPng

func (p *FaviconProvider) GetFaviconPng() []byte

type GenerateInteractiveHeatmapSpeedTask

type GenerateInteractiveHeatmapSpeedTask struct {
	Scene     models.Scene
	Overwrite bool

	TxnManager models.TransactionManager
	// contains filtered or unexported fields
}

func (*GenerateInteractiveHeatmapSpeedTask) GetDescription

func (t *GenerateInteractiveHeatmapSpeedTask) GetDescription() string

func (*GenerateInteractiveHeatmapSpeedTask) Start

type GenerateJob

type GenerateJob struct {
	// contains filtered or unexported fields
}

func (*GenerateJob) Execute

func (j *GenerateJob) Execute(ctx context.Context, progress *job.Progress)

type GenerateMarkersTask

type GenerateMarkersTask struct {
	TxnManager models.TransactionManager
	Scene      *models.Scene
	Marker     *models.SceneMarker
	Overwrite  bool

	ImagePreview bool
	Screenshot   bool
	// contains filtered or unexported fields
}

func (*GenerateMarkersTask) GetDescription

func (t *GenerateMarkersTask) GetDescription() string

func (*GenerateMarkersTask) Start

func (t *GenerateMarkersTask) Start(ctx context.Context)

type GeneratePhashTask

type GeneratePhashTask struct {
	Scene     models.Scene
	Overwrite bool
	// contains filtered or unexported fields
}

func (*GeneratePhashTask) GetDescription

func (t *GeneratePhashTask) GetDescription() string

func (*GeneratePhashTask) Start

func (t *GeneratePhashTask) Start(ctx context.Context)

type GeneratePreviewTask

type GeneratePreviewTask struct {
	Scene        models.Scene
	ImagePreview bool

	Options generate.PreviewOptions

	Overwrite bool
	// contains filtered or unexported fields
}

func (*GeneratePreviewTask) GetDescription

func (t *GeneratePreviewTask) GetDescription() string

func (*GeneratePreviewTask) Start

func (t *GeneratePreviewTask) Start(ctx context.Context)

type GenerateScreenshotTask

type GenerateScreenshotTask struct {
	Scene        models.Scene
	ScreenshotAt *float64
	// contains filtered or unexported fields
}

func (*GenerateScreenshotTask) Start

func (t *GenerateScreenshotTask) Start(ctx context.Context)

type GenerateSpriteTask

type GenerateSpriteTask struct {
	Scene     models.Scene
	Overwrite bool
	// contains filtered or unexported fields
}

func (*GenerateSpriteTask) GetDescription

func (t *GenerateSpriteTask) GetDescription() string

func (*GenerateSpriteTask) Start

func (t *GenerateSpriteTask) Start(ctx context.Context)

type GenerateTranscodeTask

type GenerateTranscodeTask struct {
	Scene     models.Scene
	Overwrite bool

	// is true, generate even if video is browser-supported
	Force bool
	// contains filtered or unexported fields
}

func (*GenerateTranscodeTask) GetDescription

func (t *GenerateTranscodeTask) GetDescription() string

func (*GenerateTranscodeTask) Start

func (t *GenerateTranscodeTask) Start(ctc context.Context)

type GradientTable

type GradientTable []struct {
	Col colorful.Color
	Pos float64
}

func (GradientTable) GetInterpolatedColorFor

func (gt GradientTable) GetInterpolatedColorFor(t float64) colorful.Color

type IdentifyJob

type IdentifyJob struct {
	// contains filtered or unexported fields
}

func CreateIdentifyJob

func CreateIdentifyJob(input models.IdentifyMetadataInput) *IdentifyJob

func (*IdentifyJob) Execute

func (j *IdentifyJob) Execute(ctx context.Context, progress *job.Progress)

type ImportTask

type ImportTask struct {
	BaseDir             string
	TmpZip              string
	Reset               bool
	DuplicateBehaviour  models.ImportDuplicateEnum
	MissingRefBehaviour models.ImportMissingRefEnum
	// contains filtered or unexported fields
}

func (*ImportTask) GetDescription

func (t *ImportTask) GetDescription() string

func (*ImportTask) ImportGalleries

func (t *ImportTask) ImportGalleries(ctx context.Context)

func (*ImportTask) ImportImages

func (t *ImportTask) ImportImages(ctx context.Context)

func (*ImportTask) ImportMovies

func (t *ImportTask) ImportMovies(ctx context.Context)

func (*ImportTask) ImportPerformers

func (t *ImportTask) ImportPerformers(ctx context.Context)

func (*ImportTask) ImportScenes

func (t *ImportTask) ImportScenes(ctx context.Context)

func (*ImportTask) ImportScrapedItems

func (t *ImportTask) ImportScrapedItems(ctx context.Context)

func (*ImportTask) ImportStudio

func (t *ImportTask) ImportStudio(studioJSON *jsonschema.Studio, pendingParent map[string][]*jsonschema.Studio, readerWriter models.StudioReaderWriter) error

func (*ImportTask) ImportStudios

func (t *ImportTask) ImportStudios(ctx context.Context)

func (*ImportTask) ImportTag

func (t *ImportTask) ImportTag(tagJSON *jsonschema.Tag, pendingParent map[string][]*jsonschema.Tag, fail bool, readerWriter models.TagReaderWriter) error

func (*ImportTask) ImportTags

func (t *ImportTask) ImportTags(ctx context.Context)

func (*ImportTask) Start

func (t *ImportTask) Start(ctx context.Context)

type InteractiveHeatmapSpeedGenerator

type InteractiveHeatmapSpeedGenerator struct {
	InteractiveSpeed int64
	Funscript        Script
	FunscriptPath    string
	HeatmapPath      string
	Width            int
	Height           int
	NumSegments      int
}

func NewInteractiveHeatmapSpeedGenerator

func NewInteractiveHeatmapSpeedGenerator(funscriptPath string, heatmapPath string) *InteractiveHeatmapSpeedGenerator

func (*InteractiveHeatmapSpeedGenerator) Generate

func (*InteractiveHeatmapSpeedGenerator) LoadFunscriptData

func (g *InteractiveHeatmapSpeedGenerator) LoadFunscriptData(path string) (Script, error)

func (*InteractiveHeatmapSpeedGenerator) RenderHeatmap

func (g *InteractiveHeatmapSpeedGenerator) RenderHeatmap() error

funscript needs to have intensity updated first

type Manager added in v0.15.0

type Manager struct {
	Config *config.Instance
	Logger *log.Logger

	Paths *paths.Paths

	FFMPEG  ffmpeg.FFMpeg
	FFProbe ffmpeg.FFProbe

	ReadLockManager *fsutil.ReadLockManager

	SessionStore *session.Store

	JobManager *job.Manager

	PluginCache  *plugin.Cache
	ScraperCache *scraper.Cache

	DownloadStore *DownloadStore

	DLNAService *dlna.Service

	TxnManager models.TransactionManager
	// contains filtered or unexported fields
}

func GetInstance

func GetInstance() *Manager

func Initialize

func Initialize() (*Manager, error)

func (*Manager) AutoTag added in v0.15.0

func (s *Manager) AutoTag(ctx context.Context, input models.AutoTagMetadataInput) int

func (*Manager) Clean added in v0.15.0

func (s *Manager) Clean(ctx context.Context, input models.CleanMetadataInput) int

func (*Manager) Export added in v0.15.0

func (s *Manager) Export(ctx context.Context) (int, error)

func (*Manager) Generate added in v0.15.0

func (s *Manager) Generate(ctx context.Context, input models.GenerateMetadataInput) (int, error)

func (*Manager) GenerateDefaultScreenshot added in v0.15.0

func (s *Manager) GenerateDefaultScreenshot(ctx context.Context, sceneId string) int

func (*Manager) GenerateScreenshot added in v0.15.0

func (s *Manager) GenerateScreenshot(ctx context.Context, sceneId string, at float64) int

func (*Manager) GetSystemStatus added in v0.15.0

func (s *Manager) GetSystemStatus() *models.SystemStatus

func (*Manager) Import added in v0.15.0

func (s *Manager) Import(ctx context.Context) (int, error)

func (*Manager) Migrate added in v0.15.0

func (s *Manager) Migrate(ctx context.Context, input models.MigrateInput) error

func (*Manager) MigrateHash added in v0.15.0

func (s *Manager) MigrateHash(ctx context.Context) int

func (*Manager) PostInit added in v0.15.0

func (s *Manager) PostInit(ctx context.Context) error

PostInit initialises the paths, caches and txnManager after the initial configuration has been set. Should only be called if the configuration is valid.

func (*Manager) PostMigrate added in v0.15.0

func (s *Manager) PostMigrate(ctx context.Context)

PostMigrate is executed after migrations have been executed.

func (*Manager) RefreshConfig added in v0.15.0

func (s *Manager) RefreshConfig()

func (*Manager) RefreshScraperCache added in v0.15.0

func (s *Manager) RefreshScraperCache()

RefreshScraperCache refreshes the scraper cache. Call this when scraper configuration changes.

func (*Manager) RunPluginTask added in v0.15.0

func (s *Manager) RunPluginTask(ctx context.Context, pluginID string, taskName string, args []*models.PluginArgInput) int

func (*Manager) RunSingleTask added in v0.15.0

func (s *Manager) RunSingleTask(ctx context.Context, t Task) int

func (*Manager) Scan added in v0.15.0

func (s *Manager) Scan(ctx context.Context, input models.ScanMetadataInput) (int, error)

func (*Manager) ScanSubscribe added in v0.15.0

func (s *Manager) ScanSubscribe(ctx context.Context) <-chan bool

ScanSubscribe subscribes to a notification that is triggered when a scan or clean is complete.

func (*Manager) Setup added in v0.15.0

func (s *Manager) Setup(ctx context.Context, input models.SetupInput) error

func (*Manager) Shutdown added in v0.15.0

func (s *Manager) Shutdown(code int)

Shutdown gracefully stops the manager

func (*Manager) StashBoxBatchPerformerTag added in v0.15.0

func (s *Manager) StashBoxBatchPerformerTag(ctx context.Context, input models.StashBoxBatchPerformerTagInput) int

type MigrateHashTask

type MigrateHashTask struct {
	Scene *models.Scene
	// contains filtered or unexported fields
}

MigrateHashTask renames generated files between oshash and MD5 based on the value of the fileNamingAlgorithm flag.

func (*MigrateHashTask) Start

func (t *MigrateHashTask) Start()

Start starts the task.

type ScanJob

type ScanJob struct {
	// contains filtered or unexported fields
}

func (*ScanJob) Execute

func (j *ScanJob) Execute(ctx context.Context, progress *job.Progress)

type ScanTask

type ScanTask struct {
	TxnManager models.TransactionManager

	UseFileMetadata    bool
	StripFileExtension bool

	GenerateSprite       bool
	GeneratePhash        bool
	GeneratePreview      bool
	GenerateImagePreview bool
	GenerateThumbnails   bool

	CaseSensitiveFs bool
	// contains filtered or unexported fields
}

func (*ScanTask) Start

func (t *ScanTask) Start(ctx context.Context)

type SceneFilenameParser

type SceneFilenameParser struct {
	Pattern     string
	ParserInput models.SceneParserInput
	Filter      *models.FindFilterType
	// contains filtered or unexported fields
}

func NewSceneFilenameParser

func NewSceneFilenameParser(filter *models.FindFilterType, config models.SceneParserInput) *SceneFilenameParser

func (*SceneFilenameParser) Parse

type SceneServer

type SceneServer struct {
	TXNManager models.TransactionManager
}

func (*SceneServer) ServeScreenshot

func (s *SceneServer) ServeScreenshot(scene *models.Scene, w http.ResponseWriter, r *http.Request)

func (*SceneServer) StreamSceneDirect

func (s *SceneServer) StreamSceneDirect(scene *models.Scene, w http.ResponseWriter, r *http.Request)

type Script

type Script struct {
	// Version of Launchscript
	Version string `json:"version"`
	// Inverted causes up and down movement to be flipped.
	Inverted bool `json:"inverted,omitempty"`
	// Range is the percentage of a full stroke to use.
	Range int `json:"range,omitempty"`
	// Actions are the timed moves.
	Actions      []Action `json:"actions"`
	AvarageSpeed int64
}

func (*Script) CalculateMedian

func (funscript *Script) CalculateMedian() int64

func (*Script) UpdateIntensityAndSpeed

func (funscript *Script) UpdateIntensityAndSpeed()

type SpriteGenerator

type SpriteGenerator struct {
	Info *generatorInfo

	VideoChecksum   string
	ImageOutputPath string
	VTTOutputPath   string
	Rows            int
	Columns         int
	SlowSeek        bool // use alternate seek function, very slow!

	Overwrite bool
	// contains filtered or unexported fields
}

func NewSpriteGenerator

func NewSpriteGenerator(videoFile ffmpeg.VideoFile, videoChecksum string, imageOutputPath string, vttOutputPath string, rows int, cols int) (*SpriteGenerator, error)

func (*SpriteGenerator) Generate

func (g *SpriteGenerator) Generate() error

type StashBoxPerformerTagTask

type StashBoxPerformerTagTask struct {
	// contains filtered or unexported fields
}

func (*StashBoxPerformerTagTask) Description

func (t *StashBoxPerformerTagTask) Description() string

func (*StashBoxPerformerTagTask) Start

type StreamRequestContext added in v0.15.0

type StreamRequestContext struct {
	context.Context
	ResponseWriter http.ResponseWriter
}

func NewStreamRequestContext added in v0.15.0

func NewStreamRequestContext(w http.ResponseWriter, r *http.Request) *StreamRequestContext

func (*StreamRequestContext) Cancel added in v0.15.0

func (c *StreamRequestContext) Cancel()

type Task

type Task interface {
	Start(context.Context)
	GetDescription() string
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL
JackTT - Gopher 🇻🇳