Example #1
0
    def insert(self, url, afterid, metadata, checked=False):
        if 'youtube' in url and not checked:
            # eclipse workaround !!!
            y = os.environ
            y.update({'PYTHONPATH': '/usr/bin/python'})  # / eclipse workaround
            d = utils.getProcessOutput(
                '/usr/bin/youtube-dl',
                ['-g', '-f', 'bestaudio', url],
                env=y,
                reactor=reactor)
            d.addCallback(
                lambda u: self.insert(
                    u.split('\n')[0], afterid, metadata, True))
            return d
#         log.err('playlist length:%s' % len(self._playlist))
        self.maxsongid += 1
        if len(self._playlist) == 0:
            self._playlist.append([self.maxsongid, url, metadata])
        else:
            if afterid == '0':
                self._playlist.insert(0, [self.maxsongid, url, metadata])
            else:
                self._playlist.insert(
                    self.playlist[self.playlist.index(int(afterid))],
                    [self.maxsongid, url, metadata])
#         log.err('real playlist: %s' % self._playlist)
        self.playlist = [i[0] for i in self._playlist]
#         log.err('new playlist: %s' % self.playlist)
#         log.err('metadata dic: %s' % metadata)
        self.oh_playlist = [str(i) for i in self.playlist]
        self.idArray = id_array(self.playlist)
        self.changed_tracks()
        if self.songid == 0:
            self.update_metadata({'songid': 1})
        return defer.succeed(self.maxsongid)
Example #2
0
    def insert(self, url, afterid, metadata, checked=False):
        if 'youtube' in url and not checked:
            # eclipse workaround !!!
            y = os.environ
            y.update({'PYTHONPATH': '/usr/bin/python'})  # / eclipse workaround
            d = utils.getProcessOutput('/usr/bin/youtube-dl',
                                       ['-g', '-f', 'bestaudio', url],
                                       env=y,
                                       reactor=reactor)
            d.addCallback(lambda u: self.insert(
                u.split('\n')[0], afterid, metadata, True))
            return d
#         log.err('playlist length:%s' % len(self._playlist))
        self.maxsongid += 1
        if len(self._playlist) == 0:
            self._playlist.append([self.maxsongid, url, metadata])
        else:
            if afterid == '0':
                self._playlist.insert(0, [self.maxsongid, url, metadata])
            else:
                self._playlist.insert(
                    self.playlist[self.playlist.index(int(afterid))],
                    [self.maxsongid, url, metadata])


#         log.err('real playlist: %s' % self._playlist)
        self.playlist = [i[0] for i in self._playlist]
        #         log.err('new playlist: %s' % self.playlist)
        #         log.err('metadata dic: %s' % metadata)
        self.oh_playlist = [str(i) for i in self.playlist]
        self.idArray = id_array(self.playlist)
        self.changed_tracks()
        if self.songid == 0:
            self.update_metadata({'songid': 1})
        return defer.succeed(self.maxsongid)
Example #3
0
 def delete(self, songid):
     #  log.err(self.playlist)
     try:
         suppressed = self.playlist.index(int(songid))
     except IndexError:
         pass
     else:
         self._playlist.pop(suppressed)
         self.playlist.pop(suppressed)
         self.idArray = id_array(self.playlist)
         self.changed_tracks()
Example #4
0
 def delete(self, songid):
     #  log.err(self.playlist)
     try:
         suppressed = self.playlist.index(int(songid))
     except IndexError:
         pass
     else:
         self._playlist.pop(suppressed)
         self.playlist.pop(suppressed)
         self.idArray = id_array(self.playlist)
         self.changed_tracks()
Example #5
0
 def delete(self, songid):
     if self.has_tracklist:
         self.mediaplayer.call(
             "RemoveTrack", dbus.types.ObjectPath(self.numid[int(songid)]), interf="org.mpris.MediaPlayer2.TrackList"
         )
     else:
         try:
             suppressed = self.playlist.index(songid)
         except IndexError:
             pass
         else:
             self._playlist.pop(suppressed)
             self.playlist.pop(suppressed)
             self.idArray = id_array(self.playlist)
             self.changed_state("TrackList", {}, "")
