def refresh(self): playlists = {} encoding = sys.getfilesystemencoding() for path in glob.glob(os.path.join(self._playlists_dir, b'*.m3u*')): relpath = os.path.basename(path) uri = translator.path_to_playlist_uri(relpath) name = os.path.splitext(relpath)[0].decode(encoding, 'replace') tracks = translator.parse_m3u(path) playlists[uri] = Playlist(uri=uri, name=name, tracks=tracks) self._playlists = playlists logger.info('Loaded %d M3U playlists from %s', len(playlists), self._playlists_dir)
def _save_m3u(self, playlist, encoding=sys.getfilesystemencoding()): if playlist.name: name = self._sanitize_m3u_name(playlist.name, encoding) uri = translator.path_to_playlist_uri( name.encode(encoding) + b'.m3u') path = translator.playlist_uri_to_path(uri, self._playlists_dir) elif playlist.uri: uri = playlist.uri path = translator.playlist_uri_to_path(uri, self._playlists_dir) name, _ = os.path.splitext(os.path.basename(path).decode(encoding)) else: raise ValueError('M3U playlist needs name or URI') translator.save_m3u(path, playlist.tracks, 'latin1') # assert playlist name matches file name/uri return playlist.replace(uri=uri, name=name)
def refresh(self): playlists = {} encoding = sys.getfilesystemencoding() for path in glob.glob(os.path.join(self._playlists_dir, b'*.m3u*')): relpath = os.path.basename(path) uri = translator.path_to_playlist_uri(relpath) name = os.path.splitext(relpath)[0].decode(encoding, 'replace') tracks = translator.parse_m3u(path) playlists[uri] = Playlist(uri=uri, name=name, tracks=tracks) self._playlists = playlists logger.info( 'Loaded %d M3U playlists from %s', len(playlists), self._playlists_dir)
def _save_m3u(self, playlist, encoding=sys.getfilesystemencoding()): if playlist.name: name = self._sanitize_m3u_name(playlist.name, encoding) uri = translator.path_to_playlist_uri( name.encode(encoding) + b'.m3u') path = translator.playlist_uri_to_path(uri, self._playlists_dir) elif playlist.uri: uri = playlist.uri path = translator.playlist_uri_to_path(uri, self._playlists_dir) name, _ = os.path.splitext(os.path.basename(path).decode(encoding)) else: raise ValueError('M3U playlist needs name or URI') extended = any(track.name for track in playlist.tracks) with open(path, 'w') as file_handle: if extended: file_handle.write('#EXTM3U\n') for track in playlist.tracks: if extended and track.name: self._write_m3u_extinf(file_handle, track) file_handle.write(track.uri + '\n') # assert playlist name matches file name/uri return playlist.copy(uri=uri, name=name)