mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 12:24:38 +03:00
Added new filters (date and title) to galleries (#1344)
* Added new filters (date and title) to galleries * Added image_count on filter for galleries
This commit is contained in:
@@ -199,6 +199,7 @@ func (qb *galleryQueryBuilder) makeQuery(galleryFilter *models.GalleryFilterType
|
|||||||
query.handleStringCriterionInput(galleryFilter.Path, "galleries.path")
|
query.handleStringCriterionInput(galleryFilter.Path, "galleries.path")
|
||||||
query.handleIntCriterionInput(galleryFilter.Rating, "galleries.rating")
|
query.handleIntCriterionInput(galleryFilter.Rating, "galleries.rating")
|
||||||
query.handleStringCriterionInput(galleryFilter.URL, "galleries.url")
|
query.handleStringCriterionInput(galleryFilter.URL, "galleries.url")
|
||||||
|
query.handleCountCriterion(galleryFilter.ImageCount, galleryTable, galleriesImagesTable, galleryIDColumn)
|
||||||
qb.handleAverageResolutionFilter(&query, galleryFilter.AverageResolution)
|
qb.handleAverageResolutionFilter(&query, galleryFilter.AverageResolution)
|
||||||
|
|
||||||
if Organized := galleryFilter.Organized; Organized != nil {
|
if Organized := galleryFilter.Organized; Organized != nil {
|
||||||
|
|||||||
@@ -712,6 +712,56 @@ func verifyGalleriesPerformerCount(t *testing.T, performerCountCriterion models.
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGalleryQueryImageCount(t *testing.T) {
|
||||||
|
const imageCount = 0
|
||||||
|
imageCountCriterion := models.IntCriterionInput{
|
||||||
|
Value: imageCount,
|
||||||
|
Modifier: models.CriterionModifierEquals,
|
||||||
|
}
|
||||||
|
|
||||||
|
verifyGalleriesImageCount(t, imageCountCriterion)
|
||||||
|
|
||||||
|
imageCountCriterion.Modifier = models.CriterionModifierNotEquals
|
||||||
|
verifyGalleriesImageCount(t, imageCountCriterion)
|
||||||
|
|
||||||
|
imageCountCriterion.Modifier = models.CriterionModifierGreaterThan
|
||||||
|
verifyGalleriesImageCount(t, imageCountCriterion)
|
||||||
|
|
||||||
|
imageCountCriterion.Modifier = models.CriterionModifierLessThan
|
||||||
|
verifyGalleriesImageCount(t, imageCountCriterion)
|
||||||
|
}
|
||||||
|
|
||||||
|
func verifyGalleriesImageCount(t *testing.T, imageCountCriterion models.IntCriterionInput) {
|
||||||
|
withTxn(func(r models.Repository) error {
|
||||||
|
sqb := r.Gallery()
|
||||||
|
galleryFilter := models.GalleryFilterType{
|
||||||
|
ImageCount: &imageCountCriterion,
|
||||||
|
}
|
||||||
|
|
||||||
|
galleries := queryGallery(t, sqb, &galleryFilter, nil)
|
||||||
|
assert.Greater(t, len(galleries), -1)
|
||||||
|
|
||||||
|
for _, gallery := range galleries {
|
||||||
|
pp := 0
|
||||||
|
|
||||||
|
_, count, err := r.Image().Query(&models.ImageFilterType{
|
||||||
|
Galleries: &models.MultiCriterionInput{
|
||||||
|
Value: []string{strconv.Itoa(gallery.ID)},
|
||||||
|
Modifier: models.CriterionModifierIncludes,
|
||||||
|
},
|
||||||
|
}, &models.FindFilterType{
|
||||||
|
PerPage: &pp,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
verifyInt(t, count, imageCountCriterion)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// TODO Count
|
// TODO Count
|
||||||
// TODO All
|
// TODO All
|
||||||
// TODO Query
|
// TODO Query
|
||||||
|
|||||||
@@ -281,11 +281,13 @@ export class ListFilterModel {
|
|||||||
case FilterMode.Galleries:
|
case FilterMode.Galleries:
|
||||||
this.sortBy = defaultSort ?? "path";
|
this.sortBy = defaultSort ?? "path";
|
||||||
this.sortByOptions = [
|
this.sortByOptions = [
|
||||||
|
"date",
|
||||||
"path",
|
"path",
|
||||||
"file_mod_time",
|
"file_mod_time",
|
||||||
"images_count",
|
"images_count",
|
||||||
"tag_count",
|
"tag_count",
|
||||||
"performer_count",
|
"performer_count",
|
||||||
|
"title",
|
||||||
"random",
|
"random",
|
||||||
];
|
];
|
||||||
this.displayModeOptions = [DisplayMode.Grid, DisplayMode.List];
|
this.displayModeOptions = [DisplayMode.Grid, DisplayMode.List];
|
||||||
@@ -301,6 +303,7 @@ export class ListFilterModel {
|
|||||||
new PerformerTagsCriterionOption(),
|
new PerformerTagsCriterionOption(),
|
||||||
new PerformersCriterionOption(),
|
new PerformersCriterionOption(),
|
||||||
ListFilterModel.createCriterionOption("performer_count"),
|
ListFilterModel.createCriterionOption("performer_count"),
|
||||||
|
ListFilterModel.createCriterionOption("image_count"),
|
||||||
new StudiosCriterionOption(),
|
new StudiosCriterionOption(),
|
||||||
ListFilterModel.createCriterionOption("url"),
|
ListFilterModel.createCriterionOption("url"),
|
||||||
];
|
];
|
||||||
@@ -463,7 +466,7 @@ export class ListFilterModel {
|
|||||||
this.itemsPerPage !== DEFAULT_PARAMS.itemsPerPage
|
this.itemsPerPage !== DEFAULT_PARAMS.itemsPerPage
|
||||||
? this.itemsPerPage
|
? this.itemsPerPage
|
||||||
: undefined,
|
: undefined,
|
||||||
sortby: this.sortBy !== "date" ? this.getSortBy() : undefined,
|
sortby: this.getSortBy() ?? undefined,
|
||||||
sortdir:
|
sortdir:
|
||||||
this.sortDirection === SortDirectionEnum.Desc ? "desc" : undefined,
|
this.sortDirection === SortDirectionEnum.Desc ? "desc" : undefined,
|
||||||
disp:
|
disp:
|
||||||
@@ -1215,6 +1218,14 @@ export class ListFilterModel {
|
|||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case "image_count": {
|
||||||
|
const countCrit = criterion as NumberCriterion;
|
||||||
|
result.image_count = {
|
||||||
|
value: countCrit.value,
|
||||||
|
modifier: countCrit.modifier,
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
case "studios": {
|
case "studios": {
|
||||||
const studCrit = criterion as StudiosCriterion;
|
const studCrit = criterion as StudiosCriterion;
|
||||||
result.studios = {
|
result.studios = {
|
||||||
|
|||||||
Reference in New Issue
Block a user