2019-02-09 12:30:49 +00:00
|
|
|
package api
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
2019-02-14 23:42:52 +00:00
|
|
|
"github.com/stashapp/stash/pkg/api/urlbuilders"
|
|
|
|
"github.com/stashapp/stash/pkg/manager"
|
|
|
|
"github.com/stashapp/stash/pkg/models"
|
|
|
|
"github.com/stashapp/stash/pkg/utils"
|
2019-02-09 12:30:49 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func (r *sceneResolver) Title(ctx context.Context, obj *models.Scene) (*string, error) {
|
|
|
|
if obj.Title.Valid {
|
|
|
|
return &obj.Title.String, nil
|
|
|
|
}
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r *sceneResolver) Details(ctx context.Context, obj *models.Scene) (*string, error) {
|
|
|
|
if obj.Details.Valid {
|
|
|
|
return &obj.Details.String, nil
|
|
|
|
}
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r *sceneResolver) URL(ctx context.Context, obj *models.Scene) (*string, error) {
|
2019-02-14 22:53:32 +00:00
|
|
|
if obj.URL.Valid {
|
|
|
|
return &obj.URL.String, nil
|
2019-02-09 12:30:49 +00:00
|
|
|
}
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r *sceneResolver) Date(ctx context.Context, obj *models.Scene) (*string, error) {
|
|
|
|
if obj.Date.Valid {
|
|
|
|
result := utils.GetYMDFromDatabaseDate(obj.Date.String)
|
|
|
|
return &result, nil
|
|
|
|
}
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r *sceneResolver) Rating(ctx context.Context, obj *models.Scene) (*int, error) {
|
|
|
|
if obj.Rating.Valid {
|
|
|
|
rating := int(obj.Rating.Int64)
|
|
|
|
return &rating, nil
|
|
|
|
}
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
|
2019-03-26 15:35:06 +00:00
|
|
|
func (r *sceneResolver) File(ctx context.Context, obj *models.Scene) (*models.SceneFileType, error) {
|
2019-02-09 12:30:49 +00:00
|
|
|
width := int(obj.Width.Int64)
|
|
|
|
height := int(obj.Height.Int64)
|
|
|
|
bitrate := int(obj.Bitrate.Int64)
|
2019-03-26 15:35:06 +00:00
|
|
|
return &models.SceneFileType{
|
2019-02-14 22:53:32 +00:00
|
|
|
Size: &obj.Size.String,
|
|
|
|
Duration: &obj.Duration.Float64,
|
2019-02-09 12:30:49 +00:00
|
|
|
VideoCodec: &obj.VideoCodec.String,
|
|
|
|
AudioCodec: &obj.AudioCodec.String,
|
2019-02-14 22:53:32 +00:00
|
|
|
Width: &width,
|
|
|
|
Height: &height,
|
|
|
|
Framerate: &obj.Framerate.Float64,
|
|
|
|
Bitrate: &bitrate,
|
2019-02-09 12:30:49 +00:00
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
2019-03-26 15:35:06 +00:00
|
|
|
func (r *sceneResolver) Paths(ctx context.Context, obj *models.Scene) (*models.ScenePathsType, error) {
|
2019-02-09 12:30:49 +00:00
|
|
|
baseURL, _ := ctx.Value(BaseURLCtxKey).(string)
|
|
|
|
builder := urlbuilders.NewSceneURLBuilder(baseURL, obj.ID)
|
2019-02-14 22:53:32 +00:00
|
|
|
screenshotPath := builder.GetScreenshotURL()
|
|
|
|
previewPath := builder.GetStreamPreviewURL()
|
|
|
|
streamPath := builder.GetStreamURL()
|
|
|
|
webpPath := builder.GetStreamPreviewImageURL()
|
|
|
|
vttPath := builder.GetSpriteVTTURL()
|
|
|
|
chaptersVttPath := builder.GetChaptersVTTURL()
|
2019-03-26 15:35:06 +00:00
|
|
|
return &models.ScenePathsType{
|
2019-02-14 22:53:32 +00:00
|
|
|
Screenshot: &screenshotPath,
|
|
|
|
Preview: &previewPath,
|
|
|
|
Stream: &streamPath,
|
|
|
|
Webp: &webpPath,
|
|
|
|
Vtt: &vttPath,
|
2019-02-09 12:30:49 +00:00
|
|
|
ChaptersVtt: &chaptersVttPath,
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r *sceneResolver) IsStreamable(ctx context.Context, obj *models.Scene) (bool, error) {
|
2019-02-11 20:12:08 +00:00
|
|
|
return manager.IsStreamable(obj)
|
2019-02-09 12:30:49 +00:00
|
|
|
}
|
|
|
|
|
2019-05-27 19:34:26 +00:00
|
|
|
func (r *sceneResolver) SceneMarkers(ctx context.Context, obj *models.Scene) ([]*models.SceneMarker, error) {
|
2019-02-09 12:30:49 +00:00
|
|
|
qb := models.NewSceneMarkerQueryBuilder()
|
|
|
|
return qb.FindBySceneID(obj.ID, nil)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r *sceneResolver) Gallery(ctx context.Context, obj *models.Scene) (*models.Gallery, error) {
|
|
|
|
qb := models.NewGalleryQueryBuilder()
|
|
|
|
return qb.FindBySceneID(obj.ID, nil)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r *sceneResolver) Studio(ctx context.Context, obj *models.Scene) (*models.Studio, error) {
|
|
|
|
qb := models.NewStudioQueryBuilder()
|
|
|
|
return qb.FindBySceneID(obj.ID)
|
|
|
|
}
|
|
|
|
|
2019-05-27 19:34:26 +00:00
|
|
|
func (r *sceneResolver) Tags(ctx context.Context, obj *models.Scene) ([]*models.Tag, error) {
|
2019-02-09 12:30:49 +00:00
|
|
|
qb := models.NewTagQueryBuilder()
|
|
|
|
return qb.FindBySceneID(obj.ID, nil)
|
|
|
|
}
|
|
|
|
|
2019-05-27 19:34:26 +00:00
|
|
|
func (r *sceneResolver) Performers(ctx context.Context, obj *models.Scene) ([]*models.Performer, error) {
|
2019-02-09 12:30:49 +00:00
|
|
|
qb := models.NewPerformerQueryBuilder()
|
|
|
|
return qb.FindBySceneID(obj.ID, nil)
|
|
|
|
}
|