|
41 | 41 | import datetime
|
42 | 42 | import time
|
43 | 43 | import os
|
| 44 | +import subprocess |
44 | 45 |
|
45 | 46 | class Prayertime(object):
|
46 | 47 |
|
@@ -285,31 +286,70 @@ def calculate(self, notify_also = True):
|
285 | 286 | elif time == Time:
|
286 | 287 | self.notify(_('Prayer time for %s') % _(CurrentPrayer), _("It's time for the %s prayer.") % _(CurrentPrayer), self.options.audio_notifications, CurrentPrayer)
|
287 | 288 |
|
| 289 | + def muteApps(self, value = 'true'): |
| 290 | + try: |
| 291 | + inputs = subprocess.getoutput('pacmd list-sink-inputs | sed -n "s/^\s*index: \([[:digit:]]*\)/\\1/p"').split('\n') |
| 292 | + clients = subprocess.getoutput('pacmd list-sink-inputs | sed -n "s/^\s*client: [[:digit:]]* <\(.*\)>/\\1/p"').split('\n') |
| 293 | + for i in range(len(inputs)): |
| 294 | + if clients[i] not in ['silaty-indicator', 'ZOOM VoiceEngine']: |
| 295 | + subprocess.Popen(['pacmd', 'set-sink-input-mute', inputs[i], value]) |
| 296 | + except: |
| 297 | + print ("DEBUG: Cannot mute apps @", (str(datetime.datetime.now()))) |
| 298 | + |
288 | 299 | def notify(self, title, message, play_audio = False, current_prayer = ''):
|
289 | 300 | Notify.init("Silaty")
|
290 | 301 | notif = Notify.Notification.new(title, message)
|
291 | 302 | icon = GdkPixbuf.Pixbuf.new_from_file(os.path.dirname(os.path.realpath(__file__)) + "/icons/hicolor/128x128/apps/silaty.svg")
|
292 | 303 | notif.set_icon_from_pixbuf(icon)
|
293 | 304 |
|
294 | 305 | if play_audio:
|
| 306 | + self.muteApps() |
295 | 307 | if current_prayer == 'Fajr':
|
296 | 308 | uri = "file://" + os.path.dirname(os.path.realpath(__file__)) + "/audio/Fajr/" + self.options.fajr_adhan + ".ogg"
|
297 | 309 | self.fajrplayer = Gst.ElementFactory.make("playbin", "player")
|
298 | 310 | fakesink = Gst.ElementFactory.make("fakesink", "fakesink")
|
299 | 311 | self.fajrplayer.set_property('uri', uri)
|
300 | 312 | self.fajrplayer.set_property("video-sink", fakesink)
|
301 | 313 | self.fajrplayer.set_state(Gst.State.PLAYING)
|
| 314 | + bus = self.fajrplayer.get_bus() |
| 315 | + bus.add_signal_watch() |
| 316 | + bus.connect("message", self.on_fajrplayer_message) |
302 | 317 | else:
|
303 | 318 | uri = "file://" + os.path.dirname(os.path.realpath(__file__)) + "/audio/Normal/" + self.options.normal_adhan + ".ogg"
|
304 | 319 | self.normalplayer = Gst.ElementFactory.make("playbin", "player")
|
305 | 320 | fakesink = Gst.ElementFactory.make("fakesink", "fakesink")
|
306 | 321 | self.normalplayer.set_property('uri', uri)
|
307 | 322 | self.normalplayer.set_property("video-sink", fakesink)
|
308 | 323 | self.normalplayer.set_state(Gst.State.PLAYING)
|
| 324 | + bus = self.normalplayer.get_bus() |
| 325 | + bus.add_signal_watch() |
| 326 | + bus.connect("message", self.on_normalplayer_message) |
309 | 327 |
|
310 | 328 | notif.set_app_name('Silaty')
|
311 | 329 | notif.show()
|
312 | 330 |
|
| 331 | + def on_fajrplayer_message(self, bus, message): |
| 332 | + t = message.type |
| 333 | + if t == Gst.MessageType.EOS: # track is finished |
| 334 | + self.fajrplayer.set_state(Gst.State.NULL) |
| 335 | + self.muteApps('false') |
| 336 | + elif t == Gst.MessageType.ERROR: |
| 337 | + self.fajrplayer.set_state(Gst.State.NULL) |
| 338 | + self.muteApps('false') |
| 339 | + err, debug = message.parse_error() |
| 340 | + print ("Error: %s" % err, debug) |
| 341 | + |
| 342 | + def on_normalplayer_message(self, bus, message): |
| 343 | + t = message.type |
| 344 | + if t == Gst.MessageType.EOS: # track is finished |
| 345 | + self.normalplayer.set_state(Gst.State.NULL) |
| 346 | + self.muteApps('false') |
| 347 | + elif t == Gst.MessageType.ERROR: |
| 348 | + self.normalplayer.set_state(Gst.State.NULL) |
| 349 | + self.muteApps('false') |
| 350 | + err, debug = message.parse_error() |
| 351 | + print ("Error: %s" % err, debug) |
| 352 | + |
313 | 353 | def closest(self, target, collection) :# Returns the closest Adhan
|
314 | 354 | return min((abs(target - i), i) for i in collection)[1]
|
315 | 355 |
|
|
0 commit comments