[Feature] Better resolution search (#1568)

* Fix width in database test setup
* Added more filters on resolution field
* added test to verify resolution range is defined for every resolution
* Refactor UI code

Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
This commit is contained in:
Jekora
2021-08-02 05:22:39 +02:00
committed by GitHub
parent 723446842f
commit ede8cca631
11 changed files with 200 additions and 123 deletions

View File

@@ -3,7 +3,6 @@ package sqlite
import (
"database/sql"
"fmt"
"strconv"
"github.com/stashapp/stash/pkg/models"
)
@@ -426,23 +425,25 @@ func galleryPerformerTagsCriterionHandler(qb *galleryQueryBuilder, performerTags
}
}
func galleryAverageResolutionCriterionHandler(qb *galleryQueryBuilder, resolution *models.ResolutionEnum) criterionHandlerFunc {
func galleryAverageResolutionCriterionHandler(qb *galleryQueryBuilder, resolution *models.ResolutionCriterionInput) criterionHandlerFunc {
return func(f *filterBuilder) {
if resolution != nil && resolution.IsValid() {
if resolution != nil && resolution.Value.IsValid() {
qb.imagesRepository().join(f, "images_join", "galleries.id")
f.addJoin("images", "", "images_join.image_id = images.id")
min := resolution.GetMinResolution()
max := resolution.GetMaxResolution()
min := resolution.Value.GetMinResolution()
max := resolution.Value.GetMaxResolution()
const widthHeight = "avg(MIN(images.width, images.height))"
if min > 0 {
f.addHaving(widthHeight + " >= " + strconv.Itoa(min))
}
if max > 0 {
f.addHaving(widthHeight + " < " + strconv.Itoa(max))
if resolution.Modifier == models.CriterionModifierEquals {
f.addHaving(fmt.Sprintf("%s BETWEEN %d AND %d", widthHeight, min, max))
} else if resolution.Modifier == models.CriterionModifierNotEquals {
f.addHaving(fmt.Sprintf("%s NOT BETWEEN %d AND %d", widthHeight, min, max))
} else if resolution.Modifier == models.CriterionModifierLessThan {
f.addHaving(fmt.Sprintf("%s < %d", widthHeight, min))
} else if resolution.Modifier == models.CriterionModifierGreaterThan {
f.addHaving(fmt.Sprintf("%s > %d", widthHeight, max))
}
}
}