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