def get_search_nonstop_zones():
return (
- [('', ''), ('any', _('Any zone')), ('', '--------------')]
+ [('', ''), ('any', _('Any zone')), ('active', _('Active zones')), ('', '--------------')]
+ get_nonstop_zones()
+ [('', '--------------'), ('none', _('None'))]
)
class RecurringStreamForm(forms.Form):
jingle = forms.ChoiceField(label=_('Jingle'), choices=get_optional_jingle_choices, required=False)
stream = forms.ChoiceField(label=_('Stream'), choices=get_stream_choices, required=True)
+
+
+class ArtistSearchForm(forms.Form):
+ q = forms.CharField(label=_('Name'), required=False)
+ zone = forms.ChoiceField(label=_('Nonstop Zone'), choices=get_search_nonstop_zones, required=False)
from .app_settings import app_settings
from .forms import (
ArtistForm,
+ ArtistSearchForm,
CleanupForm,
RecurringDeleteForm,
RecurringPlaylistAddForm,
class ArtistListView(ListView):
model = Artist
+ def get_queryset(self):
+ qs = super().get_queryset()
+ if self.request.GET.get('q'):
+ for part in self.request.GET.get('q').split():
+ part = part.strip()
+ if not part:
+ continue
+ qs = qs.filter(name__icontains=part)
+
+ zone = self.request.GET.get('zone')
+ if zone:
+ from emissions.models import Nonstop
+
+ if zone == 'none':
+ qs = qs.filter(track__nonstop_zones=None)
+ elif zone == 'any':
+ qs = qs.filter(track__nonstop_zones__isnull=False).distinct()
+ elif zone == 'active':
+ active_zones = []
+ for z in Nonstop.objects.all():
+ if z.start != z.end:
+ active_zones.append(z.id)
+ active_zones.extend([x['id'] for x in z.extra_zones.values('id')])
+ qs = qs.filter(track__nonstop_zones__in=active_zones)
+ else:
+ qs = qs.filter(track__nonstop_zones=zone)
+
+ return qs
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context['form'] = ArtistSearchForm(self.request.GET)
+ return context
+
class ArtistEditView(FormView):
form_class = ArtistForm
queryset = queryset.filter(nonstop_zones=None)
elif zone == 'any':
queryset = queryset.filter(nonstop_zones__isnull=False).distinct()
+ elif zone == 'active':
+ active_zones = []
+ for z in Nonstop.objects.all():
+ if z.start != z.end:
+ active_zones.append(z.id)
+ active_zones.extend([x['id'] for x in z.extra_zones.values('id')])
+ queryset = queryset.filter(nonstop_zones__in=active_zones)
else:
queryset = queryset.filter(nonstop_zones=zone)