diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2023-07-23 13:55:27 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2023-07-23 13:55:27 +0200 |
| commit | 1ea08e2470544e823bebb7704983eb28b5168ba8 (patch) | |
| tree | 00a2133be4bd729b12528863d8b1ba47c0b6f18d /localBackend.go | |
| parent | 6bc7063c68be760a52f621d2e3d77c89af21852b (diff) | |
| download | WRMS-1ea08e2470544e823bebb7704983eb28b5168ba8.tar.gz WRMS-1ea08e2470544e823bebb7704983eb28b5168ba8.zip | |
implement advanced local search
Diffstat (limited to 'localBackend.go')
| -rw-r--r-- | localBackend.go | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/localBackend.go b/localBackend.go index e59bf03..129be35 100644 --- a/localBackend.go +++ b/localBackend.go @@ -129,11 +129,38 @@ func (b *LocalBackend) Play(song *Song, player Player) { player.PlayUri("file://" + song.Uri) } +func genericQuery(pattern string) string { + return fmt.Sprintf("SELECT * FROM songs WHERE Title LIKE '%%%s%%' OR Artist LIKE '%%%s%%' OR Album LIKE '%%%s%%'", pattern, pattern, pattern) +} + +func advancedQuery(patterns map[string]string) string { + query := "Select * FROM songs WHERE" + query_parts := []string{} + for _, comp := range []string{"title", "album", "artist"} { + if pattern, ok := patterns[comp]; ok { + query_parts = append(query_parts, fmt.Sprintf("%s LIKE '%%%s%%'", strings.Title(comp), pattern)) + } + } + + return fmt.Sprintf("%s %s", query, strings.Join(query_parts, " OR ")) +} + func (b *LocalBackend) Search(patterns map[string]string) (results []*Song) { - pattern := strings.ToLower(patterns["pattern"]) + advanced := false + for _, comp := range []string{"title", "album", "artist"} { + if _, ok := patterns[comp]; ok { + advanced = true + break + } + } + + var query string + if advanced { + query = advancedQuery(patterns) + } else { + query = genericQuery(strings.ToLower(patterns["pattern"])) + } - query := fmt.Sprintf("SELECT * FROM songs WHERE Title LIKE '%%%s%%' OR Artist LIKE '%%%s%%'", - pattern, pattern) llog.Debug("Searching in local DB using: %q", query) rows, err := b.db.Query(query) if err != nil { |
