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:
julien0221 2021-04-29 02:31:51 +01:00 committed by GitHub
parent 4d13e8d7f7
commit 502d99de1b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 63 additions and 1 deletions

View File

@ -199,6 +199,7 @@ func (qb *galleryQueryBuilder) makeQuery(galleryFilter *models.GalleryFilterType
query.handleStringCriterionInput(galleryFilter.Path, "galleries.path")
query.handleIntCriterionInput(galleryFilter.Rating, "galleries.rating")
query.handleStringCriterionInput(galleryFilter.URL, "galleries.url")
query.handleCountCriterion(galleryFilter.ImageCount, galleryTable, galleriesImagesTable, galleryIDColumn)
qb.handleAverageResolutionFilter(&query, galleryFilter.AverageResolution)
if Organized := galleryFilter.Organized; Organized != nil {

View File

@ -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 All
// TODO Query

View File

@ -281,11 +281,13 @@ export class ListFilterModel {
case FilterMode.Galleries:
this.sortBy = defaultSort ?? "path";
this.sortByOptions = [
"date",
"path",
"file_mod_time",
"images_count",
"tag_count",
"performer_count",
"title",
"random",
];
this.displayModeOptions = [DisplayMode.Grid, DisplayMode.List];
@ -301,6 +303,7 @@ export class ListFilterModel {
new PerformerTagsCriterionOption(),
new PerformersCriterionOption(),
ListFilterModel.createCriterionOption("performer_count"),
ListFilterModel.createCriterionOption("image_count"),
new StudiosCriterionOption(),
ListFilterModel.createCriterionOption("url"),
];
@ -463,7 +466,7 @@ export class ListFilterModel {
this.itemsPerPage !== DEFAULT_PARAMS.itemsPerPage
? this.itemsPerPage
: undefined,
sortby: this.sortBy !== "date" ? this.getSortBy() : undefined,
sortby: this.getSortBy() ?? undefined,
sortdir:
this.sortDirection === SortDirectionEnum.Desc ? "desc" : undefined,
disp:
@ -1215,6 +1218,14 @@ export class ListFilterModel {
};
break;
}
case "image_count": {
const countCrit = criterion as NumberCriterion;
result.image_count = {
value: countCrit.value,
modifier: countCrit.modifier,
};
break;
}
case "studios": {
const studCrit = criterion as StudiosCriterion;
result.studios = {