From cb01e34746aa038a52c3c8492c260bc35133372b Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Tue, 17 May 2022 01:09:57 +0200 Subject: [PATCH] fix for playlist editing --- .../controllers/music/playlists.py | 2 +- .../controllers/music/providers/filesystem.py | 22 ++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/music_assistant/controllers/music/playlists.py b/music_assistant/controllers/music/playlists.py index 18aeab19..b9188544 100644 --- a/music_assistant/controllers/music/playlists.py +++ b/music_assistant/controllers/music/playlists.py @@ -110,7 +110,7 @@ class PlaylistController(MediaControllerBase[Playlist]): continue if playlist_prov.prov_type.is_file(): # the file provider can handle uri's from all providers so simply add the uri - track_id_to_add = track.uri + track_id_to_add = track_version.url break if track_version.prov_id == playlist_prov.prov_id: track_id_to_add = track_version.item_id diff --git a/music_assistant/controllers/music/providers/filesystem.py b/music_assistant/controllers/music/providers/filesystem.py index b0acff18..50822e53 100644 --- a/music_assistant/controllers/music/providers/filesystem.py +++ b/music_assistant/controllers/music/providers/filesystem.py @@ -248,17 +248,29 @@ class FileSystemProvider(MusicProvider): itempath = await self.get_filepath(prov_playlist_id) if not self.exists(itempath): raise MediaNotFoundError(f"Playlist path does not exist: {itempath}") - async with self.open_file(itempath, "a") as _file: + async with self.open_file(itempath, "r") as _file: + cur_data = await _file.read() + async with self.open_file(itempath, "w") as _file: + await _file.write(cur_data) for uri in prov_track_ids: - await _file.writeline(uri) + await _file.write(f"\n{uri}") async def remove_playlist_tracks( self, prov_playlist_id: str, prov_track_ids: List[str] ) -> None: """Remove track(s) from playlist.""" - # TODO ! - if MediaType.PLAYLIST in self.supported_mediatypes: - raise NotImplementedError + itempath = await self.get_filepath(prov_playlist_id) + if not self.exists(itempath): + raise MediaNotFoundError(f"Playlist path does not exist: {itempath}") + cur_lines = [] + async with self.open_file(itempath, "r") as _file: + for line in await _file.readlines(): + line = urllib.parse.unquote(line.strip()) + if line not in prov_track_ids: + cur_lines.append(line) + async with self.open_file(itempath, "w") as _file: + for uri in cur_lines: + await _file.write(f"{uri}\n") async def get_stream_details(self, item_id: str) -> StreamDetails: """Return the content details for the given track when it will be streamed.""" -- 2.34.1