Advertisement
Guest User

Untitled

a guest
Feb 10th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.08 KB | None | 0 0
  1. class GalleryProgram(models.Model):
  2. name = models.CharField(max_length=255, unique=True)
  3. start_time = models.DateTimeField()
  4. description = models.TextField(null=True, blank=True, default='', max_length=1024)
  5. gallery = models.ForeignKey(Gallery, limit_choices_to={'gallery_type': Gallery.TYPE_RADIO}, related_name='playlist', default=None)
  6.  
  7. class Meta:
  8. ordering = ['start_time']
  9.  
  10. def __unicode__(self):
  11. return u'%s' % (self.name)
  12.  
  13.  
  14. class GalleryPlaylist(models.Model):
  15. program = models.ForeignKey(GalleryProgram, related_name="program", default=None, null=True, blank=True)
  16. item = models.ForeignKey(GalleryItem)
  17. start_time = models.TimeField()
  18.  
  19. class Meta:
  20. ordering = ['start_time']
  21.  
  22. def __unicode__(self):
  23. return u'%s %s %s' % (self.program, self.start_time, self.item)
  24.  
  25.  
  26. class GalleryRadioManager(models.Manager):
  27. def get_queryset(self):
  28. return super(GalleryRadioManager, self).get_queryset().filter(gallery_type=Gallery.TYPE_RADIO)
  29.  
  30.  
  31. class GalleryRadio(Gallery):
  32. objects = GalleryRadioManager()
  33.  
  34. class Meta:
  35. proxy = True
  36.  
  37. def get_current_item(self):
  38. try:
  39. cur = self.playlist.filter(start_time__lte=timezone.now().time()).earliest('-start_time')
  40. except GalleryPlaylist.DoesNotExist:
  41. # if there is now item before current time, return last from the playlist
  42. cur = self.playlist.last()
  43. return cur
  44.  
  45. def get_next_item(self):
  46. next = self.playlist.filter(start_time__gt=timezone.now().time()).first()
  47. if not next:
  48. next = self.playlist.first()
  49. return next
  50.  
  51. def get_previous_item(self):
  52. cur_item = self.get_current_item()
  53. try:
  54. prev = self.playlist.filter(start_time__lt=cur_item.start_time).earliest('-start_time')
  55. except GalleryPlaylist.DoesNotExist:
  56. # if there is now item before item start_time, return last from the playlist
  57. prev = self.playlist.last()
  58.  
  59. return prev
  60.  
  61. def get_previous_items(self):
  62. cur_item = self.get_current_item()
  63. try:
  64. prev_items = self.playlist.filter(start_time__lt=cur_item.start_time)
  65. print prev_items
  66. except GalleryPlaylist.DoesNotExist:
  67. # if there is no item before item start_time, return last from the playlist
  68. prev_items = self.playlist.last()
  69.  
  70. return prev_items
  71.  
  72. def get_current_duration(self):
  73. """
  74. get time duration until next item
  75. """
  76. now = timezone.now().time()
  77. nowtd = timedelta(hours=now.hour, minutes=now.minute, seconds=now.second)
  78. next = self.get_next_item()
  79. nextd = timedelta(hours=next.start_time.hour, minutes=next.start_time.minute, seconds=next.start_time.second)
  80. return (nextd - nowtd).seconds
  81.  
  82. def to_user(self):
  83. return {
  84. 'current_item': self.get_current_item().item.to_user(),
  85. 'recently_played': [i.item.to_user() for i in self.get_previous_items()]
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement