From 2cef58e6c17dd11b54ac0bfc3bbc4880de7dbca8 Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Thu, 12 Apr 2018 23:02:41 +0200
Subject: [PATCH] Can now search in library tracks

---
 api/funkwhale_api/common/fields.py      | 16 ++++++++++++++++
 api/funkwhale_api/federation/filters.py |  8 ++++++++
 2 files changed, 24 insertions(+)

diff --git a/api/funkwhale_api/common/fields.py b/api/funkwhale_api/common/fields.py
index 1a18b5f27..98e971662 100644
--- a/api/funkwhale_api/common/fields.py
+++ b/api/funkwhale_api/common/fields.py
@@ -1,5 +1,9 @@
+import django_filters
+
 from django.db import models
 
+from funkwhale_api.music import utils
+
 
 PRIVACY_LEVEL_CHOICES = [
     ('me', 'Only me'),
@@ -25,3 +29,15 @@ def privacy_level_query(user, lookup_field='privacy_level'):
             'followers', 'instance', 'everyone'
         ]
     })
+
+
+class SearchFilter(django_filters.CharFilter):
+    def __init__(self, *args, **kwargs):
+        self.search_fields = kwargs.pop('search_fields')
+        super().__init__(*args, **kwargs)
+
+    def filter(self, qs, value):
+        if not value:
+            return qs
+        query = utils.get_query(value, self.search_fields)
+        return qs.filter(query)
diff --git a/api/funkwhale_api/federation/filters.py b/api/funkwhale_api/federation/filters.py
index 8166fe64d..12cab7f89 100644
--- a/api/funkwhale_api/federation/filters.py
+++ b/api/funkwhale_api/federation/filters.py
@@ -1,5 +1,7 @@
 import django_filters
 
+from funkwhale_api.common import fields
+
 from . import models
 
 
@@ -19,6 +21,12 @@ class LibraryFilter(django_filters.FilterSet):
 
 class LibraryTrackFilter(django_filters.FilterSet):
     library = django_filters.CharFilter('library__uuid')
+    q = fields.SearchFilter(search_fields=[
+        'artist_name',
+        'title',
+        'album_title',
+        'library__actor__domain',
+    ])
 
     class Meta:
         model = models.LibraryTrack
-- 
GitLab