From f333fd2675af647b5d9c5e6ad63cb5d294bb8d5e Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Wed, 26 Feb 2025 13:49:17 +0100 Subject: [PATCH] On deleting files, remove respective entries from playlist. --- src/ytplom/http.py | 7 +++++-- src/ytplom/misc.py | 10 +++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/ytplom/http.py b/src/ytplom/http.py index 957cdab..8db6e50 100644 --- a/src/ytplom/http.py +++ b/src/ytplom/http.py @@ -123,6 +123,7 @@ class _TaskHandler(PlomHttpHandler): self.send_http(b'no way', code=403) with DbConn() as conn: file = VideoFile.get_one(conn, Hash.from_b64(self.path_toks[2])) + self.server.player.remove_by_digest(file.digest) file.set_flags({FILE_FLAGS[FlagName('delete')]}) file.save(conn) conn.commit() @@ -140,6 +141,7 @@ class _TaskHandler(PlomHttpHandler): file.set_flags({FILE_FLAGS[FlagName(name)] for name in self.postvars.all_for('flags')}) if self.postvars.as_dict['delete_locally']: + self.server.player.remove_by_digest(file.digest) file.unlink_locally() file.save(conn) conn.commit() @@ -164,7 +166,7 @@ class _TaskHandler(PlomHttpHandler): elif command.startswith('down_'): self.server.player.move_entry(int(command.split('_')[1]), False) elif command.startswith('rm_'): - self.server.player.remove(int(command.split('_')[1])) + self.server.player.remove_by_idx(int(command.split('_')[1])) elif command.startswith('inject_'): with DbConn() as conn: file = VideoFile.get_one( @@ -174,8 +176,9 @@ class _TaskHandler(PlomHttpHandler): def _purge_deleted_files(self) -> None: with DbConn() as conn: + for file in VideoFile.get_deleteds(conn): + self.server.player.remove_by_digest(file.digest) VideoFile.purge_deleteds(conn) - self.server.player.load_files_and_mpv() conn.commit() self.send_http(b'OK') diff --git a/src/ytplom/misc.py b/src/ytplom/misc.py index 5df2502..bbb959c 100644 --- a/src/ytplom/misc.py +++ b/src/ytplom/misc.py @@ -764,13 +764,21 @@ class Player: self.playlist[i0]) self._signal_update() - def remove(self, idx: int) -> None: + def remove_by_idx(self, idx: int) -> None: """Remove from playlist title at idx.""" if self._mpv: self._mpv.command('playlist-remove', idx) self.playlist[idx:idx + 1] = [] self._signal_update() + def remove_by_digest(self, digest: Hash) -> None: + """Remove from playlist entries to title by digest.""" + indices_to_remove: list[int] = [ + idx for idx, file in enumerate(self.playlist) + if digest == file.digest] + for idx in reversed(indices_to_remove): # reversed() so yet-to-remove + self.remove_by_idx(idx) # indices remain correct + def inject(self, file: VideoFile) -> None: """Inject file after current title.""" self.playlist.insert(self._idx + 1, file) -- 2.30.2