Example #6
0
 def delete(self, songid):
     if self.has_tracklist:
         self.mediaplayer.call('RemoveTrack',
                               dbus.types.ObjectPath(
                                   self.numid[int(songid)]),
                               interf='org.mpris.MediaPlayer2.TrackList')
     else:
         try:
             suppressed = self.playlist.index(songid)
         except IndexError:
             pass
         else:
             self._playlist.pop(suppressed)
             self.playlist.pop(suppressed)
             self.idArray = id_array(self.playlist)
             self.changed_state('TrackList', {}, '')
Example #7
0
    def insert(self, url, afterid, metadata, checked=False):

        #         def get_newid(ignored):
        #             d = self.mediaplayer.get(
        #                 'Tracks', interf='org.mpris.MediaPlayer2.TrackList')
        #             d.addCallback(got_id)
        #             return d
        #
        #         def got_id(newidlist):
        #             print(newidlist)
        #             newid = [
        #             item for item in newidlist if item not in self._playlist]
        #             try:
        #                 return newid[0]
        #             except:
        #                 print("gggg")
        #                 self.badlist.append(self.maxsongid+1)
        #                 return {'pos': self.maxsongid+1}
        #
        #         def inserted(res, md):
        #             self.maxsongid += 1
        #             if isinstance(res, dict):
        #                 meta = didl_decode(md.encode('utf-8'))
        #                 meta.update({'songid': res['pos']})
        #                 res.update({'metadata': meta})
        #             else:
        #                 self.numid.update({res: self.maxsongid})
        #             print(res)
        #             self.numid.update({self.maxsongid: res})
        #             return self.maxsongid
        if self.launching:
            d = task.deferLater(reactor, 0.5, self.insert, *(url, afterid, metadata))
            return d
        if not self.launched:
            print("*")
            self.launching = True
            threads.deferToThread(self.launch_player)
            d = task.deferLater(reactor, 0.5, self.insert, *(url, afterid, metadata))
            return d
        if "youtube" in url and not checked:
            # eclipse workaround !!!
            y = os.environ
            y.update({"PYTHONPATH": "/usr/bin/python"})  # / eclipse workaround
            d = utils.getProcessOutput("/usr/bin/youtube-dl", ["-g", "-f", "bestaudio", url], env=y, reactor=reactor)
            d.addCallback(lambda u: self.insert(u.split("\n")[0], afterid, metadata, True))
            return d
        if self.has_tracklist:
            if len(self.playlist) == 0 or int(afterid) == 0:
                self.mediaplayer.call(
                    "AddTrack",
                    url,
                    dbus.ObjectPath("/org/mpris/MediaPlayer2/TrackList/NoTrackurl"),
                    True,
                    interf="org.mpris.MediaPlayer2.TrackList",
                )
            else:
                self.mediaplayer.call(
                    "AddTrack",
                    url,
                    dbus.ObjectPath(self.numid[int(afterid)]),
                    True,
                    interf="org.mpris.MediaPlayer2.TrackList",
                )
            #             d.addCallback(get_newid)
            #             d.addCallback(inserted, metadata)
            d = task.deferLater(reactor, 0.5, lambda: self.playlist[-1])
            d.addCallback(show)
            return d
        else:
            log.err("playlist length:%s" % len(self._playlist))
            self.maxsongid += 1
            if not isinstance(metadata, dict):
                try:
                    metadata = metadata.encode("utf-8")
                except:
                    log.err("utf8 issue: %s" % metadata)
                    metadata = metadata.decode("utf-8")
                metadata = didl_decode(metadata)
            metadata.update({"songid": str(self.maxsongid)})
            if len(self._playlist) == 0:
                self._playlist.append([self.maxsongid, url, metadata])
            else:
                self._playlist.insert(self.playlist[self.playlist.index(int(afterid))], [self.maxsongid, url, metadata])
            log.err("real playlist: %s" % self._playlist)
            self.playlist = [i[0] for i in self._playlist]
            log.err("new playlist: %s" % self.playlist)
            log.err("metadata dic: %s" % metadata)
            self.oh_playlist = [str(i) for i in self.playlist]
            self.idArray = id_array(self.playlist)
            self.changed_state("TrackList", {}, "")
            if self.songid == 0:
                self.songid = 1
            return defer.succeed(self.maxsongid)
Example #8
0
 def updated(ignored):
     self.oh_eventPLAYLIST(id_array(self.playlist), "idarray")
