emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/emms c63435fd57 2/3: * emms-mpris.el: Implement Propert


From: ELPA Syncer
Subject: [elpa] externals/emms c63435fd57 2/3: * emms-mpris.el: Implement Properties.GetAll method
Date: Tue, 24 Jan 2023 13:57:47 -0500 (EST)

branch: externals/emms
commit c63435fd5715948de67e3cb14e3ddbbde678a60f
Author: Fran Burstall <fran.burstall@gmail.com>
Commit: Fran Burstall <fran.burstall@gmail.com>

    * emms-mpris.el: Implement Properties.GetAll method
    
    Special handling needed to make sure we accurately report Position
---
 emms-mpris.el | 43 ++++++++++++++++++++++++++++---------------
 1 file changed, 28 insertions(+), 15 deletions(-)

diff --git a/emms-mpris.el b/emms-mpris.el
index 82d932669c..7dba90ee63 100644
--- a/emms-mpris.el
+++ b/emms-mpris.el
@@ -291,27 +291,40 @@ which evaluates to that value or the value itself."
 
 ;;** Properties interface
 
-;; We re-implement the "Get" method of the dbus.properties interface.
-;; For why?  Well, the default handler looks up the value of a property
-;; in a table which works fine unless we want the "Position" property
-;; of the Player interface which changes all the time (and we don't
-;; want to update the table every second!).  So we wrap the default
-;; handle to treat this special case differently.
+;; We re-implement the "Get" and "GetAll" methods of the
+;; dbus.properties interface.  For why?  Well, the default handler
+;; looks up the value of a property in a hash table which works fine
+;; unless we want the "Position" property of the Player interface
+;; which changes all the time (and we don't want to update the table
+;; every second!).  So we wrap the default handler to update the
+;; Position entry in the table before delegating to the default
+;; handler.  This is a bit of a hack in that we go rather beyond the
+;; API of dbus.el and hope that the internals do not change.
+
+(defun emms-mpris-update-position-hash-value ()
+  "Update the D-Bus hash-table.
+
+Refresh the value in the hash-table corresponding to the Position
+property of the org.mpris.MediaPlayer2.Player interface."
+  (puthash (list :property :session "org.mpris.MediaPlayer2.Player" "Position")
+          (list (list nil
+                      emms-mpris-service
+                      emms-mpris-path
+                      (list :read nil (list :variant :int64 
(emms-mpris-sec-to-musec emms-playing-time)))))
+          dbus-registered-objects-table))
 
 (defun emms-mpris-get-property-handler (&rest args)
-  "Handle Get event for property in ARGS.
+  "Handle Get and GetAll event for property in ARGS.
 
- The Position property gets special treatment."
-  (let* ((last-input-event last-input-event)
-        (prop (cadr args)))
-    (if (string-equal prop "Position")
-       (list (list :variant :int64
-                   (emms-mpris-sec-to-musec emms-playing-time)))
-      (apply #'dbus-property-handler args))))
+ The Position property gets refreshed before delegating to 
`dbus-property-handler'."
+  (let* ((last-input-event last-input-event))
+    (emms-mpris-update-position-hash-value)
+    (apply #'dbus-property-handler args)))
 
 (defvar emms-mpris-properties-iface-spec
   '("org.freedesktop.DBus.Properties"
-    (("Get" emms-mpris-get-property-handler))
+    (("Get" emms-mpris-get-property-handler)
+     ("GetAll" emms-mpris-get-property-handler))
     nil)
   "Partial Properties interface spec for dbus.")
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]