Пример #1
0
 def restore_state(self):
     """
         Restore player state
     """
     try:
         if App().settings.get_value("save-state"):
             current_track_id = load(open(LOLLYPOP_DATA_PATH +
                                          "/track_id.bin", "rb"))
             self.set_queue(load(open(LOLLYPOP_DATA_PATH +
                                      "/queue.bin", "rb")))
             albums = load(open(LOLLYPOP_DATA_PATH + "/Albums.bin", "rb"))
             playlist_ids = load(open(LOLLYPOP_DATA_PATH +
                                      "/playlist_ids.bin", "rb"))
             (is_playing, was_party) = load(open(LOLLYPOP_DATA_PATH +
                                                 "/player.bin", "rb"))
             if playlist_ids and playlist_ids[0] == Type.RADIOS:
                 radios = Radios()
                 track = Track()
                 name = radios.get_name(current_track_id)
                 url = radios.get_url(name)
                 track.set_radio(name, url)
                 self.load(track, is_playing)
             elif App().tracks.get_uri(current_track_id) != "":
                 if albums:
                     if was_party:
                         App().lookup_action("party").change_state(
                             GLib.Variant("b", True))
                     else:
                         self._albums = load(open(
                                             LOLLYPOP_DATA_PATH +
                                             "/Albums.bin",
                                             "rb"))
                     # Load track from player albums
                     current_track = Track(current_track_id)
                     index = self.album_ids.index(current_track.album.id)
                     for track in self._albums[index].tracks:
                         if track.id == current_track_id:
                             self._load_track(track)
                             break
                 else:
                     for playlist_id in playlist_ids:
                         tracks = App().playlists.get_tracks(playlist_id)
                         App().player.populate_playlist_by_tracks(
                             tracks, playlist_ids)
                         for track in tracks:
                             if track.id == current_track_id:
                                 self._load_track(track)
                                 break
                 if is_playing:
                     self.play()
                 else:
                     self.pause()
                 position = load(open(LOLLYPOP_DATA_PATH + "/position.bin",
                                 "rb"))
                 self.seek(position / Gst.SECOND)
             else:
                 Logger.info("Player::restore_state(): track missing")
             self.emit("playlist-changed")
     except Exception as e:
         Logger.error("Player::restore_state(): %s" % e)
Пример #2
0
 def restore_state(self):
     """
         Restore player state
     """
     try:
         if Lp().settings.get_value('save-state'):
             track_id = load(open(DataPath + "/track_id.bin", "rb"))
             playlist_ids = load(open(DataPath + "/playlist_ids.bin", "rb"))
             if playlist_ids and playlist_ids[0] == Type.RADIOS:
                 radios = Radios()
                 track = Track()
                 name = radios.get_name(track_id)
                 url = radios.get_url(name)
                 track.set_radio(name, url)
                 self.load(track)
             elif Lp().tracks.get_uri(track_id) != "":
                 track = Track(track_id)
                 if Lp().notify is not None:
                     Lp().notify.inhibit()
                 self._load_track(track)
                 # We set this initial state
                 # because seek while failed otherwise
                 self.pause()
                 if playlist_ids:
                     pids = []
                     for playlist_id in playlist_ids:
                         pids.append(int(playlist_id))
                     track_ids = []
                     for playlist_id in playlist_ids:
                         if playlist_id == Type.POPULARS:
                             tracks = Lp().tracks.get_populars()
                         elif playlist_id == Type.RECENTS:
                             tracks = Lp().tracks.get_recently_listened_to()
                         elif playlist_id == Type.NEVER:
                             tracks = Lp().tracks.get_never_listened_to()
                         elif playlist_id == Type.RANDOMS:
                             tracks = Lp().tracks.get_randoms()
                         else:
                             tracks = Lp().playlists.get_track_ids(
                                 playlist_id)
                         for track_id in tracks:
                             if track_id not in track_ids:
                                 track_ids.append(track_id)
                         self.populate_user_playlist_by_tracks(
                             track_ids, pids)
                 else:
                     self._albums = load(
                         open(DataPath + "/albums.bin", "rb"))
                     self.shuffle_albums(True)
                     self._context.genre_ids = load(
                         open(DataPath + "/genre_ids.bin", "rb"))
                     self._context.artist_ids = load(
                         open(DataPath + "/artist_ids.bin", "rb"))
                 self.set_next()
                 self.set_prev()
             else:
                 print("Player::restore_state(): track missing")
     except Exception as e:
         print("Player::restore_state()", e)
