+ (with-parsed-tramp-file-name
+ (tramp-make-tramp-file-name method user host "") nil
+ (tramp-message
+ v 6 "%s %s"
+ signal-name (tramp-gvfs-stringify-dbus-message mount-info))
+ (tramp-set-file-property v "/" "list-mounts" 'undef)
+ (if (string-equal signal-name "unmounted")
+ (tramp-set-file-property v "/" "fuse-mountpoint" nil)
+ ;; Set prefix, mountpoint and location.
+ (unless (string-equal prefix "/")
+ (tramp-set-file-property v "/" "prefix" prefix))
+ (tramp-set-file-property v "/" "fuse-mountpoint" fuse-mountpoint)
+ (tramp-set-file-property
+ v "/" "default-location" default-location)))))))
+
+(dbus-register-signal
+ :session nil tramp-gvfs-path-mounttracker
+ tramp-gvfs-interface-mounttracker "mounted"
+ 'tramp-gvfs-handler-mounted-unmounted)
+
+(dbus-register-signal
+ :session nil tramp-gvfs-path-mounttracker
+ tramp-gvfs-interface-mounttracker "unmounted"
+ 'tramp-gvfs-handler-mounted-unmounted)
+
+(defun tramp-gvfs-connection-mounted-p (vec)
+ "Check, whether the location is already mounted."
+ (or
+ (tramp-get-file-property vec "/" "fuse-mountpoint" nil)
+ (catch 'mounted
+ (dolist
+ (elt
+ (with-file-property vec "/" "list-mounts"
+ (with-tramp-dbus-call-method vec t
+ :session tramp-gvfs-service-daemon tramp-gvfs-path-mounttracker
+ tramp-gvfs-interface-mounttracker "listMounts"))
+ nil)
+ ;; Jump over the first elements of the mount info. Since there
+ ;; were changes in the antries, we cannot access dedicated
+ ;; elements.
+ (while (stringp (car elt)) (setq elt (cdr elt)))
+ (let* ((fuse-mountpoint (dbus-byte-array-to-string (cadr elt)))
+ (mount-spec (caddr elt))
+ (default-location (dbus-byte-array-to-string (cadddr elt)))
+ (method (dbus-byte-array-to-string
+ (cadr (assoc "type" (cadr mount-spec)))))
+ (user (dbus-byte-array-to-string
+ (cadr (assoc "user" (cadr mount-spec)))))
+ (domain (dbus-byte-array-to-string
+ (cadr (assoc "domain" (cadr mount-spec)))))
+ (host (dbus-byte-array-to-string
+ (cadr (or (assoc "host" (cadr mount-spec))
+ (assoc "server" (cadr mount-spec))))))
+ (port (dbus-byte-array-to-string
+ (cadr (assoc "port" (cadr mount-spec)))))
+ (ssl (dbus-byte-array-to-string
+ (cadr (assoc "ssl" (cadr mount-spec)))))
+ (prefix (concat (dbus-byte-array-to-string (car mount-spec))
+ (dbus-byte-array-to-string
+ (cadr (assoc "share" (cadr mount-spec)))))))
+ (when (string-match "^smb" method)
+ (setq method "smb"))
+ (when (string-equal "obex" method)
+ (setq host (tramp-bluez-device host)))
+ (when (and (string-equal "dav" method) (string-equal "true" ssl))
+ (setq method "davs"))
+ (when (and (string-equal "synce" method) (zerop (length user)))
+ (setq user (or (tramp-file-name-user vec) "")))
+ (unless (zerop (length domain))
+ (setq user (concat user tramp-prefix-domain-format domain)))
+ (unless (zerop (length port))
+ (setq host (concat host tramp-prefix-port-format port)))
+ (when (and
+ (string-equal method (tramp-file-name-method vec))
+ (string-equal user (or (tramp-file-name-user vec) ""))
+ (string-equal host (tramp-file-name-host vec))
+ (string-match (concat "^" (regexp-quote prefix))
+ (tramp-file-name-localname vec)))
+ ;; Set prefix, mountpoint and location.
+ (unless (string-equal prefix "/")
+ (tramp-set-file-property vec "/" "prefix" prefix))
+ (tramp-set-file-property vec "/" "fuse-mountpoint" fuse-mountpoint)
+ (tramp-set-file-property vec "/" "default-location" default-location)
+ (throw 'mounted t)))))))