mirror of
https://github.com/stashapp/stash.git
synced 2025-12-16 20:07:05 +03:00
restore image performer age filter (#4601)
This commit is contained in:
@@ -500,6 +500,8 @@ input ImageFilterType {
|
||||
performer_count: IntCriterionInput
|
||||
"Filter images that have performers that have been favorited"
|
||||
performer_favorite: Boolean
|
||||
"Filter images by performer age at time of image"
|
||||
performer_age: IntCriterionInput
|
||||
"Filter to only include images with these galleries"
|
||||
galleries: MultiCriterionInput
|
||||
"Filter by creation time"
|
||||
|
||||
@@ -47,6 +47,8 @@ type ImageFilterType struct {
|
||||
PerformerCount *IntCriterionInput `json:"performer_count"`
|
||||
// Filter images that have performers that have been favorited
|
||||
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
|
||||
Galleries *MultiCriterionInput `json:"galleries"`
|
||||
// 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, imagePerformerTagsCriterionHandler(qb, imageFilter.PerformerTags))
|
||||
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.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 {
|
||||
return &joinedPerformerTagsHandler{
|
||||
criterion: tags,
|
||||
|
||||
@@ -52,6 +52,7 @@ const criterionOptions = [
|
||||
PerformerTagsCriterionOption,
|
||||
PerformersCriterionOption,
|
||||
createMandatoryNumberCriterionOption("performer_count"),
|
||||
createMandatoryNumberCriterionOption("performer_age"),
|
||||
PerformerFavoriteCriterionOption,
|
||||
StudiosCriterionOption,
|
||||
createStringCriterionOption("url"),
|
||||
|
||||
Reference in New Issue
Block a user