diff --git a/libraries/database/broadcasts.py b/libraries/database/broadcasts.py index 796ef80a19a8be1471e1704bfb1d4afb49ba59c3..4795c87d31e60bccf94c990f570060e8e4f779b9 100644 --- a/libraries/database/broadcasts.py +++ b/libraries/database/broadcasts.py @@ -380,6 +380,10 @@ class PlaylistEntry(DB.Model, AuraDatabaseModel): def select_playlistentry_for_playlist(artificial_playlist_id, entry_num): return DB.session.query(PlaylistEntry).filter(PlaylistEntry.artificial_playlist_id == artificial_playlist_id, PlaylistEntry.entry_num == entry_num).first() + @hybrid_property + def entry_end(self): + return self.entry_start + datetime.timedelta(seconds=self.duration) + @hybrid_property def start_unix(self): return time.mktime(self.entry_start.timetuple()) @@ -501,6 +505,7 @@ class TrackService(DB.Model, AuraDatabaseModel): # Foreign keys track_start = Column(DateTime) + track_end = Column(DateTime) artificial_schedule_id = Column(Integer, ForeignKey("schedule.id")) artificial_playlist_entry_id = Column(Integer, ForeignKey("playlist_entry.artificial_id"), nullable=True) single_entry_id = Column(Integer, ForeignKey("single_entry.id"), nullable=True) @@ -518,6 +523,8 @@ class TrackService(DB.Model, AuraDatabaseModel): Initializes a trackservice entry based on a playlist entry. """ self.track_start = datetime.datetime.now() + if entry.duration: + self.track_end = self.track_start + datetime.timedelta(seconds=entry.duration) self.fallback_type = fallback_type if fallback_type < 4: @@ -563,8 +570,11 @@ class TrackService(DB.Model, AuraDatabaseModel): """ Selects the currently playing track. """ + now = datetime.datetime.now() DB.session.commit() # Required since independend session is used. - track = DB.session.query(TrackService).filter(func.max(TrackService.id)).first() + track = DB.session.query(TrackService).\ + filter(TrackService.track_start <= str(now), TrackService.track_end > str(now)).\ + order_by(TrackService.track_start.desc()).first() return track @@ -640,6 +650,10 @@ class SingleEntry(DB.Model, AuraDatabaseModel): entry_start = Column(DateTime) + @hybrid_property + def entry_end(self): + return self.entry_start + datetime.timedelta(seconds=self.duration) + @hybrid_property def start_unix(self): return time.mktime(self.entry_start.timetuple())