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 _do_add_playlist(self, name, uri): from xl import playlist, trax if playlist.is_valid_playlist(uri): pl = playlist.import_playlist(uri) pl.name = name else: pl = playlist.Playlist(name) tracks = trax.get_tracks_from_uri(uri) pl.extend(tracks) self.playlist_manager.save_playlist(pl) self._add_to_tree(pl)
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 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 _handle_unknown_drag_data(self, loc): """ Handles unknown drag data that has been recieved by drag_data_received. Unknown drag data is classified as any loc (location) that is not in the collection of tracks (i.e. a new song, or a new playlist) @param loc: the location of the unknown drag data @returns: a 2 tuple in which the first part is a list of tracks and the second is a list of playlist """ filetype = None info = urlparse.urlparse(loc) # don't use gio to test the filetype if it's a non-local file # (otherwise gio will try to connect to every remote url passed in and # cause the gui to hang) if info.scheme in ('file', ''): try: filetype = ( Gio.File.new_for_uri(loc) .query_info('standard::type', Gio.FileQueryInfoFlags.NONE, None) .get_file_type() ) except GLib.Error: filetype = None if trax.is_valid_track(loc) or info.scheme not in ('file', ''): new_track = trax.Track(loc) return ([new_track], []) elif xl_playlist.is_valid_playlist(loc): # User is dragging a playlist into the playlist list # so we add all of the songs in the playlist # to the list new_playlist = xl_playlist.import_playlist(loc) return ([], [new_playlist]) elif filetype == Gio.FileType.DIRECTORY: return (trax.get_tracks_from_uri(loc), []) else: # We don't know what they dropped return ([], [])
def on_response(self, dialog, response): """ Exports the playlist if requested """ self.hide() if response == gtk.RESPONSE_OK: path = unicode(self.get_uri(), 'utf-8') if not is_valid_playlist(path): path = '%s.m3u' % path options = PlaylistExportOptions( relative=self.relative_checkbox.get_active() ) try: export_playlist(self.playlist, path, options) except InvalidPlaylistTypeError, e: self.emit('message', gtk.MESSAGE_ERROR, str(e)) else: self.emit('message', gtk.MESSAGE_INFO, _('Playlist saved as <b>%s</b>.') % path)