-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclementine-pauser.scm
More file actions
48 lines (38 loc) · 1.46 KB
/
clementine-pauser.scm
File metadata and controls
48 lines (38 loc) · 1.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
(use dbus)
(use posix)
(use (prefix dbus dbus:))
(define screensaver-context (dbus:make-context
service: 'org.gnome.ScreenSaver
path: '/org/gnome/ScreenSaver
interface: 'org.gnome.ScreenSaver ))
(define clementine-context (dbus:make-context
service: 'org.mpris.clementine
path: '/Player
interface: 'org.freedesktop.MediaPlayer ))
(define prop-context (dbus:make-context
service: 'org.mpris.clementine
path: '/org/mpris/MediaPlayer2
interface: 'org.freedesktop.DBus.Properties ))
(define paused-by-pauser #f)
(define (clementine-playing?)
(string=? "Playing"
(variant-data
(car (dbus:call prop-context "Get" "org.mpris.MediaPlayer2.Player" "PlaybackStatus")))))
(define (control-clementine state)
(cond
[(eq? state 'play)
(if paused-by-pauser
(dbus:call clementine-context "Play"))]
[(eq? state 'pause)
(if (set! paused-by-pauser (clementine-playing?))
(dbus:call clementine-context "Pause"))]
))
(define (play-pause state)
(if state (control-clementine 'pause)
(control-clementine 'play)))
(dbus:enable-polling-thread! enable: #f)
(dbus:register-signal-handler screensaver-context 'ActiveChanged play-pause)
(let loop ()
(dbus:poll-for-message )
(sleep 1)
(loop))