def _update_view_playlists(self, playlist_ids=[]): """ Update current view with playlist view @param playlist ids as [int] """ def load(): 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) return track_ids view = None if playlist_ids: view = PlaylistsView(playlist_ids) loader = Loader(target=load, view=view) loader.start() else: view = PlaylistsManageView(Type.NONE, [], [], False) view.populate() view.show() self._stack.add(view) self._stack.set_visible_child(view) self._stack.clean_old_views(view)
def _update_view_playlists(self, playlist_ids=[]): """ Update current view with playlist view @param playlist ids as [int] """ def load(): 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) return track_ids view = None if playlist_ids: view = PlaylistsView(playlist_ids) loader = Loader(target=load, view=view) loader.start() else: view = PlaylistsManageView(Type.NONE, [], [], False) view.populate() view.show() self._stack.add(view) self._stack.set_visible_child(view) self._stack.clean_old_views(view)
class PlaylistsPopover(Popover): """ Popover showing current albums @Warning: destroy it self on close """ def __init__(self): """ Init Popover """ Popover.__init__(self) self.set_position(Gtk.PositionType.BOTTOM) self.connect("map", self.__on_map) self.connect("unmap", self.__on_unmap) self.__view = PlaylistsView(App().player.playlist_ids, RowListType.DND | RowListType.POPOVER, False) self.__view.show() self.add(self.__view) def populate(self): """ Populate view """ self.__view.populate(list(App().player.playlist_tracks)) ####################### # PRIVATE # ####################### def __on_map(self, widget): """ Connect signals, populate and resize @param widget as Gtk.Widget """ self.populate() window_size = App().window.get_size() height = window_size[1] width = min(500, window_size[0]) self.set_size_request(width, height * 0.7) def __on_unmap(self, widget): """ Stop view @param widget as Gtk.Widget """ self.__view.stop() self.__view.destroy()
def _get_view_current(self): """ Get view for current playlist @return View """ if App().player.playlist_ids: from lollypop.view_playlists import PlaylistsView view = PlaylistsView(App().player.playlist_ids, RowListType.DND | RowListType.POPOVER, False) view.populate(App().player.playlist_tracks) else: from lollypop.view_current_albums import CurrentAlbumsView view = CurrentAlbumsView() view.populate(App().player.albums) view.set_margin_top(5) view.set_margin_start(5) view.set_margin_end(5) view.show() return view
def _get_view_playlists(self, playlist_ids=[]): """ Get playlists view for playlists @param playlist_ids as [int] @return View """ def load(): tracks = [] all_ids = [] for playlist_id in playlist_ids: if playlist_id == Type.LOVED: ids = App().tracks.get_loved_track_ids() else: ids = App().playlists.get_track_ids(playlist_id) for id in ids: if id in all_ids: continue all_ids.append(id) track = Track(id) tracks.append(track) return tracks def load_smart(): tracks = [] request = App().playlists.get_smart_sql(playlist_ids[0]) ids = App().db.execute(request) for id in ids: track = Track(id) # Smart playlist may report invalid tracks # An album always have an artist so check # object is valid. Others Lollypop widgets assume # objects are valid if not track.album.artist_ids: continue tracks.append(track) return tracks if App().window.is_adaptive: view_type = ViewType.DND else: view_type = ViewType.TWO_COLUMNS |\ ViewType.DND |\ ViewType.PLAYLISTS if len(playlist_ids) == 1 and\ App().playlists.get_smart(playlist_ids[0]): from lollypop.view_playlists import PlaylistsView view = PlaylistsView(playlist_ids, view_type | self._view_type) view.show() loader = Loader(target=load_smart, view=view) loader.start() elif playlist_ids: from lollypop.view_playlists import PlaylistsView view = PlaylistsView(playlist_ids, view_type | self._view_type) view.show() loader = Loader(target=load, view=view) loader.start() else: from lollypop.view_playlists_manager import PlaylistsManagerView view_type = ViewType.SCROLLED if App().window.is_adaptive: view_type |= ViewType.MEDIUM view = PlaylistsManagerView(None, view_type | self._view_type) view.populate() view.show() return view