Пример #3
0
 def restore_state(self):
     """
         Restore player state
     """
     if Lp().settings.get_value('save-state'):
         track_id = Lp().settings.get_value('track-id').get_int32()
         playlist_ids = Lp().settings.get_value('playlist-ids')
         if playlist_ids and playlist_ids[0] == Type.RADIOS:
             radios = Radios()
             track = Track()
             name = radios.get_name(track_id)
             url = radios.get_url(name)
             track.set_radio(name, url)
             self.load(track)
         elif Lp().tracks.get_path(track_id) != "":
             track = Track(track_id)
             self._load_track(track)
             if playlist_ids:
                 try:
                     pids = []
                     for playlist_id in playlist_ids:
                         pids.append(int(playlist_id))
                     track_ids = []
                     for playlist_id in playlist_ids:
                         if playlist_id == Type.POPULARS:
                             tracks = Lp().tracks.get_populars()
                         elif playlist_id == Type.RECENTS:
                             tracks = Lp().tracks.get_recently_listened_to()
                         elif playlist_id == Type.NEVER:
                             tracks = Lp().tracks.get_never_listened_to()
                         elif playlist_id == Type.RANDOMS:
                             tracks = Lp().tracks.get_randoms()
                         else:
                             tracks = Lp().playlists.get_tracks_ids(
                                                                playlist_id)
                         for track_id in tracks:
                             if track_id not in track_ids:
                                 track_ids.append(track_id)
                         self.populate_user_playlist_by_tracks(track_ids,
                                                               pids)
                 except:
                     pass  # User set non int in gsettings
             else:
                 self._albums = Lp().artists.get_albums(
                                                     track.album_artist_ids)
                 for album_id in self._albums:
                     self.context.genre_ids[album_id] = []
                     self.context.artist_ids[album_id] = []
             self.set_next()
             self.set_prev()
             if Lp().settings.get_value('repeat'):
                 self.context.next = NextContext.NONE
             else:
                 self.context.next = NextContext.STOP_ALL
             self.emit('current-changed')
         else:
             print("Player::restore_state(): track missing")
Пример #4
0
 def restore_state(self):
     """
         Restore player state
     """
     if Lp().settings.get_value('save-state'):
         track_id = Lp().settings.get_value('track-id').get_int32()
         playlist_ids = Lp().settings.get_value('playlist-ids')
         if playlist_ids and playlist_ids[0] == Type.RADIOS:
             radios = Radios()
             track = Track()
             name = radios.get_name(track_id)
             url = radios.get_url(name)
             track.set_radio(name, url)
             self.load(track)
         elif Lp().tracks.get_path(track_id) != "":
             track = Track(track_id)
             self._load_track(track)
             if playlist_ids:
                 try:
                     pids = []
                     for playlist_id in playlist_ids:
                         pids.append(int(playlist_id))
                     track_ids = []
                     for playlist_id in playlist_ids:
                         if playlist_id == Type.POPULARS:
                             tracks = Lp().tracks.get_populars()
                         elif playlist_id == Type.RECENTS:
                             tracks = Lp().tracks.get_recently_listened_to()
                         elif playlist_id == Type.NEVER:
                             tracks = Lp().tracks.get_never_listened_to()
                         elif playlist_id == Type.RANDOMS:
                             tracks = Lp().tracks.get_randoms()
                         else:
                             tracks = Lp().playlists.get_tracks_ids(
                                                                playlist_id)
                         for track_id in tracks:
                             if track_id not in track_ids:
                                 track_ids.append(track_id)
                         self.populate_user_playlist_by_tracks(track_ids,
                                                               pids)
                 except:
                     pass  # User set non int in gsettings
             else:
                 self._albums = Lp().artists.get_albums(
                                                     track.album_artist_ids)
                 for album_id in self._albums:
                     self.context.genre_ids[album_id] = []
                     self.context.artist_ids[album_id] = []
             self.set_next()
             self.set_prev()
             if Lp().settings.get_value('repeat'):
                 self.context.next = NextContext.NONE
             else:
                 self.context.next = NextContext.STOP_ALL
             self.emit('current-changed')
         else:
             print("Player::restore_state(): track missing")
Пример #5
0
 def set_radio_id(self, radio_id):
     """
         Set radio id
         @param radio_id as int
     """
     from lollypop.radios import Radios
     radios = Radios()
     name = radios.get_name(radio_id)
     uri = radios.get_uri(radio_id)
     self.set_radio(name, uri)
Пример #6
0
 def set_radio_id(self, radio_id):
     """
         Set radio id
         @param radio_id as int
     """
     from lollypop.radios import Radios
     radios = Radios()
     self.id = Type.RADIOS
     self._radio_id = radio_id
     self._radio_name = radios.get_name(radio_id)
     self._uri = radios.get_uri(radio_id)
