From e94cf7af2cd9a1233a82052d46b963e98362bdd0 Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Mon, 2 Jan 2023 16:17:59 +0100 Subject: [PATCH] Albums: Implement year filter work for all types except states #353 States do not have an explicit year, so they cannot be filtered at this time. If needed, a special query for the contained pictures could be implemented later on. Select may also need changes to work with SQLite. Signed-off-by: Michael Mayer --- frontend/src/page/albums.vue | 7 ++++--- internal/form/search_albums.go | 6 +++--- internal/form/search_albums_test.go | 7 +++++-- internal/search/albums.go | 27 ++++++++++++++++++++------- internal/search/albums_test.go | 6 +++--- 5 files changed, 35 insertions(+), 18 deletions(-) diff --git a/frontend/src/page/albums.vue b/frontend/src/page/albums.vue index b37588767..d586dc71e 100644 --- a/frontend/src/page/albums.vue +++ b/frontend/src/page/albums.vue @@ -47,6 +47,7 @@ 0 && f.Year <= txt.YearMax) || f.Year == entity.UnknownYear { - s = s.Where("albums.album_year = ?", f.Year) + // Filter by year? + if txt.NotEmpty(f.Year) { + // Filter by the pictures included if it is a manually managed album, as these do not have an explicit + // year assigned to them, unlike calendar albums and moments for example. + if f.Type == entity.AlbumDefault { + s = s.Where("? OR albums.album_uid IN (SELECT DISTINCT pay.album_uid FROM photos_albums pay "+ + "JOIN photos py ON pay.photo_uid = py.photo_uid WHERE py.photo_year IN (?) AND pay.hidden = 0 AND pay.missing = 0)", + gorm.Expr(AnyInt("albums.album_year", f.Year, txt.Or, entity.UnknownYear, txt.YearMax)), strings.Split(f.Year, txt.Or)) + } else { + s = s.Where(AnyInt("albums.album_year", f.Year, txt.Or, entity.UnknownYear, txt.YearMax)) + } } - if (f.Month >= txt.MonthMin && f.Month <= txt.MonthMax) || f.Month == entity.UnknownMonth { - s = s.Where("albums.album_month = ?", f.Month) + // Filter by month? + if txt.NotEmpty(f.Month) { + s = s.Where(AnyInt("albums.album_month", f.Month, txt.Or, entity.UnknownMonth, txt.MonthMax)) } - if (f.Day >= txt.DayMin && f.Month <= txt.DayMax) || f.Day == entity.UnknownDay { - s = s.Where("albums.album_day = ?", f.Day) + // Filter by day? + if txt.NotEmpty(f.Day) { + s = s.Where(AnyInt("albums.album_day", f.Day, txt.Or, entity.UnknownDay, txt.DayMax)) } // Limit result count. diff --git a/internal/search/albums_test.go b/internal/search/albums_test.go index b27363a38..cacbe6bff 100644 --- a/internal/search/albums_test.go +++ b/internal/search/albums_test.go @@ -138,9 +138,9 @@ func TestAlbums(t *testing.T) { }) t.Run("search for year/month/day", func(t *testing.T) { f := form.SearchAlbums{ - Year: 2021, - Month: 10, - Day: 3, + Year: "2021", + Month: "10", + Day: "3", Count: 0, Offset: 0, Order: "",