home · contact · privacy
On deleting files, remove respective entries from playlist.
authorChristian Heller <c.heller@plomlompom.de>
Wed, 26 Feb 2025 12:49:17 +0000 (13:49 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Wed, 26 Feb 2025 12:49:17 +0000 (13:49 +0100)
src/ytplom/http.py
src/ytplom/misc.py

index 957cdab711b435a1978716a052a9bfeab6b60769..8db6e5052ae9dd1b8e597d07ee59d9ec1f90598c 100644 (file)
@@ -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')
 
index 5df2502701fc2492e832134ae7b5106d23f5601a..bbb959c8992efecdd4aab069acb7593ec8d94ea1 100644 (file)
@@ -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)