mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 12:24:38 +03:00
restore image performer age filter (#4601)
This commit is contained in:
@@ -500,6 +500,8 @@ input ImageFilterType {
|
|||||||
performer_count: IntCriterionInput
|
performer_count: IntCriterionInput
|
||||||
"Filter images that have performers that have been favorited"
|
"Filter images that have performers that have been favorited"
|
||||||
performer_favorite: Boolean
|
performer_favorite: Boolean
|
||||||
|
"Filter images by performer age at time of image"
|
||||||
|
performer_age: IntCriterionInput
|
||||||
"Filter to only include images with these galleries"
|
"Filter to only include images with these galleries"
|
||||||
galleries: MultiCriterionInput
|
galleries: MultiCriterionInput
|
||||||
"Filter by creation time"
|
"Filter by creation time"
|
||||||
|
|||||||
@@ -47,6 +47,8 @@ type ImageFilterType struct {
|
|||||||
PerformerCount *IntCriterionInput `json:"performer_count"`
|
PerformerCount *IntCriterionInput `json:"performer_count"`
|
||||||
// Filter images that have performers that have been favorited
|
// Filter images that have performers that have been favorited
|
||||||
PerformerFavorite *bool `json:"performer_favorite"`
|
PerformerFavorite *bool `json:"performer_favorite"`
|
||||||
|
// Filter images by performer age at time of image
|
||||||
|
PerformerAge *IntCriterionInput `json:"performer_age"`
|
||||||
// Filter to only include images with these galleries
|
// Filter to only include images with these galleries
|
||||||
Galleries *MultiCriterionInput `json:"galleries"`
|
Galleries *MultiCriterionInput `json:"galleries"`
|
||||||
// Filter by created at
|
// Filter by created at
|
||||||
|
|||||||
@@ -720,6 +720,7 @@ func (qb *ImageStore) makeFilter(ctx context.Context, imageFilter *models.ImageF
|
|||||||
query.handleCriterion(ctx, studioCriterionHandler(imageTable, imageFilter.Studios))
|
query.handleCriterion(ctx, studioCriterionHandler(imageTable, imageFilter.Studios))
|
||||||
query.handleCriterion(ctx, imagePerformerTagsCriterionHandler(qb, imageFilter.PerformerTags))
|
query.handleCriterion(ctx, imagePerformerTagsCriterionHandler(qb, imageFilter.PerformerTags))
|
||||||
query.handleCriterion(ctx, imagePerformerFavoriteCriterionHandler(imageFilter.PerformerFavorite))
|
query.handleCriterion(ctx, imagePerformerFavoriteCriterionHandler(imageFilter.PerformerFavorite))
|
||||||
|
query.handleCriterion(ctx, imagePerformerAgeCriterionHandler(imageFilter.PerformerAge))
|
||||||
query.handleCriterion(ctx, timestampCriterionHandler(imageFilter.CreatedAt, "images.created_at"))
|
query.handleCriterion(ctx, timestampCriterionHandler(imageFilter.CreatedAt, "images.created_at"))
|
||||||
query.handleCriterion(ctx, timestampCriterionHandler(imageFilter.UpdatedAt, "images.updated_at"))
|
query.handleCriterion(ctx, timestampCriterionHandler(imageFilter.UpdatedAt, "images.updated_at"))
|
||||||
|
|
||||||
@@ -1025,6 +1026,22 @@ GROUP BY performers_images.image_id HAVING SUM(performers.favorite) = 0)`, "nofa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func imagePerformerAgeCriterionHandler(performerAge *models.IntCriterionInput) criterionHandlerFunc {
|
||||||
|
return func(ctx context.Context, f *filterBuilder) {
|
||||||
|
if performerAge != nil {
|
||||||
|
f.addInnerJoin("performers_images", "", "images.id = performers_images.image_id")
|
||||||
|
f.addInnerJoin("performers", "", "performers_images.performer_id = performers.id")
|
||||||
|
|
||||||
|
f.addWhere("images.date != '' AND performers.birthdate != ''")
|
||||||
|
f.addWhere("images.date IS NOT NULL AND performers.birthdate IS NOT NULL")
|
||||||
|
|
||||||
|
ageCalc := "cast(strftime('%Y.%m%d', images.date) - strftime('%Y.%m%d', performers.birthdate) as int)"
|
||||||
|
whereClause, args := getIntWhereClause(ageCalc, performerAge.Modifier, performerAge.Value, performerAge.Value2)
|
||||||
|
f.addWhere(whereClause, args...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func imagePerformerTagsCriterionHandler(qb *ImageStore, tags *models.HierarchicalMultiCriterionInput) criterionHandler {
|
func imagePerformerTagsCriterionHandler(qb *ImageStore, tags *models.HierarchicalMultiCriterionInput) criterionHandler {
|
||||||
return &joinedPerformerTagsHandler{
|
return &joinedPerformerTagsHandler{
|
||||||
criterion: tags,
|
criterion: tags,
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ const criterionOptions = [
|
|||||||
PerformerTagsCriterionOption,
|
PerformerTagsCriterionOption,
|
||||||
PerformersCriterionOption,
|
PerformersCriterionOption,
|
||||||
createMandatoryNumberCriterionOption("performer_count"),
|
createMandatoryNumberCriterionOption("performer_count"),
|
||||||
|
createMandatoryNumberCriterionOption("performer_age"),
|
||||||
PerformerFavoriteCriterionOption,
|
PerformerFavoriteCriterionOption,
|
||||||
StudiosCriterionOption,
|
StudiosCriterionOption,
|
||||||
createStringCriterionOption("url"),
|
createStringCriterionOption("url"),
|
||||||
|
|||||||
Reference in New Issue
Block a user