diff options
author | Volpeon <git@volpeon.ink> | 2021-02-27 18:53:24 +0100 |
---|---|---|
committer | Volpeon <git@volpeon.ink> | 2021-02-27 18:53:24 +0100 |
commit | 1ded730280cfdc8b448f3cd39b91ffd5e45cb019 (patch) | |
tree | 74df0d35f54aabe3d0e35a059f3335dc88548853 | |
parent | Cleanup (diff) | |
download | mpris-to-text-1ded730280cfdc8b448f3cd39b91ffd5e45cb019.tar.gz mpris-to-text-1ded730280cfdc8b448f3cd39b91ffd5e45cb019.tar.bz2 mpris-to-text-1ded730280cfdc8b448f3cd39b91ffd5e45cb019.zip |
Ran formatter, fixed missing output with current blessing package
-rwxr-xr-x | mpris_to_text.py | 220 |
1 files changed, 118 insertions, 102 deletions
diff --git a/mpris_to_text.py b/mpris_to_text.py index 24baabf..c5d65d8 100755 --- a/mpris_to_text.py +++ b/mpris_to_text.py | |||
@@ -1,4 +1,4 @@ | |||
1 | #!/usr/bin/python | 1 | #!/usr/bin/env python |
2 | 2 | ||
3 | import sys | 3 | import sys |
4 | import re | 4 | import re |
@@ -17,29 +17,31 @@ dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) | |||
17 | 17 | ||
18 | 18 | ||
19 | class MetaWriter: | 19 | class MetaWriter: |
20 | filename = "" | 20 | filename = "" |
21 | output_format = "" | 21 | output_format = "" |
22 | output_format_artist = "" | 22 | output_format_artist = "" |
23 | output_format_title = "" | 23 | output_format_title = "" |
24 | output_format_album = "" | 24 | output_format_album = "" |
25 | last_output = "" | 25 | last_output = "" |
26 | 26 | ||
27 | def __init__(self, filename, output_format, output_format_artist, output_format_title, output_format_album): | 27 | def __init__(self, filename, output_format, output_format_artist, output_format_title, output_format_album): |
28 | self.filename = filename | 28 | self.filename = filename |
29 | self.output_format = output_format | 29 | self.output_format = output_format |
30 | self.output_format_album = output_format_album | 30 | self.output_format_album = output_format_album |
31 | self.output_format_artist = output_format_artist | 31 | self.output_format_artist = output_format_artist |
32 | self.output_format_title = output_format_title | 32 | self.output_format_title = output_format_title |
33 | 33 | ||
34 | def write_meta(self, metadata): | 34 | def write_meta(self, metadata): |
35 | artist = metadata["xesam:artist"][0] if "xesam:artist" in metadata else "" | 35 | artist = metadata["xesam:artist"][0] if "xesam:artist" in metadata else "" |
36 | title = metadata["xesam:title"] if "xesam:title" in metadata else "" | 36 | title = metadata["xesam:title"] if "xesam:title" in metadata else "" |
37 | album = metadata["xesam:album"] if "xesam:album" in metadata else "" | 37 | album = metadata["xesam:album"] if "xesam:album" in metadata else "" |
38 | 38 | ||
39 | self.write(self.output_format.format( | 39 | self.write(self.output_format.format( |
40 | artist = self.output_format_artist.format(artist) if artist != "" else "", | 40 | artist=self.output_format_artist.format( |
41 | title = self.output_format_title.format(title) if title != "" else "", | 41 | artist) if artist != "" else "", |
42 | album = self.output_format_album.format(album) if album != "" else "" | 42 | title=self.output_format_title.format( |
43 | title) if title != "" else "", | ||
44 | album=self.output_format_album.format(album) if album != "" else "" | ||
43 | )) | 45 | )) |
44 | 46 | ||
45 | def write(self, text): | 47 | def write(self, text): |
@@ -50,43 +52,48 @@ class MetaWriter: | |||
50 | 52 | ||
51 | 53 | ||
52 | class PlayerSelector(threading.Thread): | 54 | class PlayerSelector(threading.Thread): |
53 | service_regex = re.compile("^org\.mpris\.MediaPlayer2\.") | 55 | service_regex = re.compile("^org\.mpris\.MediaPlayer2\.") |
54 | bus = None | 56 | bus = None |
55 | loop = None | 57 | loop = None |
56 | signal_receiver = None | 58 | signal_receiver = None |
57 | players = {} | 59 | players = {} |
58 | players_indexes = [] | 60 | players_indexes = [] |
59 | active_player = "" | 61 | active_player = "" |
60 | menu = None | 62 | menu = None |
61 | meta_writer = None | 63 | meta_writer = None |
62 | 64 | ||
63 | def __init__(self, meta_writer, menu=None): | 65 | def __init__(self, meta_writer, menu=None): |
64 | super().__init__() | 66 | super().__init__() |
65 | 67 | ||
66 | self.bus = dbus.SessionBus() | 68 | self.bus = dbus.SessionBus() |
67 | self.meta_writer = meta_writer | 69 | self.meta_writer = meta_writer |
68 | self.menu = menu | 70 | self.menu = menu |
69 | 71 | ||
70 | def set_menu(self, menu): | 72 | def set_menu(self, menu): |
71 | self.menu = menu | 73 | self.menu = menu |
72 | 74 | ||
73 | def get_players(self): | 75 | def get_players(self): |
74 | self.players = {} | 76 | self.players = {} |
75 | self.players_indexes = [] | 77 | self.players_indexes = [] |
76 | 78 | ||
77 | bus_path = self.bus.get_object("org.freedesktop.DBus", "/org/freedesktop/DBus") | 79 | bus_path = self.bus.get_object( |
80 | "org.freedesktop.DBus", "/org/freedesktop/DBus") | ||
78 | bus_proxy = dbus.Interface(bus_path, "org.freedesktop.DBus") | 81 | bus_proxy = dbus.Interface(bus_path, "org.freedesktop.DBus") |
79 | 82 | ||
80 | for service in bus_proxy.ListNames(): | 83 | for service in bus_proxy.ListNames(): |
81 | if self.service_regex.match(service): | 84 | if self.service_regex.match(service): |
82 | split_service = service.split(".") | 85 | split_service = service.split(".") |
83 | name_start_index = len(split_service[0]) + len(split_service[1]) + len(split_service[2]) + 3 | 86 | name_start_index = len( |
84 | 87 | split_service[0]) + len(split_service[1]) + len(split_service[2]) + 3 | |
85 | player_path = self.bus.get_object(service, "/org/mpris/MediaPlayer2") | 88 | |
86 | player_props = dbus.Interface(player_path, "org.freedesktop.DBus.Properties") | 89 | player_path = self.bus.get_object( |
87 | player_name = service[name_start_index:] | 90 | service, "/org/mpris/MediaPlayer2") |
91 | player_props = dbus.Interface( | ||
92 | player_path, "org.freedesktop.DBus.Properties") | ||
93 | player_name = service[name_start_index:] | ||
88 | try: | 94 | try: |
89 | player_name = player_props.Get("org.mpris.MediaPlayer2.Player", "Identity") | 95 | player_name = player_props.Get( |
96 | "org.mpris.MediaPlayer2.Player", "Identity") | ||
90 | except dbus.exceptions.DBusException: | 97 | except dbus.exceptions.DBusException: |
91 | pass | 98 | pass |
92 | 99 | ||
@@ -112,35 +119,39 @@ class PlayerSelector(threading.Thread): | |||
112 | 119 | ||
113 | if self.active_player != "": | 120 | if self.active_player != "": |
114 | self.signal_receiver = self.bus.add_signal_receiver( | 121 | self.signal_receiver = self.bus.add_signal_receiver( |
115 | handler_function = self.playing_song_changed, | 122 | handler_function=self.playing_song_changed, |
116 | bus_name = self.active_player, | 123 | bus_name=self.active_player, |
117 | dbus_interface = "org.freedesktop.DBus.Properties", | 124 | dbus_interface="org.freedesktop.DBus.Properties", |
118 | signal_name = "PropertiesChanged", | 125 | signal_name="PropertiesChanged", |
119 | path = "/org/mpris/MediaPlayer2" | 126 | path="/org/mpris/MediaPlayer2" |
120 | ) | 127 | ) |
121 | 128 | ||
122 | player_path = self.bus.get_object(self.active_player, "/org/mpris/MediaPlayer2") | 129 | player_path = self.bus.get_object( |
123 | player_props = dbus.Interface(player_path, "org.freedesktop.DBus.Properties") | 130 | self.active_player, "/org/mpris/MediaPlayer2") |
131 | player_props = dbus.Interface( | ||
132 | player_path, "org.freedesktop.DBus.Properties") | ||
124 | 133 | ||
125 | self.meta_writer.write_meta(player_props.Get("org.mpris.MediaPlayer2.Player", "Metadata")) | 134 | self.meta_writer.write_meta(player_props.Get( |
135 | "org.mpris.MediaPlayer2.Player", "Metadata")) | ||
126 | else: | 136 | else: |
127 | self.meta_writer.write("") | 137 | self.meta_writer.write("") |
128 | 138 | ||
129 | |||
130 | def run(self): | 139 | def run(self): |
131 | bus_path = self.bus.get_object("org.freedesktop.DBus", "/org/freedesktop/DBus") | 140 | bus_path = self.bus.get_object( |
141 | "org.freedesktop.DBus", "/org/freedesktop/DBus") | ||
132 | bus_proxy = dbus.Interface(bus_path, "org.freedesktop.DBus") | 142 | bus_proxy = dbus.Interface(bus_path, "org.freedesktop.DBus") |
133 | bus_proxy.connect_to_signal("NameOwnerChanged", self.dbus_name_owner_changed) | 143 | bus_proxy.connect_to_signal( |
144 | "NameOwnerChanged", self.dbus_name_owner_changed) | ||
134 | 145 | ||
135 | self.get_players() | 146 | self.get_players() |
136 | self.menu.refresh() | 147 | self.menu.refresh() |
137 | 148 | ||
138 | self.loop = GLib.MainLoop() | 149 | self.loop = GLib.MainLoop() |
139 | self.loop.run() | 150 | self.loop.run() |
140 | 151 | ||
141 | def quit(self): | 152 | def quit(self): |
142 | self.loop.quit() | 153 | self.loop.quit() |
143 | 154 | ||
144 | def dbus_name_owner_changed(self, name, old_owner, new_owner): | 155 | def dbus_name_owner_changed(self, name, old_owner, new_owner): |
145 | if self.service_regex.match(name): | 156 | if self.service_regex.match(name): |
146 | self.get_players() | 157 | self.get_players() |
@@ -153,36 +164,38 @@ class PlayerSelector(threading.Thread): | |||
153 | 164 | ||
154 | 165 | ||
155 | class Menu(threading.Thread): | 166 | class Menu(threading.Thread): |
156 | refresh_cond = threading.Condition() | 167 | refresh_cond = threading.Condition() |
157 | refresh_flag = True | 168 | refresh_flag = True |
158 | exit_flag = False | 169 | exit_flag = False |
159 | player_selector = None | 170 | player_selector = None |
160 | meta_writer = None | 171 | meta_writer = None |
161 | 172 | ||
162 | def __init__(self, term, player_selector, meta_writer): | 173 | def __init__(self, term, player_selector, meta_writer): |
163 | super().__init__() | 174 | super().__init__() |
164 | 175 | ||
165 | self.player_selector = player_selector | 176 | self.player_selector = player_selector |
166 | self.meta_writer = meta_writer | 177 | self.meta_writer = meta_writer |
167 | 178 | ||
168 | def refresh(self, exit_flag=False): | 179 | def refresh(self, exit_flag=False): |
169 | with self.refresh_cond: | 180 | with self.refresh_cond: |
170 | self.refresh_flag = True | 181 | self.refresh_flag = True |
171 | self.exit_flag = self.exit_flag or exit_flag | 182 | self.exit_flag = self.exit_flag or exit_flag |
172 | self.refresh_cond.notify() | 183 | self.refresh_cond.notify() |
173 | 184 | ||
174 | def run(self): | 185 | def run(self): |
175 | while not self.exit_flag: | 186 | with term.fullscreen(): |
176 | with self.refresh_cond: | 187 | while not self.exit_flag: |
177 | while not self.refresh_flag and not self.exit_flag: | 188 | with self.refresh_cond: |
178 | self.refresh_cond.wait() | 189 | while not self.refresh_flag and not self.exit_flag: |
190 | self.refresh_cond.wait() | ||
179 | 191 | ||
180 | self.refresh_flag = False | 192 | self.refresh_flag = False |
181 | 193 | ||
182 | with term.fullscreen(): | 194 | print(term.clear) |
183 | print(term.move(0, 0) + term.bold_bright_white_on_bright_black(("{0:<{width}}").format("MPRIS To Text", width=term.width)) + "\n") | 195 | print(term.move_xy(0, 0) + term.bold_bright_white_on_bright_black( |
196 | ("{0:<{width}}").format("MPRIS To Text", width=term.width)) + "\n") | ||
184 | print(term.move_x(2) + term.bold("Player: ") + term.move_up()) | 197 | print(term.move_x(2) + term.bold("Player: ") + term.move_up()) |