def _open_uri(self, uri, play=True): """ Determines the type of a uri, imports it into a playlist, and starts playing it """ from xl import playlist, trax if playlist.is_valid_playlist(uri): pl = playlist.import_playlist(uri) self.main.add_playlist(pl) if play: self.exaile.queue.play() else: pl = self.main.get_selected_playlist() column, descending = pl.get_sort_by() tracks = trax.get_tracks_from_uri(uri) tracks = trax.sort_tracks(pl.return_order_tags(column), tracks) try: pl.playlist.add_tracks(tracks) pl.playlist.set_current_pos(len(pl.playlist) - len(tracks)) self.exaile.queue.play() # Catch empty directories except IndexError: pass
def get_selected_tracks(self): """ Returns the currently selected tracks """ selection = self.get_selection() model, paths = selection.get_selected_rows() tracks = [] for path in paths: f = model[path][0] self.append_recursive(tracks, f) return trax.sort_tracks(common.BASE_SORT_TAGS, tracks, artist_compilations=True)
def get_selected_tracks(self): """ Returns the currently selected tracks """ model, paths = self.get_selection().get_selected_rows() tracks = [] for path in paths: iter = model.get_iter(path) newset = self.container._find_tracks(iter) tracks.append(newset) tracks = list(set(reduce(lambda x, y: list(x) + list(y), tracks))) return trax.sort_tracks(common.BASE_SORT_TAGS, tracks)
def _append_cb(widget, name, parent, context, get_tracks_func, replace=False): from xlgui import main page = main.get_selected_playlist() if not page: return pl = page.playlist if replace: pl.clear() offset = len(pl) tracks = get_tracks_func(parent, context) sort_by, reverse = page.view.get_sort_by() tracks = trax.sort_tracks(sort_by, tracks, reverse=reverse, artist_compilations=True) pl.extend(tracks) if settings.get_option( 'playlist/append_menu_starts_playback', False ): if not player.PLAYER.current: page.view.play_track_at(offset, tracks[0])
def get_selected_tracks(self): """ Returns the currently selected tracks """ model, paths = self.get_selection().get_selected_rows() if len(paths) == 0: return [] tracks = set() for path in paths: iter = model.get_iter(path) newset = self.container._find_tracks(iter) tracks.update(newset) tracks = list(tracks) return trax.sort_tracks(common.BASE_SORT_TAGS, tracks)
def open_uri(self, uri, play=True): """ Determines the type of a uri, imports it into a playlist, and starts playing it """ from xl import playlist, trax if playlist.is_valid_playlist(uri): try: playlist = playlist.import_playlist(uri) except playlist.InvalidPlaylistTypeError: pass else: self.main.playlist_container.create_tab_from_playlist(playlist) if play: player.QUEUE.current_playlist = playlist player.QUEUE.current_playlist.current_position = 0 player.QUEUE.play(playlist[0]) else: page = self.main.get_selected_page() column = page.view.get_sort_column() reverse = False sort_by = common.BASE_SORT_TAGS if column: reverse = column.get_sort_order() == Gtk.SortType.DESCENDING sort_by = [column.name] + sort_by tracks = trax.get_tracks_from_uri(uri) tracks = trax.sort_tracks(sort_by, tracks, reverse=reverse) try: page.playlist.extend(tracks) page.playlist.current_position = len( page.playlist) - len(tracks) if play: player.QUEUE.current_playlist = page.playlist player.QUEUE.play(tracks[0]) # Catch empty directories except IndexError: pass
def on_append_items(self, tracks, force_play=False, queue=False, sort=False, replace=False): """ Called when a panel (or other component) has tracks to append and possibly queue :param tracks: The tracks to append :param force_play: Force playing the first track if there is no track currently playing. Otherwise check a setting to determine whether the track should be played :param queue: Additionally queue tracks :param sort: Sort before adding :param replace: Clear playlist before adding """ if len(tracks) == 0: return page = self.get_selected_page() if sort: tracks = trax.sort_tracks( ('artist', 'date', 'album', 'discnumber', 'tracknumber'), tracks) if replace: page.playlist.clear() offset = len(page.playlist) page.playlist.extend(tracks) # extending the queue automatically starts playback if queue: if player.QUEUE is not page.playlist: player.QUEUE.extend(tracks) elif (force_play or settings.get_option( 'playlist/append_menu_starts_playback', False )) and \ not player.PLAYER.current: page.view.play_track_at(offset, tracks[0])
def open_uri(self, uri, play=True): """ Determines the type of a uri, imports it into a playlist, and starts playing it """ from xl import playlist, trax if playlist.is_valid_playlist(uri): try: playlist = playlist.import_playlist(uri) except playlist.InvalidPlaylistTypeError: pass else: self.main.playlist_container.create_tab_from_playlist(playlist) if play: player.QUEUE.current_playlist = playlist player.QUEUE.current_playlist.current_position = 0 player.QUEUE.play(playlist[0]) else: page = self.main.get_selected_page() column = page.view.get_sort_column() reverse = False sort_by = common.BASE_SORT_TAGS if column: reverse = column.get_sort_order() == Gtk.SortType.DESCENDING sort_by = [column.name] + sort_by tracks = trax.get_tracks_from_uri(uri) tracks = trax.sort_tracks(sort_by, tracks, reverse=reverse) try: page.playlist.extend(tracks) page.playlist.current_position = len(page.playlist) - len(tracks) if play: player.QUEUE.current_playlist = page.playlist player.QUEUE.play(tracks[0]) # Catch empty directories except IndexError: pass
def on_append_items( self, tracks, force_play=False, queue=False, sort=False, replace=False ): """ Called when a panel (or other component) has tracks to append and possibly queue :param tracks: The tracks to append :param force_play: Force playing the first track if there is no track currently playing. Otherwise check a setting to determine whether the track should be played :param queue: Additionally queue tracks :param sort: Sort before adding :param replace: Clear playlist before adding """ if len(tracks) == 0: return page = self.get_selected_page() if sort: tracks = trax.sort_tracks(common.BASE_SORT_TAGS, tracks) if replace: page.playlist.clear() offset = len(page.playlist) page.playlist.extend(tracks) # extending the queue automatically starts playback if queue: if player.QUEUE is not page.playlist: player.QUEUE.extend(tracks) elif ( force_play or settings.get_option('playlist/append_menu_starts_playback', False) ) and not player.PLAYER.current: page.view.play_track_at(offset, tracks[0])
def resort_tracks(self): # import time # print "sorting...", time.clock() self.sorted_tracks = trax.sort_tracks(self.order.get_sort_tags(0), self.collection.get_tracks())
def resort_tracks(self): # import time # print("sorting...", time.clock()) self.sorted_tracks = trax.sort_tracks(self.order.get_sort_tags(0), self.collection.get_tracks())