Example #9
0
 def update_playlist(self, newpl):
     self.playlist = newpl
     self.idArray = id_array(newpl)
     self.oh_eventPLAYLIST(self.idArray, 'idarray')
Example #10
0
 def changed_tracks(self):
     self.oh_eventPLAYLIST(id_array(self.playlist), 'idarray')
Example #11
0
    def insert(self, url, afterid, metadata, checked=False):

        #         def get_newid(ignored):
        #             d = self.mediaplayer.get(
        #                 'Tracks', interf='org.mpris.MediaPlayer2.TrackList')
        #             d.addCallback(got_id)
        #             return d
        #
        #         def got_id(newidlist):
        #             print(newidlist)
        #             newid = [
        #             item for item in newidlist if item not in self._playlist]
        #             try:
        #                 return newid[0]
        #             except:
        #                 print("gggg")
        #                 self.badlist.append(self.maxsongid+1)
        #                 return {'pos': self.maxsongid+1}
        #
        #         def inserted(res, md):
        #             self.maxsongid += 1
        #             if isinstance(res, dict):
        #                 meta = didl_decode(md.encode('utf-8'))
        #                 meta.update({'songid': res['pos']})
        #                 res.update({'metadata': meta})
        #             else:
        #                 self.numid.update({res: self.maxsongid})
        #             print(res)
        #             self.numid.update({self.maxsongid: res})
        #             return self.maxsongid
        if self.launching:
            d = task.deferLater(reactor, 0.5, self.insert,
                                *(url, afterid, metadata))
            return d
        if not self.launched:
            print('*')
            self.launching = True
            threads.deferToThread(self.launch_player)
            d = task.deferLater(reactor, 0.5, self.insert,
                                *(url, afterid, metadata))
            return d
        if 'youtube' in url and not checked:
            # eclipse workaround !!!
            y = os.environ
            y.update({'PYTHONPATH': '/usr/bin/python'})  # / eclipse workaround
            d = utils.getProcessOutput('/usr/bin/youtube-dl',
                                       ['-g', '-f', 'bestaudio', url],
                                       env=y,
                                       reactor=reactor)
            d.addCallback(lambda u: self.insert(
                u.split('\n')[0], afterid, metadata, True))
            return d
        if self.has_tracklist:
            if len(self.playlist) == 0 or int(afterid) == 0:
                self.mediaplayer.call(
                    'AddTrack',
                    url,
                    dbus.ObjectPath(
                        '/org/mpris/MediaPlayer2/TrackList/NoTrackurl'),
                    True,
                    interf='org.mpris.MediaPlayer2.TrackList')
            else:
                self.mediaplayer.call(
                    'AddTrack',
                    url,
                    dbus.ObjectPath(self.numid[int(afterid)]),
                    True,
                    interf='org.mpris.MediaPlayer2.TrackList')


#             d.addCallback(get_newid)
#             d.addCallback(inserted, metadata)
            d = task.deferLater(reactor, 0.5, lambda: self.playlist[-1])
            d.addCallback(show)
            return d
        else:
            log.err('playlist length:%s' % len(self._playlist))
            self.maxsongid += 1
            if not isinstance(metadata, dict):
                try:
                    metadata = metadata.encode('utf-8')
                except:
                    log.err('utf8 issue: %s' % metadata)
                    metadata = metadata.decode('utf-8')
                metadata = didl_decode(metadata)
            metadata.update({'songid': str(self.maxsongid)})
            if len(self._playlist) == 0:
                self._playlist.append([self.maxsongid, url, metadata])
            else:
                self._playlist.insert(
                    self.playlist[self.playlist.index(int(afterid))],
                    [self.maxsongid, url, metadata])
            log.err('real playlist: %s' % self._playlist)
            self.playlist = [i[0] for i in self._playlist]
            log.err('new playlist: %s' % self.playlist)
            log.err('metadata dic: %s' % metadata)
            self.oh_playlist = [str(i) for i in self.playlist]
            self.idArray = id_array(self.playlist)
            self.changed_state('TrackList', {}, '')
            if self.songid == 0:
                self.songid = 1
            return defer.succeed(self.maxsongid)
Example #12
0
 def updated(ignored):
     self.oh_eventPLAYLIST(id_array(self.playlist), 'idarray')
Example #13
0
 def changed_tracks(self):
     self.oh_eventPLAYLIST(id_array(self.playlist), 'idarray')