Support Is (not) null for all multi criterions (#1785)

* Support Is (not) null for all multi criterions

Add support for the Is null and Is not null modifiers for all cases of
the MultiCriterionInput and HierarchicalMultiCriterionInput. This
partially overlaps the "X Count" filter which sometimes is available
(because it would be the same as "X Count equals 0" and "X Count greater
than 0") but this also enables it for other criterions like the "Parent
Studio" filter for studios or just the "Studios" filter for scenes /
images / galleries, the "Movies" filter for scenes etc.

* Don't crash UI on bad saved filter
* Add missing code for tag parent/child

Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
This commit is contained in:
gitgiggety
2021-11-06 23:34:33 +01:00
committed by GitHub
parent e961ba4459
commit 25274e2596
18 changed files with 659 additions and 95 deletions

View File

@@ -775,7 +775,7 @@ func TestSceneQueryHasMarkers(t *testing.T) {
HasMarkers: &hasMarkers,
}
q := getSceneStringValue(sceneIdxWithMarker, titleField)
q := getSceneStringValue(sceneIdxWithMarkers, titleField)
findFilter := models.FindFilterType{
Q: &q,
}
@@ -783,7 +783,7 @@ func TestSceneQueryHasMarkers(t *testing.T) {
scenes := queryScene(t, sqb, &sceneFilter, &findFilter)
assert.Len(t, scenes, 1)
assert.Equal(t, sceneIDs[sceneIdxWithMarker], scenes[0].ID)
assert.Equal(t, sceneIDs[sceneIdxWithMarkers], scenes[0].ID)
hasMarkers = "false"
scenes = queryScene(t, sqb, &sceneFilter, &findFilter)
@@ -796,7 +796,7 @@ func TestSceneQueryHasMarkers(t *testing.T) {
// ensure non of the ids equal the one with gallery
for _, scene := range scenes {
assert.NotEqual(t, sceneIDs[sceneIdxWithMarker], scene.ID)
assert.NotEqual(t, sceneIDs[sceneIdxWithMarkers], scene.ID)
}
return nil
@@ -1151,6 +1151,29 @@ func TestSceneQueryPerformerTags(t *testing.T) {
scenes = queryScene(t, sqb, &sceneFilter, &findFilter)
assert.Len(t, scenes, 0)
tagCriterion = models.HierarchicalMultiCriterionInput{
Modifier: models.CriterionModifierIsNull,
}
q = getSceneStringValue(sceneIdx1WithPerformer, titleField)
scenes = queryScene(t, sqb, &sceneFilter, &findFilter)
assert.Len(t, scenes, 1)
assert.Equal(t, sceneIDs[sceneIdx1WithPerformer], scenes[0].ID)
q = getSceneStringValue(sceneIdxWithPerformerTag, titleField)
scenes = queryScene(t, sqb, &sceneFilter, &findFilter)
assert.Len(t, scenes, 0)
tagCriterion.Modifier = models.CriterionModifierNotNull
scenes = queryScene(t, sqb, &sceneFilter, &findFilter)
assert.Len(t, scenes, 1)
assert.Equal(t, sceneIDs[sceneIdxWithPerformerTag], scenes[0].ID)
q = getSceneStringValue(sceneIdx1WithPerformer, titleField)
scenes = queryScene(t, sqb, &sceneFilter, &findFilter)
assert.Len(t, scenes, 0)
return nil
})
}