polybar / polybar-scripts

This is a community project. We write and collect scripts for polybar!
The Unlicense
2.46k stars 338 forks source link

player-mpris-tail.py does not print icon-none on startup. #389

Open takase1121 opened 2 years ago

takase1121 commented 2 years ago

The script doesn't display anything when no player is connected initially. --icon-none will only be displayed after at least one player has connected and disconnected, as the code responsible for it is put in removePlayer().

I currently have this workaround to make it work:

--- /usr/share/polybar/scripts/player-mpris-tail.py 2022-09-16 13:04:47.000000000 +0800
+++ player-mpris-tail.py    2022-09-17 19:48:07.365836908 +0800
@@ -30,6 +30,8 @@
         self.connected = False
         self.player_states = {}

+        _printFlush(ICON_NONE)
+
         self.refreshPlayerList()

         if self._connect:

If this is the correct way, I can PR it. If it's wrong and there's already some magical polybar way to do it, please point me to it.

x70b1 commented 2 years ago

Thats the awesome work of @Cybolic. Maybe he has an idea.

Cybolic commented 2 years ago

I need to clean up my local copy of this repo before I submit a PR, but does this solve the issue?

--- a/polybar-scripts/player-mpris-tail/player-mpris-tail.py
+++ b/polybar-scripts/player-mpris-tail/player-mpris-tail.py
@@ -138,7 +138,7 @@ class PlayerManager:
             if current_player != None:
                 _printFlush(self.player_states[current_player.bus_name])
             else:
-                _printFlush(ICON_STOPPED)
+                _printFlush(ICON_NONE)
         else:
             self.print_queue.append([status, player])
takase1121 commented 2 years ago

I need to clean up my local copy of this repo before I submit a PR, but does this solve the issue?

It does solve another kind of issue when the player stops and the stop icon is displayed instead of none, but that is not the issue I'm reporting.

My issue is that when the script starts up no players are around at all. Try disabling all mpris clients on autostart and you'll probably see what I mean. From what I can make sense from the code, glib main loop simply sits idly waiting for connections and before that nothing is printed.

takase1121 commented 2 years ago

https://user-images.githubusercontent.com/20792268/190882130-b466e5cc-e151-4fe0-ba32-be449a17fa6a.mp4

This is a demo with @Cybolic 's patch applied. As you can see, the status only starts rolling in after chromium has started playing. Before that, it's empty.