diff --git a/modules/database/model.py b/modules/database/model.py index 2c2baf61f0a5b4089109640ba6a40f827c4154b1..ec5f2adc09dfbb05e6ef695075370be27e6c7592 100644 --- a/modules/database/model.py +++ b/modules/database/model.py @@ -419,7 +419,7 @@ class PlaylistEntry(DB.Model, AuraDatabaseModel): uri = Column(String(1024)) duration = Column(BigInteger) - filename = Column(String(1024)) + source = Column(String(1024)) entry_start = Column(DateTime) queue_state = None # Assigned when entry is about to be queued channel = None # Assigned when entry is actually played @@ -510,8 +510,8 @@ class PlaylistEntry(DB.Model, AuraDatabaseModel): """ time_start = SimpleUtil.fmt_time(self.start_unix) time_end = SimpleUtil.fmt_time(self.end_unix) - track = self.filename[-25:] - return "PlaylistEntry #%s [%s - %s | %ssec | Track: ...%s]" % (str(self.artificial_id), time_start, time_end, self.duration, track) + track = self.source[-25:] + return "PlaylistEntry #%s [%s - %s | %ssec | Source: ...%s]" % (str(self.artificial_id), time_start, time_end, self.duration, track) @@ -715,7 +715,7 @@ class SingleEntry(DB.Model, AuraDatabaseModel): # Data uri = Column(String(1024)) duration = Column(BigInteger) - filename = Column(String(1024)) + source = Column(String(1024)) entry_start = Column(DateTime) @@ -771,8 +771,8 @@ class SingleEntry(DB.Model, AuraDatabaseModel): """ time_start = SimpleUtil.fmt_time(self.start_unix) time_end = SimpleUtil.fmt_time(self.end_unix) - track = self.filename[-25:] - return "SingleEntry #%s [%s - %s | %ssec | Track: ...%s]" % (str(self.id), time_start, time_end, self.duration, track) + track = self.source[-25:] + return "SingleEntry #%s [%s - %s | %ssec | Source: ...%s]" % (str(self.id), time_start, time_end, self.duration, track) @@ -895,7 +895,7 @@ class SingleEntryMetaData(DB.Model, AuraDatabaseModel): # # uri = Column(String(1024)) # - # filename = "" + # source = "" # cleansource = "" # cleanprotocol = "" # type = None diff --git a/modules/scheduling/calendar.py b/modules/scheduling/calendar.py index 1c30905975997fd9adb5afd86f389c674ad2eec3..189b86fdc1bc6b30d5ca81991201b375f23dea71 100644 --- a/modules/scheduling/calendar.py +++ b/modules/scheduling/calendar.py @@ -34,6 +34,7 @@ import logging from mutagen.flac import FLAC from datetime import datetime, timedelta +from modules.base.utils import SimpleUtil from modules.database.model import Schedule, Playlist, PlaylistEntry, PlaylistEntryMetaData from modules.communication.redis.messenger import RedisMessenger from modules.scheduling.calender_fetcher import CalendarFetcher @@ -230,13 +231,13 @@ class AuraCalendarService(threading.Thread): playlist_db.store(havetoadd, commit=True) if playlist_db.entry_count > 0: - self.store_playlist_entries(playlist_db, fetched_playlist) + self.store_playlist_entries(schedule_db, playlist_db, fetched_playlist) return playlist_db - def store_playlist_entries(self, playlist_db, fetched_playlist): + def store_playlist_entries(self, schedule_db, playlist_db, fetched_playlist): """ Stores the playlist entries to the database. """ @@ -250,19 +251,32 @@ class AuraCalendarService(threading.Thread): entry_db = PlaylistEntry() havetoadd = True - # Nano-seconds to seconds - duration = int(float(entry["file"]["duration"]) / 1000000000) - - entry_db.duration = duration entry_db.entry_start = datetime.fromtimestamp(time_marker) entry_db.artificial_playlist_id = playlist_db.artificial_id entry_db.entry_num = entry_num - entry_db.uri = entry["uri"] - entry_db.filename = entry["filename"] + + if "file" in entry and duration in entry["file"]: + # Convert nano-seconds to seconds + duration = int(float(entry["file"]["duration"]) / 1000000000) + # except Exception: + else: + # No duration means it's playing until the end of the schedule + self.logger.debug("Missing duration - setting duration of entry to end-of-schedule") + duration = SimpleUtil.timestamp(schedule_db.schedule_end) - time_marker + + entry_db.duration = duration + + if "uri" in entry: + # FIXME Refactor mix of uri/filename/file/source + entry_db.uri = entry["uri"] + entry_db.source = entry["uri"] + if "filename" in entry: + entry_db.source = entry["filename"] entry_db.store(havetoadd, commit=True) - self.store_playlist_entry_metadata(entry_db, entry["file"]["metadata"]) + if "file" in entry: + self.store_playlist_entry_metadata(entry_db, entry["file"]["metadata"]) entry_num = entry_num + 1 time_marker += duration @@ -282,7 +296,7 @@ class AuraCalendarService(threading.Thread): metadata_db.artificial_entry_id = entry_db.artificial_id if "artist" not in metadata: - self.logger.warning("Artist not found in metadata for track '%s'. Setting to ''" % entry_db.filename) + self.logger.warning("Artist not found in metadata for track '%s'. Setting to ''" % entry_db.source) metadata_db.artist = "" else: metadata_db.artist = metadata["artist"] @@ -291,7 +305,7 @@ class AuraCalendarService(threading.Thread): metadata_db.album = metadata["album"] if "artist" not in metadata: - self.logger.warning("Title not found in metadata for track '%s'. Setting to 'n/a'" % entry_db.filename) + self.logger.warning("Title not found in metadata for track '%s'. Setting to 'n/a'" % entry_db.source) metadata_db.artist = "n/a" else: metadata_db.artist = metadata["artist"] diff --git a/modules/scheduling/fallback_manager.py b/modules/scheduling/fallback_manager.py index 5000e148f13a021a1bef91caefa75328c48b424a..57c4ce32e8bd43c9cf9bd141cbb02c1c263af0b3 100644 --- a/modules/scheduling/fallback_manager.py +++ b/modules/scheduling/fallback_manager.py @@ -213,7 +213,7 @@ class FallbackManager: playlist = playlist[0] if playlist and playlist.entries: for entry in playlist.entries: - playlist_files += entry.filename + "\n" + playlist_files += entry.source + "\n" return playlist_files