Пример #7
0
 def restore_state(self):
     """
         Restore player state
     """
     try:
         if Lp().settings.get_value('save-state'):
             track_id = load(open(DataPath + "/track_id.bin", "rb"))
             playlist_ids = load(open(DataPath + "/playlist_ids.bin",
                                 "rb"))
             if playlist_ids and playlist_ids[0] == Type.RADIOS:
                 radios = Radios()
                 track = Track()
                 name = radios.get_name(track_id)
                 url = radios.get_url(name)
                 track.set_radio(name, url)
                 self.load(track)
             elif Lp().tracks.get_path(track_id) != "":
                 track = Track(track_id)
                 if Lp().notify is not None:
                     Lp().notify.inhibit()
                 self._load_track(track)
                 # We set this initial state
                 # because seek while failed otherwise
                 self.pause()
                 if playlist_ids:
                     pids = []
                     for playlist_id in playlist_ids:
                         pids.append(int(playlist_id))
                     track_ids = []
                     for playlist_id in playlist_ids:
                         if playlist_id == Type.POPULARS:
                             tracks = Lp().tracks.get_populars()
                         elif playlist_id == Type.RECENTS:
                             tracks = Lp().tracks.get_recently_listened_to()
                         elif playlist_id == Type.NEVER:
                             tracks = Lp().tracks.get_never_listened_to()
                         elif playlist_id == Type.RANDOMS:
                             tracks = Lp().tracks.get_randoms()
                         else:
                             tracks = Lp().playlists.get_track_ids(
                                                                playlist_id)
                         for track_id in tracks:
                             if track_id not in track_ids:
                                 track_ids.append(track_id)
                         self.populate_user_playlist_by_tracks(track_ids,
                                                               pids)
                 else:
                     self._albums = load(open(
                                         DataPath + "/albums.bin",
                                         "rb"))
                     self.shuffle_albums(True)
                     self._context.genre_ids = load(open(
                                         DataPath + "/genre_ids.bin",
                                         "rb"))
                     self._context.artist_ids = load(open(
                                         DataPath + "/artist_ids.bin",
                                         "rb"))
                 self.set_next()
                 self.set_prev()
                 if Lp().settings.get_value('repeat'):
                     self._context.next = NextContext.NONE
                 else:
                     self._context.next = NextContext.STOP_ALL
             else:
                 print("Player::restore_state(): track missing")
     except Exception as e:
         print("Player::restore_state()", e)
Пример #8
0
class RadiosView(FlowBoxView, ViewController):
    """
        Show radios flow box
    """
    def __init__(self):
        """
            Init view
        """
        FlowBoxView.__init__(self)
        ViewController.__init__(self, ViewControllerType.RADIO)
        self._widget_class = RadioWidget
        self.__radios = Radios()
        builder = Gtk.Builder()
        builder.add_from_resource("/org/gnome/Lollypop/RadiosView.ui")
        builder.connect_signals(self)
        self.insert_row(0)
        self.attach(builder.get_object("widget"), 0, 0, 1, 1)
        self.__pop_tunein = TuneinPopover(self.__radios)
        self.__pop_tunein.set_relative_to(builder.get_object("search_btn"))

    def populate(self, radio_ids):
        """
            Add radio widgets
            @param radio_ids as [int]
        """
        if radio_ids:
            FlowBoxView.populate(self, radio_ids)
        else:
            self._scrolled.hide()
            view = MessageView(_("No favorite radios"))
            view.show()
            self.add(view)

#######################
# PROTECTED           #
#######################

    def _add_items(self, radio_ids):
        """
            Add radios to the view
            Start lazy loading
            @param radio ids as [int]
        """
        widget = FlowBoxView._add_items(self, radio_ids, self.__radios)
        if widget is not None:
            widget.connect("overlayed", self.on_overlayed)

    def _on_new_clicked(self, widget):
        """
            Show popover for adding a new radio
            @param widget as Gtk.Widget
        """
        from lollypop.pop_radio import RadioPopover
        popover = RadioPopover(None, self.__radios)
        popover.set_relative_to(widget)
        popover.popup()

    def _on_search_clicked(self, widget):
        """
            Show popover for searching radios
            @param widget as Gtk.Widget
        """
        self.__pop_tunein.populate()
        self.__pop_tunein.show()

    def _on_artwork_changed(self, artwork, name):
        """
            Update children artwork if matching name
            @param artwork as Artwork
            @param name as str
        """
        for child in self._box.get_children():
            if name == child.name:
                child.set_artwork()

    def _on_map(self, widget):
        """
            Set active ids
        """
        self.__signal_id = self.__radios.connect("radio-changed",
                                                 self.__on_radio_changed)
        App().settings.set_value("state-one-ids",
                                 GLib.Variant("ai", [Type.RADIOS]))
        App().settings.set_value("state-two-ids", GLib.Variant("ai", []))

    def _on_unmap(self, widget):
        """
            Destroy popover
            @param widget as Gtk.Widget
        """
        if self.__signal_id is not None:
            self.__radios.disconnect(self.__signal_id)
            self.__signal_id = None
        self.__pop_tunein.destroy()

