annotate lisp/net/dbus.el @ 97096:f6c2152908e2

* Makefile.in (ELCFILES): Add mairix.elc.
author Chong Yidong <cyd@stupidchicken.com>
date Tue, 29 Jul 2008 17:47:02 +0000
parents 282e0881421e
children 125ed717ddbb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1 ;;; dbus.el --- Elisp bindings for D-Bus.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2
87537
84ece2f8e012 * net/dbus.el (dbus-name-owner-changed-handler): Use
Magnus Henoch <mange@freemail.hu>
parents: 87492
diff changeset
3 ;; Copyright (C) 2007, 2008 Free Software Foundation, Inc.
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5 ;; Author: Michael Albinus <michael.albinus@gmx.de>
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
6 ;; Keywords: comm, hardware
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
7
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
9
94677
91e5880a36c1 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91728
diff changeset
10 ;; GNU Emacs is free software: you can redistribute it and/or modify
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
94677
91e5880a36c1 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91728
diff changeset
12 ;; the Free Software Foundation, either version 3 of the License, or
91e5880a36c1 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91728
diff changeset
13 ;; (at your option) any later version.
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
14
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
18 ;; GNU General Public License for more details.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
19
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
94677
91e5880a36c1 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91728
diff changeset
21 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
22
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
23 ;;; Commentary:
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
24
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
25 ;; This package provides language bindings for the D-Bus API. D-Bus
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
26 ;; is a message bus system, a simple way for applications to talk to
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
27 ;; one another. See <http://dbus.freedesktop.org/> for details.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
28
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
29 ;; Low-level language bindings are implemented in src/dbusbind.c.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
30
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
31 ;;; Code:
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
32
91484
7ddf7059d131 * dbus.el (top): Check (featurep 'dbusbind).
Michael Albinus <michael.albinus@gmx.de>
parents: 87885
diff changeset
33 ;; D-Bus support in the Emacs core can be disabled with configuration
91728
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
34 ;; option "--without-dbus". Declare used subroutines and variables.
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
35 (declare-function dbus-call-method "dbusbind.c")
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
36 (declare-function dbus-register-signal "dbusbind.c")
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
37 (defvar dbus-debug)
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
38 (defvar dbus-registered-functions-table)
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
39
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
40 ;; Pacify byte compiler.
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
41 (eval-when-compile
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
42 (require 'cl))
91484
7ddf7059d131 * dbus.el (top): Check (featurep 'dbusbind).
Michael Albinus <michael.albinus@gmx.de>
parents: 87885
diff changeset
43
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
44 (require 'xml)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
45
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
46 (defconst dbus-service-dbus "org.freedesktop.DBus"
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
47 "The bus name used to talk to the bus itself.")
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
48
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
49 (defconst dbus-path-dbus "/org/freedesktop/DBus"
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
50 "The object path used to talk to the bus itself.")
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
51
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
52 (defconst dbus-interface-dbus "org.freedesktop.DBus"
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
53 "The interface exported by the object with `dbus-service-dbus' and `dbus-path-dbus'.")
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
54
91588
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
55 (defconst dbus-interface-peer (concat dbus-interface-dbus ".Peer")
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
56 "The interface for peer objects.")
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
57
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
58 (defconst dbus-interface-introspectable
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
59 (concat dbus-interface-dbus ".Introspectable")
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
60 "The interface supported by introspectable objects.")
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
61
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
62 (defconst dbus-interface-properties (concat dbus-interface-dbus ".Properties")
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
63 "The interface for property objects.")
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
64
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
65 (defmacro dbus-ignore-errors (&rest body)
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
66 "Execute BODY; signal D-Bus error when `dbus-debug' is non-nil.
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
67 Otherwise, return result of last form in BODY, or all other errors."
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
68 `(condition-case err
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
69 (progn ,@body)
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
70 (dbus-error (when dbus-debug (signal (car err) (cdr err))))))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
71
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
72 (put 'dbus-ignore-errors 'lisp-indent-function 0)
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
73 (put 'dbus-ignore-errors 'edebug-form-spec '(form symbolp body))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
74 (font-lock-add-keywords 'emacs-lisp-mode '("\\<dbus-ignore-errors\\>"))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
75
87050
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
76
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
77 ;;; Hash table of registered functions.
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
78
87176
d5feab53f4f8 * net/dbus.el (dbus-hash-table=): Remove function. We cannot
Michael Albinus <michael.albinus@gmx.de>
parents: 87159
diff changeset
79 ;; We create it here. So we have a simple test in dbusbind.c, whether
d5feab53f4f8 * net/dbus.el (dbus-hash-table=): Remove function. We cannot
Michael Albinus <michael.albinus@gmx.de>
parents: 87159
diff changeset
80 ;; the Lisp code has been loaded.
d5feab53f4f8 * net/dbus.el (dbus-hash-table=): Remove function. We cannot
Michael Albinus <michael.albinus@gmx.de>
parents: 87159
diff changeset
81 (setq dbus-registered-functions-table (make-hash-table :test 'equal))
87050
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
82
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
83 (defun dbus-list-hash-table ()
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
84 "Returns all registered member registrations to D-Bus.
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
85 The return value is a list, with elements of kind (KEY . VALUE).
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
86 See `dbus-registered-functions-table' for a description of the
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
87 hash table."
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
88 (let (result)
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
89 (maphash
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
90 '(lambda (key value) (add-to-list 'result (cons key value) 'append))
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
91 dbus-registered-functions-table)
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
92 result))
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
93
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
94 (defun dbus-unregister-object (object)
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
95 "Unregister OBJECT from D-Bus.
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
96 OBJECT must be the result of a preceding `dbus-register-method'
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
97 or `dbus-register-signal' call. It returns `t' if OBJECT has
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
98 been unregistered, `nil' otherwise."
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
99 ;; Check parameter.
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
100 (unless (and (consp object) (not (null (car object))) (consp (cdr object)))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
101 (signal 'wrong-type-argument (list 'D-Bus object)))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
102
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
103 ;; Find the corresponding entry in the hash table.
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
104 (let* ((key (car object))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
105 (value (gethash key dbus-registered-functions-table)))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
106 ;; Loop over the registered functions.
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
107 (while (consp value)
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
108 ;; (car value) has the structure (UNAME SERVICE PATH HANDLER).
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
109 ;; (cdr object) has the structure ((SERVICE PATH HANDLER) ...).
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
110 (if (not (equal (cdr (car value)) (car (cdr object))))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
111 (setq value (cdr value))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
112 ;; Compute new hash value. If it is empty, remove it from
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
113 ;; hash table.
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
114 (unless
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
115 (puthash
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
116 key
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
117 (delete (car value) (gethash key dbus-registered-functions-table))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
118 dbus-registered-functions-table)
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
119 (remhash key dbus-registered-functions-table))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
120 (setq value t)))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
121 value))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
122
87492
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
123 (defun dbus-name-owner-changed-handler (&rest args)
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
124 "Reapplies all member registrations to D-Bus.
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
125 This handler is applied when a \"NameOwnerChanged\" signal has
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
126 arrived. SERVICE is the object name for which the name owner has
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
127 been changed. OLD-OWNER is the previous owner of SERVICE, or the
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
128 empty string if SERVICE was not owned yet. NEW-OWNER is the new
87492
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
129 owner of SERVICE, or the empty string if SERVICE looses any name owner.
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
130
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
131 usage: (dbus-name-owner-changed-handler service old-owner new-owner)"
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
132 (save-match-data
87492
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
133 ;; Check the arguments. We should silently ignore it when they
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
134 ;; are wrong.
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
135 (if (and (= (length args) 3)
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
136 (stringp (car args))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
137 (stringp (cadr args))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
138 (stringp (caddr args)))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
139 (let ((service (car args))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
140 (old-owner (cadr args))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
141 (new-owner (caddr args)))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
142 ;; Check whether SERVICE is a known name.
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
143 (when (not (string-match "^:" service))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
144 (maphash
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
145 '(lambda (key value)
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
146 (dolist (elt value)
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
147 ;; key has the structure (BUS INTERFACE MEMBER).
87492
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
148 ;; elt has the structure (UNAME SERVICE PATH HANDLER).
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
149 (when (string-equal old-owner (car elt))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
150 ;; Remove old key, and add new entry with changed name.
87537
84ece2f8e012 * net/dbus.el (dbus-name-owner-changed-handler): Use
Magnus Henoch <mange@freemail.hu>
parents: 87492
diff changeset
151 (dbus-unregister-object (list key (cdr elt)))
87492
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
152 ;; Maybe we could arrange the lists a little bit better
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
153 ;; that we don't need to extract every single element?
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
154 (dbus-register-signal
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
155 ;; BUS SERVICE PATH
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
156 (nth 0 key) (nth 1 elt) (nth 2 elt)
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
157 ;; INTERFACE MEMBER HANDLER
87492
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
158 (nth 1 key) (nth 2 key) (nth 3 elt)))))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
159 (copy-hash-table dbus-registered-functions-table))))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
160 ;; The error is reported only in debug mode.
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
161 (when dbus-debug
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
162 (signal
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
163 'dbus-error
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
164 (cons
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
165 (format "Wrong arguments of %s.NameOwnerChanged" dbus-interface-dbus)
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
166 args))))))
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
167
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
168 ;; Register the handler.
91728
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
169 (ignore-errors
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
170 (dbus-register-signal
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
171 :system dbus-service-dbus dbus-path-dbus dbus-interface-dbus
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
172 "NameOwnerChanged" 'dbus-name-owner-changed-handler)
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
173 (dbus-register-signal
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
174 :session dbus-service-dbus dbus-path-dbus dbus-interface-dbus
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
175 "NameOwnerChanged" 'dbus-name-owner-changed-handler))
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
176
87050
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
177
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
178 ;;; D-Bus events.
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
179
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
180 (defun dbus-check-event (event)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
181 "Checks whether EVENT is a well formed D-Bus event.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
182 EVENT is a list which starts with symbol `dbus-event':
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
183
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
184 (dbus-event BUS SERIAL SERVICE PATH INTERFACE MEMBER HANDLER &rest ARGS)
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
185
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
186 BUS identifies the D-Bus the message is coming from. It is
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
187 either the symbol `:system' or the symbol `:session'. SERIAL is
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
188 the serial number of the received D-Bus message if it is a method
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
189 call, or `nil'. SERVICE and PATH are the unique name and the
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
190 object path of the D-Bus object emitting the message. INTERFACE
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
191 and MEMBER denote the message which has been sent. HANDLER is
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
192 the function which has been registered for this message. ARGS
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
193 are the arguments passed to HANDLER, when it is called during
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
194 event handling in `dbus-handle-event'.
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
195
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
196 This function raises a `dbus-error' signal in case the event is
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
197 not well formed."
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
198 (when dbus-debug (message "DBus-Event %s" event))
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
199 (unless (and (listp event)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
200 (eq (car event) 'dbus-event)
87050
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
201 ;; Bus symbol.
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
202 (symbolp (nth 1 event))
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
203 ;; Serial.
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
204 (or (natnump (nth 2 event)) (null (nth 2 event)))
87050
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
205 ;; Service.
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
206 (stringp (nth 3 event))
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
207 ;; Object path.
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
208 (stringp (nth 4 event))
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
209 ;; Interface.
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
210 (stringp (nth 5 event))
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
211 ;; Member.
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
212 (stringp (nth 6 event))
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
213 ;; Handler.
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
214 (functionp (nth 7 event)))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
215 (signal 'dbus-error (list "Not a valid D-Bus event" event))))
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
216
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
217 ;;;###autoload
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
218 (defun dbus-handle-event (event)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
219 "Handle events from the D-Bus.
87050
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
220 EVENT is a D-Bus event, see `dbus-check-event'. HANDLER, being
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
221 part of the event, is called with arguments ARGS."
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
222 (interactive "e")
87050
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
223 ;; We don't want to raise an error, because this function is called
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
224 ;; in the event handling loop.
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
225 (dbus-ignore-errors
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
226 (let (result)
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
227 (dbus-check-event event)
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
228 (setq result (apply (nth 7 event) (nthcdr 8 event)))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
229 (unless (consp result) (setq result (cons result nil)))
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
230 ;; Return a message when serial is not `nil'.
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
231 (when (not (null (nth 2 event)))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
232 (apply 'dbus-method-return-internal
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
233 (nth 1 event) (nth 2 event) (nth 3 event) result)))))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
234
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
235 (defun dbus-event-bus-name (event)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
236 "Return the bus name the event is coming from.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
237 The result is either the symbol `:system' or the symbol `:session'.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
238 EVENT is a D-Bus event, see `dbus-check-event'. This function
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
239 raises a `dbus-error' signal in case the event is not well
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
240 formed."
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
241 (dbus-check-event event)
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
242 (nth 1 event))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
243
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
244 (defun dbus-event-serial-number (event)
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
245 "Return the serial number of the corresponding D-Bus message.
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
246 The result is a number in case the D-Bus message is a method
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
247 call, or `nil' for all other mesage types. The serial number is
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
248 needed for generating a reply message. EVENT is a D-Bus event,
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
249 see `dbus-check-event'. This function raises a `dbus-error'
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
250 signal in case the event is not well formed."
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
251 (dbus-check-event event)
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
252 (nth 2 event))
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
253
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
254 (defun dbus-event-service-name (event)
87050
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
255 "Return the name of the D-Bus object the event is coming from.
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
256 The result is a string. EVENT is a D-Bus event, see `dbus-check-event'.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
257 This function raises a `dbus-error' signal in case the event is
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
258 not well formed."
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
259 (dbus-check-event event)
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
260 (nth 3 event))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
261
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
262 (defun dbus-event-path-name (event)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
263 "Return the object path of the D-Bus object the event is coming from.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
264 The result is a string. EVENT is a D-Bus event, see `dbus-check-event'.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
265 This function raises a `dbus-error' signal in case the event is
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
266 not well formed."
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
267 (dbus-check-event event)
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
268 (nth 4 event))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
269
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
270 (defun dbus-event-interface-name (event)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
271 "Return the interface name of the D-Bus object the event is coming from.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
272 The result is a string. EVENT is a D-Bus event, see `dbus-check-event'.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
273 This function raises a `dbus-error' signal in case the event is
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
274 not well formed."
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
275 (dbus-check-event event)
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
276 (nth 5 event))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
277
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
278 (defun dbus-event-member-name (event)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
279 "Return the member name the event is coming from.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
280 It is either a signal name or a method name. The result is is a
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
281 string. EVENT is a D-Bus event, see `dbus-check-event'. This
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
282 function raises a `dbus-error' signal in case the event is not
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
283 well formed."
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
284 (dbus-check-event event)
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
285 (nth 6 event))
87050
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
286
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
287
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
288 ;;; D-Bus registered names.
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
289
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
290 (defun dbus-list-activatable-names ()
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
291 "Return the D-Bus service names which can be activated as list.
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
292 The result is a list of strings, which is `nil' when there are no
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
293 activatable service names at all."
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
294 (dbus-ignore-errors
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
295 (dbus-call-method
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
296 :system dbus-service-dbus
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
297 dbus-path-dbus dbus-interface-dbus "ListActivatableNames")))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
298
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
299 (defun dbus-list-names (bus)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
300 "Return the service names registered at D-Bus BUS.
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
301 The result is a list of strings, which is `nil' when there are no
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
302 registered service names at all. Well known names are strings
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
303 like \"org.freedesktop.DBus\". Names starting with \":\" are
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
304 unique names for services."
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
305 (dbus-ignore-errors
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
306 (dbus-call-method
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
307 bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus "ListNames")))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
308
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
309 (defun dbus-list-known-names (bus)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
310 "Retrieve all services which correspond to a known name in BUS.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
311 A service has a known name if it doesn't start with \":\"."
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
312 (let (result)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
313 (dolist (name (dbus-list-names bus) result)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
314 (unless (string-equal ":" (substring name 0 1))
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
315 (add-to-list 'result name 'append)))))
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
316
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
317 (defun dbus-list-queued-owners (bus service)
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
318 "Return the unique names registered at D-Bus BUS and queued for SERVICE.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
319 The result is a list of strings, or `nil' when there are no
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
320 queued name owners service names at all."
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
321 (dbus-ignore-errors
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
322 (dbus-call-method
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
323 bus dbus-service-dbus dbus-path-dbus
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
324 dbus-interface-dbus "ListQueuedOwners" service)))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
325
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
326 (defun dbus-get-name-owner (bus service)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
327 "Return the name owner of SERVICE registered at D-Bus BUS.
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
328 The result is either a string, or `nil' if there is no name owner."
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
329 (dbus-ignore-errors
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
330 (dbus-call-method
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
331 bus dbus-service-dbus dbus-path-dbus
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
332 dbus-interface-dbus "GetNameOwner" service)))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
333
91588
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
334 (defun dbus-ping (bus service)
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
335 "Check whether SERVICE is registered for D-Bus BUS."
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
336 ;; "Ping" raises a D-Bus error if SERVICE does not exist.
91589
12b2f1526656 * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91588
diff changeset
337 ;; Otherwise, it returns silently with `nil'.
91588
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
338 (condition-case nil
91589
12b2f1526656 * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91588
diff changeset
339 (not
12b2f1526656 * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91588
diff changeset
340 (dbus-call-method bus service dbus-path-dbus dbus-interface-peer "Ping"))
91588
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
341 (dbus-error nil)))
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
342
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
343
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
344 ;;; D-Bus introspection.
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
345
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
346 (defun dbus-introspect (bus service path)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
347 "This function returns all interfaces and sub-nodes of SERVICE,
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
348 registered at object path PATH at bus BUS.
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
349
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
350 BUS must be either the symbol `:system' or the symbol `:session'.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
351 SERVICE must be a known service name, and PATH must be a valid
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
352 object path. The last two parameters are strings. The result,
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
353 the introspection data, is a string in XML format."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
354 ;; We don't want to raise errors.
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
355 (dbus-ignore-errors
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
356 (dbus-call-method
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
357 bus service path dbus-interface-introspectable "Introspect")))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
358
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
359 (defun dbus-introspect-xml (bus service path)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
360 "Return the introspection data of SERVICE in D-Bus BUS at object path PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
361 The data are a parsed list. The root object is a \"node\",
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
362 representing the object path PATH. The root object can contain
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
363 \"interface\" and further \"node\" objects."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
364 ;; We don't want to raise errors.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
365 (xml-node-name
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
366 (ignore-errors
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
367 (with-temp-buffer
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
368 (insert (dbus-introspect bus service path))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
369 (xml-parse-region (point-min) (point-max))))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
370
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
371 (defun dbus-introspect-get-attribute (object attribute)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
372 "Return the ATTRIBUTE value of D-Bus introspection OBJECT.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
373 ATTRIBUTE must be a string according to the attribute names in
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
374 the D-Bus specification."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
375 (xml-get-attribute-or-nil object (intern attribute)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
376
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
377 (defun dbus-introspect-get-node-names (bus service path)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
378 "Return all node names of SERVICE in D-Bus BUS at object path PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
379 It returns a list of strings. The node names stand for further
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
380 object paths of the D-Bus service."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
381 (let ((object (dbus-introspect-xml bus service path))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
382 result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
383 (dolist (elt (xml-get-children object 'node) result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
384 (add-to-list
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
385 'result (dbus-introspect-get-attribute elt "name") 'append))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
386
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
387 (defun dbus-introspect-get-all-nodes (bus service path)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
388 "Return all node names of SERVICE in D-Bus BUS at object path PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
389 It returns a list of strings, which are further object paths of SERVICE."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
390 (let ((result (list path)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
391 (dolist (elt
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
392 (dbus-introspect-get-node-names bus service path)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
393 result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
394 (setq elt (expand-file-name elt path))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
395 (setq result
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
396 (append result (dbus-introspect-get-all-nodes bus service elt))))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
397
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
398 (defun dbus-introspect-get-interface-names (bus service path)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
399 "Return all interface names of SERVICE in D-Bus BUS at object path PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
400 It returns a list of strings.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
401
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
402 There will be always the default interface
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
403 \"org.freedesktop.DBus.Introspectable\". Another default
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
404 interface is \"org.freedesktop.DBus.Properties\". If present,
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
405 \"interface\" objects can also have \"property\" objects as
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
406 children, beside \"method\" and \"signal\" objects."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
407 (let ((object (dbus-introspect-xml bus service path))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
408 result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
409 (dolist (elt (xml-get-children object 'interface) result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
410 (add-to-list
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
411 'result (dbus-introspect-get-attribute elt "name") 'append))))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
412
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
413 (defun dbus-introspect-get-interface (bus service path interface)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
414 "Return the INTERFACE of SERVICE in D-Bus BUS at object path PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
415 The return value is an XML object. INTERFACE must be a string,
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
416 element of the list returned by
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
417 `dbus-introspect-get-interface-names'. The resulting
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
418 \"interface\" object can contain \"method\", \"signal\",
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
419 \"property\" and \"annotation\" children."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
420 (let ((elt (xml-get-children
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
421 (dbus-introspect-xml bus service path) 'interface)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
422 (while (and elt
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
423 (not (string-equal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
424 interface
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
425 (dbus-introspect-get-attribute (car elt) "name"))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
426 (setq elt (cdr elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
427 (car elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
428
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
429 (defun dbus-introspect-get-method-names (bus service path interface)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
430 "Return a list of strings of all method names of INTERFACE.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
431 SERVICE is a service of D-Bus BUS at object path PATH."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
432 (let ((object (dbus-introspect-get-interface bus service path interface))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
433 result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
434 (dolist (elt (xml-get-children object 'method) result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
435 (add-to-list
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
436 'result (dbus-introspect-get-attribute elt "name") 'append))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
437
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
438 (defun dbus-introspect-get-method (bus service path interface method)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
439 "Return method METHOD of interface INTERFACE as XML object.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
440 It must be located at SERVICE in D-Bus BUS at object path PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
441 METHOD must be a string, element of the list returned by
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
442 `dbus-introspect-get-method-names'. The resulting \"method\"
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
443 object can contain \"arg\" and \"annotation\" children."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
444 (let ((elt (xml-get-children
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
445 (dbus-introspect-get-interface bus service path interface)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
446 'method)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
447 (while (and elt
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
448 (not (string-equal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
449 method (dbus-introspect-get-attribute (car elt) "name"))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
450 (setq elt (cdr elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
451 (car elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
452
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
453 (defun dbus-introspect-get-signal-names (bus service path interface)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
454 "Return a list of strings of all signal names of INTERFACE.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
455 SERVICE is a service of D-Bus BUS at object path PATH."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
456 (let ((object (dbus-introspect-get-interface bus service path interface))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
457 result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
458 (dolist (elt (xml-get-children object 'signal) result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
459 (add-to-list
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
460 'result (dbus-introspect-get-attribute elt "name") 'append))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
461
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
462 (defun dbus-introspect-get-signal (bus service path interface signal)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
463 "Return signal SIGNAL of interface INTERFACE as XML object.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
464 It must be located at SERVICE in D-Bus BUS at object path PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
465 SIGNAL must be a string, element of the list returned by
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
466 `dbus-introspect-get-signal-names'. The resulting \"signal\"
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
467 object can contain \"arg\" and \"annotation\" children."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
468 (let ((elt (xml-get-children
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
469 (dbus-introspect-get-interface bus service path interface)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
470 'signal)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
471 (while (and elt
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
472 (not (string-equal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
473 signal (dbus-introspect-get-attribute (car elt) "name"))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
474 (setq elt (cdr elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
475 (car elt)))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
476
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
477 (defun dbus-introspect-get-property-names (bus service path interface)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
478 "Return a list of strings of all property names of INTERFACE.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
479 SERVICE is a service of D-Bus BUS at object path PATH."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
480 (let ((object (dbus-introspect-get-interface bus service path interface))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
481 result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
482 (dolist (elt (xml-get-children object 'property) result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
483 (add-to-list
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
484 'result (dbus-introspect-get-attribute elt "name") 'append))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
485
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
486 (defun dbus-introspect-get-property (bus service path interface property)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
487 "This function returns PROPERTY of INTERFACE as XML object.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
488 It must be located at SERVICE in D-Bus BUS at object path PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
489 PROPERTY must be a string, element of the list returned by
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
490 `dbus-introspect-get-property-names'. The resulting PROPERTY
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
491 object can contain \"annotation\" children."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
492 (let ((elt (xml-get-children
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
493 (dbus-introspect-get-interface bus service path interface)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
494 'property)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
495 (while (and elt
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
496 (not (string-equal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
497 property
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
498 (dbus-introspect-get-attribute (car elt) "name"))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
499 (setq elt (cdr elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
500 (car elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
501
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
502 (defun dbus-introspect-get-annotation-names
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
503 (bus service path interface &optional name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
504 "Return all annotation names as list of strings.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
505 If NAME is `nil', the annotations are children of INTERFACE,
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
506 otherwise NAME must be a \"method\", \"signal\", or \"property\"
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
507 object, where the annotations belong to."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
508 (let ((object
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
509 (if name
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
510 (or (dbus-introspect-get-method bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
511 (dbus-introspect-get-signal bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
512 (dbus-introspect-get-property bus service path interface name))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
513 (dbus-introspect-get-interface bus service path interface)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
514 result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
515 (dolist (elt (xml-get-children object 'annotation) result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
516 (add-to-list
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
517 'result (dbus-introspect-get-attribute elt "name") 'append))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
518
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
519 (defun dbus-introspect-get-annotation
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
520 (bus service path interface name annotation)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
521 "Return ANNOTATION as XML object.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
522 If NAME is `nil', ANNOTATION is a child of INTERFACE, otherwise
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
523 NAME must be the name of a \"method\", \"signal\", or
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
524 \"property\" object, where the ANNOTATION belongs to."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
525 (let ((elt (xml-get-children
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
526 (if name
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
527 (or (dbus-introspect-get-method
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
528 bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
529 (dbus-introspect-get-signal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
530 bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
531 (dbus-introspect-get-property
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
532 bus service path interface name))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
533 (dbus-introspect-get-interface bus service path interface))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
534 'annotation)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
535 (while (and elt
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
536 (not (string-equal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
537 annotation
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
538 (dbus-introspect-get-attribute (car elt) "name"))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
539 (setq elt (cdr elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
540 (car elt)))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
541
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
542 (defun dbus-introspect-get-argument-names (bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
543 "Return a list of all argument names as list of strings.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
544 NAME must be a \"method\" or \"signal\" object.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
545
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
546 Argument names are optional, the function can return `nil'
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
547 therefore, even if the method or signal has arguments."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
548 (let ((object
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
549 (or (dbus-introspect-get-method bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
550 (dbus-introspect-get-signal bus service path interface name)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
551 result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
552 (dolist (elt (xml-get-children object 'arg) result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
553 (add-to-list
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
554 'result (dbus-introspect-get-attribute elt "name") 'append))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
555
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
556 (defun dbus-introspect-get-argument (bus service path interface name arg)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
557 "Return argument ARG as XML object.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
558 NAME must be a \"method\" or \"signal\" object. ARG must be a
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
559 string, element of the list returned by `dbus-introspect-get-argument-names'."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
560 (let ((elt (xml-get-children
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
561 (or (dbus-introspect-get-method bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
562 (dbus-introspect-get-signal bus service path interface name))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
563 'arg)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
564 (while (and elt
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
565 (not (string-equal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
566 arg (dbus-introspect-get-attribute (car elt) "name"))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
567 (setq elt (cdr elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
568 (car elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
569
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
570 (defun dbus-introspect-get-signature
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
571 (bus service path interface name &optional direction)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
572 "Return signature of a `method' or `signal', represented by NAME, as string.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
573 If NAME is a `method', DIRECTION can be either \"in\" or \"out\".
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
574 If DIRECTION is `nil', \"in\" is assumed.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
575
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
576 If NAME is a `signal', and DIRECTION is non-`nil', DIRECTION must
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
577 be \"out\"."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
578 ;; For methods, we use "in" as default direction.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
579 (let ((object (or (dbus-introspect-get-method
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
580 bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
581 (dbus-introspect-get-signal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
582 bus service path interface name))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
583 (when (and (string-equal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
584 "method" (dbus-introspect-get-attribute object "name"))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
585 (not (stringp direction)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
586 (setq direction "in"))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
587 ;; In signals, no direction is given.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
588 (when (string-equal "signal" (dbus-introspect-get-attribute object "name"))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
589 (setq direction nil))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
590 ;; Collect the signatures.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
591 (mapconcat
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
592 '(lambda (x)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
593 (let ((arg (dbus-introspect-get-argument
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
594 bus service path interface name x)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
595 (if (or (not (stringp direction))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
596 (string-equal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
597 direction
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
598 (dbus-introspect-get-attribute arg "direction")))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
599 (dbus-introspect-get-attribute arg "type")
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
600 "")))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
601 (dbus-introspect-get-argument-names bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
602 "")))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
603
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
604
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
605 ;;; D-Bus properties.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
606
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
607 (defun dbus-get-property (bus service path interface property)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
608 "Return the value of PROPERTY of INTERFACE.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
609 It will be checked at BUS, SERVICE, PATH. The result can be any
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
610 valid D-Bus value, or `nil' if there is no PROPERTY."
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
611 (dbus-ignore-errors
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
612 ;; We must check, whether the "org.freedesktop.DBus.Properties"
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
613 ;; interface is supported; otherwise the call blocks.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
614 (when
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
615 (member
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
616 "Get"
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
617 (dbus-introspect-get-method-names
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
618 bus service path "org.freedesktop.DBus.Properties"))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
619 ;; "Get" returns a variant, so we must use the car.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
620 (car
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
621 (dbus-call-method
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
622 bus service path dbus-interface-properties
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
623 "Get" interface property)))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
624
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
625 (defun dbus-set-property (bus service path interface property value)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
626 "Set value of PROPERTY of INTERFACE to VALUE.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
627 It will be checked at BUS, SERVICE, PATH. When the value has
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
628 been set successful, the result is VALUE. Otherwise, `nil' is
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
629 returned."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
630 (dbus-ignore-errors
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
631 (when
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
632 (and
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
633 ;; We must check, whether the
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
634 ;; "org.freedesktop.DBus.Properties" interface is supported;
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
635 ;; otherwise the call blocks.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
636 (member
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
637 "Set"
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
638 (dbus-introspect-get-method-names
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
639 bus service path "org.freedesktop.DBus.Properties"))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
640 ;; PROPERTY must be writable.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
641 (string-equal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
642 "readwrite"
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
643 (dbus-introspect-get-attribute
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
644 bus service path interface property)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
645 "access"))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
646 ;; "Set" requires a variant.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
647 (dbus-call-method
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
648 bus service path dbus-interface-properties
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
649 "Set" interface property (list :variant value))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
650 ;; Return VALUE.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
651 (dbus-get-property bus service path interface property))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
652
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
653 (defun dbus-get-all-properties (bus service path interface)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
654 "Return all properties of INTERFACE at BUS, SERVICE, PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
655 The result is a list of entries. Every entry is a cons of the
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
656 name of the property, and its value. If there are no properties,
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
657 `nil' is returned."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
658 ;; "org.freedesktop.DBus.Properties.GetAll" is not supported at
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
659 ;; all interfaces. Therefore, we do it ourselves.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
660 (dbus-ignore-errors
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
661 (let (result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
662 (dolist (property
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
663 (dbus-introspect-get-property-names
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
664 bus service path interface)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
665 result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
666 (add-to-list
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
667 'result
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
668 (cons property (dbus-get-property bus service path interface property))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
669 'append)))))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
670
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
671 (provide 'dbus)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
672
87053
f767f1ba8301 Add arch tagline
Miles Bader <miles@gnu.org>
parents: 87050
diff changeset
673 ;; arch-tag: a47caf84-9162-4811-90cc-5d388e37b9bd
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
674 ;;; dbus.el ends here