Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions graphql/schema/types/filters.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,8 @@ input SceneFilterType {
last_played_at: TimestampCriterionInput
"Filter by date"
date: DateCriterionInput
"Filter by production date"
production_date: DateCriterionInput
"Filter by creation time"
created_at: TimestampCriterionInput
"Filter by last update time"
Expand Down
5 changes: 5 additions & 0 deletions graphql/schema/types/scene.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ type Scene {
url: String @deprecated(reason: "Use urls")
urls: [String!]!
date: String
production_date: String
# rating expressed as 1-100
rating100: Int
organized: Boolean!
Expand Down Expand Up @@ -101,6 +102,7 @@ input SceneCreateInput {
url: String @deprecated(reason: "Use urls")
urls: [String!]
date: String
production_date: String
# rating expressed as 1-100
rating100: Int
organized: Boolean
Expand Down Expand Up @@ -132,6 +134,7 @@ input SceneUpdateInput {
url: String @deprecated(reason: "Use urls")
urls: [String!]
date: String
production_date: String
# rating expressed as 1-100
rating100: Int
o_counter: Int
Expand Down Expand Up @@ -181,6 +184,7 @@ input BulkSceneUpdateInput {
url: String @deprecated(reason: "Use urls")
urls: BulkUpdateStrings
date: String
production_date: String
# rating expressed as 1-100
rating100: Int
organized: Boolean
Expand Down Expand Up @@ -237,6 +241,7 @@ type SceneParserResult {
director: String
url: String
date: String
production_date: String
# rating expressed as 1-5
rating: Int @deprecated(reason: "Use 1-100 range with rating100")
# rating expressed as 1-100
Expand Down
2 changes: 2 additions & 0 deletions graphql/schema/types/scraper.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ type ScrapedScene {
url: String @deprecated(reason: "use urls")
urls: [String!]
date: String
production_date: String

"This should be a base64 encoded data URL"
image: String
Expand All @@ -107,6 +108,7 @@ input ScrapedSceneInput {
url: String @deprecated(reason: "use urls")
urls: [String!]
date: String
production_date: String

# no image, file, duration or relationships

Expand Down
1 change: 1 addition & 0 deletions graphql/stash-box/query.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ fragment SceneFragment on Scene {
director
duration
date
production_date
urls {
...URLFragment
}
Expand Down
8 changes: 8 additions & 0 deletions internal/api/resolver_model_scene.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,14 @@ func (r *sceneResolver) Date(ctx context.Context, obj *models.Scene) (*string, e
return nil, nil
}

func (r *sceneResolver) ProductionDate(ctx context.Context, obj *models.Scene) (*string, error) {
if obj.ProductionDate != nil {
result := obj.ProductionDate.String()
return &result, nil
}
return nil, nil
}

func (r *sceneResolver) Files(ctx context.Context, obj *models.Scene) ([]*VideoFile, error) {
files, err := r.getFiles(ctx, obj)
if err != nil {
Expand Down
12 changes: 12 additions & 0 deletions internal/api/resolver_mutation_scene.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ func (r *mutationResolver) SceneCreate(ctx context.Context, input models.SceneCr
if err != nil {
return nil, fmt.Errorf("converting date: %w", err)
}
newScene.ProductionDate, err = translator.datePtr(input.ProductionDate)
if err != nil {
return nil, fmt.Errorf("converting date: %w", err)
}
newScene.StudioID, err = translator.intPtrFromString(input.StudioID)
if err != nil {
return nil, fmt.Errorf("converting studio id: %w", err)
Expand Down Expand Up @@ -200,6 +204,10 @@ func scenePartialFromInput(input models.SceneUpdateInput, translator changesetTr
if err != nil {
return nil, fmt.Errorf("converting date: %w", err)
}
updatedScene.ProductionDate, err = translator.optionalDate(input.ProductionDate, "production_date")
if err != nil {
return nil, fmt.Errorf("converting production date: %w", err)
}
updatedScene.StudioID, err = translator.optionalIntFromString(input.StudioID, "studio_id")
if err != nil {
return nil, fmt.Errorf("converting studio id: %w", err)
Expand Down Expand Up @@ -355,6 +363,10 @@ func (r *mutationResolver) BulkSceneUpdate(ctx context.Context, input BulkSceneU
if err != nil {
return nil, fmt.Errorf("converting date: %w", err)
}
updatedScene.ProductionDate, err = translator.optionalDate(input.ProductionDate, "production_date")
if err != nil {
return nil, fmt.Errorf("converting production date: %w", err)
}
updatedScene.StudioID, err = translator.optionalIntFromString(input.StudioID, "studio_id")
if err != nil {
return nil, fmt.Errorf("converting studio id: %w", err)
Expand Down
29 changes: 15 additions & 14 deletions pkg/models/filename_parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,21 @@ type SceneParserInput struct {
}

type SceneParserResult struct {
Scene *Scene `json:"scene"`
Title *string `json:"title"`
Code *string `json:"code"`
Details *string `json:"details"`
Director *string `json:"director"`
URL *string `json:"url"`
Date *string `json:"date"`
Rating *int `json:"rating"`
Rating100 *int `json:"rating100"`
StudioID *string `json:"studio_id"`
GalleryIds []string `json:"gallery_ids"`
PerformerIds []string `json:"performer_ids"`
Movies []*SceneMovieID `json:"movies"`
TagIds []string `json:"tag_ids"`
Scene *Scene `json:"scene"`
Title *string `json:"title"`
Code *string `json:"code"`
Details *string `json:"details"`
Director *string `json:"director"`
URL *string `json:"url"`
Date *string `json:"date"`
ProductionDate *string `json:"production_date"`
Rating *int `json:"rating"`
Rating100 *int `json:"rating100"`
StudioID *string `json:"studio_id"`
GalleryIds []string `json:"gallery_ids"`
PerformerIds []string `json:"performer_ids"`
Movies []*SceneMovieID `json:"movies"`
TagIds []string `json:"tag_ids"`
}

type SceneMovieID struct {
Expand Down
9 changes: 5 additions & 4 deletions pkg/models/jsonschema/scene.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,11 @@ type Scene struct {
// deprecated - for import only
URL string `json:"url,omitempty"`

URLs []string `json:"urls,omitempty"`
Date string `json:"date,omitempty"`
Rating int `json:"rating,omitempty"`
Organized bool `json:"organized,omitempty"`
URLs []string `json:"urls,omitempty"`
Date string `json:"date,omitempty"`
ProductionDate string `json:"production_date,omitempty"`
Rating int `json:"rating,omitempty"`
Organized bool `json:"organized,omitempty"`

// deprecated - for import only
OCounter int `json:"o_counter,omitempty"`
Expand Down
62 changes: 36 additions & 26 deletions pkg/models/model_scene.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,13 @@ import (

// Scene stores the metadata for a single video scene.
type Scene struct {
ID int `json:"id"`
Title string `json:"title"`
Code string `json:"code"`
Details string `json:"details"`
Director string `json:"director"`
Date *Date `json:"date"`
ID int `json:"id"`
Title string `json:"title"`
Code string `json:"code"`
Details string `json:"details"`
Director string `json:"director"`
Date *Date `json:"date"`
ProductionDate *Date `json:"production_date"`
// Rating expressed in 1-100 scale
Rating *int `json:"rating"`
Organized bool `json:"organized"`
Expand Down Expand Up @@ -56,11 +57,12 @@ func NewScene() Scene {
// ScenePartial represents part of a Scene object. It is used to update
// the database entry.
type ScenePartial struct {
Title OptionalString
Code OptionalString
Details OptionalString
Director OptionalString
Date OptionalDate
Title OptionalString
Code OptionalString
Details OptionalString
Director OptionalString
Date OptionalDate
ProductionDate OptionalDate
// Rating expressed in 1-100 scale
Rating OptionalInt
Organized OptionalBool
Expand Down Expand Up @@ -192,27 +194,35 @@ func (s ScenePartial) UpdateInput(id int) SceneUpdateInput {
dateStr = &v
}

var productionDateStr *string
if s.ProductionDate.Set {
d := s.ProductionDate.Value
v := d.String()
productionDateStr = &v
}

var stashIDs StashIDs
if s.StashIDs != nil {
stashIDs = StashIDs(s.StashIDs.StashIDs)
}

ret := SceneUpdateInput{
ID: strconv.Itoa(id),
Title: s.Title.Ptr(),
Code: s.Code.Ptr(),
Details: s.Details.Ptr(),
Director: s.Director.Ptr(),
Urls: s.URLs.Strings(),
Date: dateStr,
Rating100: s.Rating.Ptr(),
Organized: s.Organized.Ptr(),
StudioID: s.StudioID.StringPtr(),
GalleryIds: s.GalleryIDs.IDStrings(),
PerformerIds: s.PerformerIDs.IDStrings(),
Movies: s.GroupIDs.SceneMovieInputs(),
TagIds: s.TagIDs.IDStrings(),
StashIds: stashIDs.ToStashIDInputs(),
ID: strconv.Itoa(id),
Title: s.Title.Ptr(),
Code: s.Code.Ptr(),
Details: s.Details.Ptr(),
Director: s.Director.Ptr(),
Urls: s.URLs.Strings(),
Date: dateStr,
ProductionDate: productionDateStr,
Rating100: s.Rating.Ptr(),
Organized: s.Organized.Ptr(),
StudioID: s.StudioID.StringPtr(),
GalleryIds: s.GalleryIDs.IDStrings(),
PerformerIds: s.PerformerIDs.IDStrings(),
Movies: s.GroupIDs.SceneMovieInputs(),
TagIds: s.TagIDs.IDStrings(),
StashIds: stashIDs.ToStashIDInputs(),
}

return ret
Expand Down
52 changes: 28 additions & 24 deletions pkg/models/model_scene_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,21 @@ func TestScenePartial_UpdateInput(t *testing.T) {
)

var (
title = "title"
code = "1337"
details = "details"
director = "director"
url = "url"
date = "2001-02-03"
rating100 = 80
organized = true
studioID = 2
studioIDStr = "2"
title = "title"
code = "1337"
details = "details"
director = "director"
url = "url"
date = "2001-02-03"
productionDate = "2001-01-02"
rating100 = 80
organized = true
studioID = 2
studioIDStr = "2"
)

dateObj, _ := ParseDate(date)
productionDateObj, _ := ParseDate(productionDate)

tests := []struct {
name string
Expand All @@ -44,22 +46,24 @@ func TestScenePartial_UpdateInput(t *testing.T) {
Values: []string{url},
Mode: RelationshipUpdateModeSet,
},
Date: NewOptionalDate(dateObj),
Rating: NewOptionalInt(rating100),
Organized: NewOptionalBool(organized),
StudioID: NewOptionalInt(studioID),
Date: NewOptionalDate(dateObj),
ProductionDate: NewOptionalDate(productionDateObj),
Rating: NewOptionalInt(rating100),
Organized: NewOptionalBool(organized),
StudioID: NewOptionalInt(studioID),
},
SceneUpdateInput{
ID: idStr,
Title: &title,
Code: &code,
Details: &details,
Director: &director,
Urls: []string{url},
Date: &date,
Rating100: &rating100,
Organized: &organized,
StudioID: &studioIDStr,
ID: idStr,
Title: &title,
Code: &code,
Details: &details,
Director: &director,
Urls: []string{url},
Date: &date,
ProductionDate: &productionDate,
Rating100: &rating100,
Organized: &organized,
StudioID: &studioIDStr,
},
},
{
Expand Down
32 changes: 17 additions & 15 deletions pkg/models/model_scraped_item.go
Original file line number Diff line number Diff line change
Expand Up @@ -576,13 +576,14 @@ func (g ScrapedGroup) ScrapedMovie() ScrapedMovie {
}

type ScrapedScene struct {
Title *string `json:"title"`
Code *string `json:"code"`
Details *string `json:"details"`
Director *string `json:"director"`
URL *string `json:"url"`
URLs []string `json:"urls"`
Date *string `json:"date"`
Title *string `json:"title"`
Code *string `json:"code"`
Details *string `json:"details"`
Director *string `json:"director"`
URL *string `json:"url"`
URLs []string `json:"urls"`
Date *string `json:"date"`
ProductionDate *string `json:"production_date"`
// This should be a base64 encoded data URL
Image *string `json:"image"`
File *SceneFileType `json:"file"`
Expand All @@ -599,14 +600,15 @@ type ScrapedScene struct {
func (ScrapedScene) IsScrapedContent() {}

type ScrapedSceneInput struct {
Title *string `json:"title"`
Code *string `json:"code"`
Details *string `json:"details"`
Director *string `json:"director"`
URL *string `json:"url"`
URLs []string `json:"urls"`
Date *string `json:"date"`
RemoteSiteID *string `json:"remote_site_id"`
Title *string `json:"title"`
Code *string `json:"code"`
Details *string `json:"details"`
Director *string `json:"director"`
URL *string `json:"url"`
URLs []string `json:"urls"`
Date *string `json:"date"`
ProductionDate *string `json:"production_date"`
RemoteSiteID *string `json:"remote_site_id"`
}

type ScrapedImage struct {
Expand Down
Loading