refactor(mpris): replace playerctl with Gio.DBusProxy

Use raw D-Bus via Gio.DBusProxy instead of libplayerctl. All MPRIS
interactions now go through standard D-Bus property reads and method calls.

- Filter out playerctld proxy (duplicates active player)
- Validate art URLs (http/https/file only)
- Track failed cover downloads to avoid retry loops
- Remove excessive try/except around safe property reads
- Add public metadata property for consumers
- Fix consumer references to removed _player.props.metadata
This commit is contained in:
sankalp committed 2026-07-21 10:02:33 +05:45
1 parent faaa99bd24
commit 301ed9a717
3 files changed
+280 -220

No files matched your search

+2 -2
View File
@@ -509,7 +509,7 @@ class PlayerBox(Box):
def _load_initial_metadata(self):
try:
metadata = self.player._player.props.metadata
metadata = self.player.metadata
if metadata:
keys = metadata.keys()
self.track_title.set_label(
@@ -529,7 +529,7 @@ class PlayerBox(Box):
)
except Exception as e:
logger.warning(
f"[expanded_player] metadata = self.player._player.props.metadata failed: {e}"
f"[expanded_player] metadata = self.player.metadata failed: {e}"
)
def update_buttons(self, player_buttons, show_buttons):
+3 -5
View File
@@ -460,7 +460,7 @@ class PlayerBox(Box):
self.cover_path = result
try:
metadata = self.player._player.props.metadata
metadata = self.player.metadata
if metadata:
keys = metadata.keys()
self.track_title.set_label(
@@ -472,9 +472,7 @@ class PlayerBox(Box):
else "No Artist"
)
except Exception as e:
logger.warning(
f"[player] metadata = self.player._player.props.metadata failed: {e}"
)
logger.warning(f"[player] metadata = self.player.metadata failed: {e}")
def update_buttons(self, player_buttons, show_buttons):
if show_buttons and len(player_buttons) > 1:
@@ -576,7 +574,7 @@ class PlayerBox(Box):
self.play_pause_icon.dynamic_file(
"player/play.svg" if current_status == "paused" else "player/pause.svg"
)
self._on_metadata(self.player, self.player._player.props.metadata)
self._on_metadata(self.player, self.player.metadata)
self.set_image()
def _on_map(self, *_):