Esempio n. 1
0
    def getNextSong(self):
        try:
            song, request = Music.next_song_and_request()
            # file is gone, delete it and move on to the next one
            fileName = song.filename
            if not os.path.exists(fileName):
                song.delete()
                return self.getNextSong()
            if request:
                request.fulfilled = True
                request.save()
            Music.objects.filter(playing=True).update(playing=False)
            song.playing = True
            song.save()
            print("Next song to play: %s" % fileName)
            self.fd = open(fileName, 'rb')
            self.file_size = os.path.getsize(fileName)
            # if there is valid ID3 data, read it out of the file first,
            # so we can skip sending it to the client
            try:
                self.id3 = id3reader.Reader(self.fd)
                if isinstance(self.id3.header.size, int) and self.id3.header.size < self.file_size: # read out the id3 data
                    self.fd.seek(self.id3.header.size + 1, os.SEEK_SET)
            except id3reader.Id3Error:
                self.id3 = None

        except StopIteration:
            fileName = None
            self.fd = None
        except IOError:
            self.fd = None