spradio-server-django/savepointradio/profiles/managers.py
2020-04-11 18:23:35 -04:00

61 lines
2.1 KiB
Python

from django.db import models
from django.utils import timezone
from dynamic_preferences.registries import global_preferences_registry
radio_settings = global_preferences_registry.manager()
class RequestManager(models.Manager):
def get_queryset(self):
return super().get_queryset()
def unplayed(self):
return self.get_queryset().filter(played_at__isnull=True)
def played(self):
return self.get_queryset().filter(models.Q(queued_at__isnull=False) |
models.Q(played_at__isnull=False))
def not_queued(self):
return self.get_queryset().filter(queued_at__isnull=True)
def queued(self):
return self.get_queryset().filter(queued_at__isnull=False)
def new_requests(self):
return self.get_queryset().filter(models.Q(queued_at__isnull=True) &
models.Q(played_at__isnull=True))
def get_played_requests(self, limit=None):
if limit:
return self.played()[0:limit]
return self.played()
def get_queued_requests(self, limit=None):
if limit:
return self.queued()[0:limit]
return self.queued()
def next_request(self):
return self.new_requests().earliest('created_date')
def should_play_jingle(self):
if radio_settings['jingles__jingles_enabled']:
function = radio_settings['jingles__jingles_function']
if function == 'after_songs':
limit = radio_settings['jingles__songs_per_jingle']
queued_songs = self.get_queued_requests(limit)
if not [j for j in queued_songs if j.song.is_jingle]:
return True
elif function == 'after_time':
now = timezone.now()
delta = radio_settings['jingles__time_before_jingle']
earlier = now - delta
queued_songs = self.get_queued_requests().filter(
queued_at__range=(earlier, now)
)
if not [j for j in queued_songs if j.song.is_jingle]:
return True
return False