Beispiel #1
0
    def _update_models(self, track_details, action, user_slack_id):
        try:
            user_profile = UserProfile.objects.get(
                slack_username=user_slack_id)
        except UserProfile.DoesNotExist:
            return None

        try:
            track = Track.objects.get(spotify_id=track_details['uri'])
        except Track.DoesNotExist:
            track = Track()
            track.title = track_details['name']
            track.spotify_id = track_details['uri']
            track.album = track_details['album']['name']
            track.url = track_details[
                "preview_url"] if "preview_url" in track_details else ""
            track.save()

        for artist_details in track_details["artists"]:
            try:
                artist = Artist.objects.get(spotify_id=artist_details["uri"])
            except Artist.DoesNotExist:
                artist = Artist()
            artist.spotify_id = artist_details["uri"]
            artist.name = artist_details["name"]
            artist.save()

            track.artists.add(artist)
            track.save()

        try:
            playlist = Playlist.objects.get(name="Fusebox")
        except Playlist.DoesNotExist:
            playlist = Playlist()
            playlist.name = "Fusebox"
            playlist.spotify_id = os.getenv("SPOTIFY_PLAYLIST_ID")
            playlist.save()

        try:
            playlist_tracks = PlaylistTracks.objects.get(track=track,
                                                         playlist=playlist)
        except PlaylistTracks.DoesNotExist:
            playlist_tracks = PlaylistTracks()
            playlist_tracks.track = track
            playlist_tracks.playlist = playlist

        if "queue" == action:
            playlist_tracks.queued_by = user_profile.user
            playlist_tracks.queued_on = timezone.now()
        elif "dequeue" == action:
            playlist_tracks.dequeued_by = user_profile.user
            playlist_tracks.dequeued_on = timezone.now()

        playlist_tracks.save()
Beispiel #2
0
def post_geo(data):
    try:
        track = Track.objects.get(member_id=data['member'])
        Track.objects.filter(member_id=data['member']).update(
            coordinates=data['coordinates'])
        return HttpResponse(renderers.JSONRenderer().render(
            {'coordinates': data['coordinates']}))
    except Track.DoesNotExist:
        track = Track(member_id=data['member'],
                      coordinates=data['coordinates'])
        track.save()
        return HttpResponse(renderers.JSONRenderer().render(
            {'coordinates': track.coordinates}))
Beispiel #3
0
    def current_playing_track():
        client = get_spotify()
        logger = logging.getLogger(__name__)
        played = None
        try:
            track_details = client._get("me/player")
        except Exception as e:
            logger.error("Failed to retrieve details about current playing song: " + str(e))
            track_details = None

        if track_details \
                and "item" in track_details \
                and "uri" in track_details["item"] \
                and "artists" in track_details["item"]:
            try:
                track = Track.objects.get(spotify_id=track_details["item"]["uri"])
            except Track.DoesNotExist:
                track = Track()
            track.title = track_details["item"]["name"]
            track.album = track_details["item"]["album"]["name"]
            track.spotify_id = track_details["item"]["uri"]
            track.url = track_details["item"]["preview_url"]
            track.save()

            for artist_details in track_details["item"]["artists"]:
                try:
                    artist = Artist.objects.get(spotify_id=artist_details["uri"])
                except Artist.DoesNotExist:
                    artist = Artist()
                artist.spotify_id = artist_details["uri"]
                artist.name = artist_details["name"]
                artist.save()

                track.artists.add(artist)
                track.save()

            # Update played song if it has not played recently
            time_threshold = timezone.now() - timedelta(minutes=120)
            try:
                played = Played.objects.filter(track=track, on__gt=time_threshold)[:1].get()
            except Played.DoesNotExist:
                played = Played()
                played.on = timezone.now()
                played.track = track
                played.save()
        else:
            track = None

        return track, track_details, played
Beispiel #4
0
def upsert_track(path, album):
    audio = MP3(os.path.join(root, path), ID3=EasyID3)
    title = audio['title']
    artist = audio['artist']
    track_num = audio['tracknumber'][0]
    duration = audio.info.length

    t = Track(
        title=title,
        artist=artist,
        album=album,
        track_number=track_num,
        duration=duration,
    )
    try:
        t.save()
    except (django.db.utils.IntegrityError, ValueError):
        pass