Skip to content

Commit fa420b6

Browse files
committed
feat: mute apps on athan time
1 parent 1212229 commit fa420b6

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

prayertime.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import datetime
4242
import time
4343
import os
44+
import subprocess
4445

4546
class Prayertime(object):
4647

@@ -285,31 +286,70 @@ def calculate(self, notify_also = True):
285286
elif time == Time:
286287
self.notify(_('Prayer time for %s') % _(CurrentPrayer), _("It's time for the %s prayer.") % _(CurrentPrayer), self.options.audio_notifications, CurrentPrayer)
287288

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+
288299
def notify(self, title, message, play_audio = False, current_prayer = ''):
289300
Notify.init("Silaty")
290301
notif = Notify.Notification.new(title, message)
291302
icon = GdkPixbuf.Pixbuf.new_from_file(os.path.dirname(os.path.realpath(__file__)) + "/icons/hicolor/128x128/apps/silaty.svg")
292303
notif.set_icon_from_pixbuf(icon)
293304

294305
if play_audio:
306+
self.muteApps()
295307
if current_prayer == 'Fajr':
296308
uri = "file://" + os.path.dirname(os.path.realpath(__file__)) + "/audio/Fajr/" + self.options.fajr_adhan + ".ogg"
297309
self.fajrplayer = Gst.ElementFactory.make("playbin", "player")
298310
fakesink = Gst.ElementFactory.make("fakesink", "fakesink")
299311
self.fajrplayer.set_property('uri', uri)
300312
self.fajrplayer.set_property("video-sink", fakesink)
301313
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)
302317
else:
303318
uri = "file://" + os.path.dirname(os.path.realpath(__file__)) + "/audio/Normal/" + self.options.normal_adhan + ".ogg"
304319
self.normalplayer = Gst.ElementFactory.make("playbin", "player")
305320
fakesink = Gst.ElementFactory.make("fakesink", "fakesink")
306321
self.normalplayer.set_property('uri', uri)
307322
self.normalplayer.set_property("video-sink", fakesink)
308323
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)
309327

310328
notif.set_app_name('Silaty')
311329
notif.show()
312330

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+
313353
def closest(self, target, collection) :# Returns the closest Adhan
314354
return min((abs(target - i), i) for i in collection)[1]
315355

0 commit comments

Comments
 (0)