def restore(self, items): print_i("Restoring the play queue") if not items: return playlists = playlist_manager.get_playlists() for idx, item in enumerate(items): try: playlist_idx, path = item except ValueError: # Library tracks that are not part of a playlist. item = BlaTrackListItem(item) else: item = playlists[playlist_idx].get_item_from_path(path) items[idx] = item self.queue_items(items)
def get_queue(self): queue = [] playlists = playlist_manager.get_playlists() for row in self.__treeview.get_model(): item = row[0] playlist = item.playlist try: playlist_idx = playlists.index(playlist) except ValueError: item = (item.uri,) else: item = (playlist_idx, playlist.get_path_from_item(item, all_=True)) queue.append(item) return queue
def popup(treeview, event, view_id, target): from blaplaylist import playlist_manager from blaqueue import queue if view_id == blaconst.VIEW_PLAYLISTS: element = playlist_manager elif view_id == blaconst.VIEW_QUEUE: element = queue accel_group = ui_manager.get_accel_group() try: path = treeview.get_path_at_pos(*map(int, [event.x, event.y]))[0] except TypeError: menu = gtk.Menu() m = gtk.MenuItem("Paste") mod, key = gtk.accelerator_parse("<Ctrl>V") m.add_accelerator("activate", accel_group, mod, key, gtk.ACCEL_VISIBLE) m.connect("activate", element.paste) m.set_sensitive(bool(element.clipboard)) menu.append(m) if view_id == blaconst.VIEW_QUEUE: m = gtk.MenuItem("Clear queue") m.connect("activate", lambda *x: element.clear()) menu.append(m) menu.show_all() menu.popup(None, None, None, event.button, event.time) return model, paths = treeview.get_selection().get_selected_rows() item = model[path][0] menu = gtk.Menu() m = gtk.MenuItem("Play") m.connect("activate", lambda *x: target.play_item(treeview, path)) menu.append(m) menu.append(gtk.SeparatorMenuItem()) items = [ ("Cut", element.cut, "<Ctrl>X", True), ("Copy", element.copy, "<Ctrl>C", True), ("Paste", element.paste, "<Ctrl>V", bool(element.clipboard)), ("Remove", element.remove, None, True) ] for label, callback, accelerator, visibility in items: m = gtk.MenuItem(label) if accelerator: mod, key = gtk.accelerator_parse(accelerator) m.add_accelerator("activate", accel_group, mod, key, gtk.ACCEL_VISIBLE) m.connect("activate", callback) m.set_sensitive(visibility) menu.append(m) menu.append(gtk.SeparatorMenuItem()) submenu = gtk.Menu() items = [ ("All", blaconst.SELECT_ALL), ("Complement", blaconst.SELECT_COMPLEMENT), ("By artist(s)", blaconst.SELECT_BY_ARTISTS), ("By album(s)", blaconst.SELECT_BY_ALBUMS), ("By album artist(s)", blaconst.SELECT_BY_ALBUM_ARTISTS), ("By genre(s)", blaconst.SELECT_BY_GENRES) ] for label, type_ in items: m = gtk.MenuItem(label) m.connect("activate", lambda x, t=type_: element.select(t)) submenu.append(m) m = gtk.MenuItem("Select") m.set_submenu(submenu) menu.append(m) if view_id == blaconst.VIEW_PLAYLISTS: # New playlist from... submenu = gtk.Menu() items = [ ("Selection", blaconst.PLAYLIST_FROM_SELECTION), ("Selected artist(s)", blaconst.PLAYLIST_FROM_ARTISTS), ("Selected album(s)", blaconst.PLAYLIST_FROM_ALBUMS), ("Selected album artist(s)", blaconst.PLAYLIST_FROM_ALBUM_ARTISTS), ("Selected genre(s)", blaconst.PLAYLIST_FROM_GENRE) ] for label, type_ in items: m = gtk.MenuItem(label) m.connect( "activate", lambda x, t=type_: playlist_manager.new_playlist_from_type(t)) submenu.append(m) m = gtk.MenuItem("New playlist from") m.set_submenu(submenu) menu.append(m) playlists = playlist_manager.get_playlists() if len(playlists) > 1: # Move to playlist submenu = gtk.Menu() current_playlist = playlist_manager.get_current_playlist() for playlist in playlists: if playlist == current_playlist: continue m = gtk.MenuItem(playlist.get_name()) m.connect("activate", lambda x, p=playlist: target.add_selection_to_playlist(p, move=True)) submenu.append(m) m = gtk.MenuItem("Move to playlist") m.set_submenu(submenu) menu.append(m) # Add to playlist submenu = gtk.Menu() current_playlist = playlist_manager.get_current_playlist() for playlist in playlists: if playlist == current_playlist: continue m = gtk.MenuItem(playlist.get_name()) m.connect("activate", lambda x, p=playlist: target.add_selection_to_playlist(p, move=False)) submenu.append(m) m = gtk.MenuItem("Add to playlist") m.set_submenu(submenu) menu.append(m) menu.append(gtk.SeparatorMenuItem()) # Remaining options items = [ ("Add to queue", "Q", lambda *x: target.send_to_queue()), ("Remove from queue", "R", lambda *x: target.remove_from_queue(treeview)), ] for label, accel, callback in items: m = gtk.MenuItem(label) mod, key = gtk.accelerator_parse(accel) m.add_accelerator("activate", accel_group, mod, key, gtk.ACCEL_VISIBLE) m.connect("activate", callback) menu.append(m) menu.append(gtk.SeparatorMenuItem()) item = treeview.get_model()[path][0] submenu = blafm.create_popup_menu(item.track) if submenu: m = gtk.MenuItem("last.fm") m.set_submenu(submenu) menu.append(m) m = gtk.MenuItem("Open containing directory") m.connect("activate", lambda *x: blautil.open_directory(os.path.dirname(item.uri))) menu.append(m) menu.show_all() menu.popup(None, None, None, event.button, event.time)