#######################
# PRIVATE             #
#######################

    def __add_radio(self, radio_id):
        """
            Add radio
            @param radio_id as int
        """
        widget = RadioWidget(radio_id, self.__radios)
        self._box.insert(widget, 0)
        widget.populate()
        widget.show()

    def __on_radio_changed(self, radios, radio_id):
        """
            Update view based on radio_id status
            @param radios as Radios
            @param radio_id as int
        """
        exists = radios.exists(radio_id)
        if exists:
            item = None
            for child in self._box.get_children():
                if child.id == radio_id:
                    item = child
                    break
            if item is None:
                self.__add_radio(radio_id)
            else:
                name = self.__radios.get_name(radio_id)
                item.rename(name)
        else:
            for child in self._box.get_children():
                if child.id == radio_id:
                    child.destroy()
Пример #9
0
class RadiosView(FlowBoxView, ViewController):
    """
        Show radios flow box
    """
    def __init__(self, view_type=ViewType.SCROLLED):
        """
            Init view
            @param view_type as ViewType
        """
        FlowBoxView.__init__(self, view_type)
        ViewController.__init__(self, ViewControllerType.RADIO)
        self._widget_class = RadioWidget
        self._empty_icon_name = get_icon_name(Type.RADIOS)
        self.__radios = Radios()
        builder = Gtk.Builder()
        builder.add_from_resource("/org/gnome/Lollypop/RadiosView.ui")
        builder.connect_signals(self)
        self.insert_row(0)
        self.attach(builder.get_object("widget"), 0, 0, 1, 1)
        self.__pop_tunein = None
        if not get_network_available("TUNEIN"):
            builder.get_object("search_btn").hide()

    def populate(self, radio_ids):
        """
            Add radio widgets
            @param radio_ids as [int]
        """
        FlowBoxView.populate(self, radio_ids)

#######################
# PROTECTED           #
#######################

    def _add_items(self, radio_ids):
        """
            Add radios to the view
            Start lazy loading
            @param radio ids as [int]
        """
        self._remove_placeholder()
        widget = FlowBoxView._add_items(self, radio_ids, self.__radios,
                                        self._view_type)
        if widget is not None:
            widget.connect("overlayed", self.on_overlayed)

    def _on_new_clicked(self, widget):
        """
            Show popover for adding a new radio
            @param widget as Gtk.Widget
        """
        from lollypop.pop_radio import RadioPopover
        popover = RadioPopover(None, self.__radios)
        popover.set_relative_to(widget)
        popover.popup()

    def _on_search_clicked(self, widget):
        """
            Show popover for searching radios
            @param widget as Gtk.Widget
        """
        if self.__pop_tunein is None:
            self.__pop_tunein = TuneinPopover(self.__radios)
            self.__pop_tunein.populate()
        self.__pop_tunein.set_relative_to(widget)
        self.__pop_tunein.popup()

    def _on_artwork_changed(self, artwork, name):
        """
            Update children artwork if matching name
            @param artwork as Artwork
            @param name as str
        """
        for child in self._box.get_children():
            if name == child.name:
                child.set_artwork()

    def _on_map(self, widget):
        """
            Set active ids
        """
        FlowBoxView._on_map(self, widget)
        if not App().settings.get_value("show-sidebar"):
            App().window.emit("show-can-go-back", True)
            App().window.emit("can-go-back-changed", True)
        self.__signal_id = self.__radios.connect("radio-changed",
                                                 self.__on_radio_changed)
        App().settings.set_value("state-one-ids",
                                 GLib.Variant("ai", [Type.RADIOS]))
        App().settings.set_value("state-two-ids", GLib.Variant("ai", []))
        App().settings.set_value("state-three-ids", GLib.Variant("ai", []))

    def _on_unmap(self, widget):
        """
            Destroy popover
            @param widget as Gtk.Widget
        """
        FlowBoxView._on_unmap(self, widget)
        if self.__signal_id is not None:
            self.__radios.disconnect(self.__signal_id)
            self.__signal_id = None
        if self.__pop_tunein is not None:
            self.__pop_tunein.destroy()
            self.__pop_tunein = None

#######################
# PRIVATE             #
#######################

    def __on_radio_changed(self, radios, radio_id):
        """
            Update view based on radio_id status
            @param radios as Radios
            @param radio_id as int
        """
        exists = radios.exists(radio_id)
        if exists:
            item = None
            for child in self._box.get_children():
                if child.id == radio_id:
                    item = child
                    break
            if item is None:
                self._add_items([radio_id])
            else:
                name = self.__radios.get_name(radio_id)
                item.rename(name)
        else:
            for child in self._box.get_children():
                if child.id == radio_id:
                    child.destroy()