comparison lisp/net/tramp-gvfs.el @ 103691:1cd332c1ef9a

* net/tramp-gvfs.el (tramp-gvfs-handler-mounted-unmounted) (tramp-gvfs-connection-mounted-p): Handle changed mount-info interface.
author Michael Albinus <michael.albinus@gmx.de>
date Thu, 02 Jul 2009 15:27:21 +0000
parents 2d532360a64b
children 585c452d8bf2
comparison
equal deleted inserted replaced
103690:6cf0c4de552b 103691:1cd332c1ef9a
867 (defun tramp-gvfs-handler-mounted-unmounted (mount-info) 867 (defun tramp-gvfs-handler-mounted-unmounted (mount-info)
868 "Signal handler for the \"org.gtk.vfs.MountTracker.mounted\" and 868 "Signal handler for the \"org.gtk.vfs.MountTracker.mounted\" and
869 \"org.gtk.vfs.MountTracker.unmounted\" signals." 869 \"org.gtk.vfs.MountTracker.unmounted\" signals."
870 (ignore-errors 870 (ignore-errors
871 (let* ((signal-name (dbus-event-member-name last-input-event)) 871 (let* ((signal-name (dbus-event-member-name last-input-event))
872 (mount-spec (nth 1 (nth 9 mount-info))) 872 ;; The interface of mount-info has been changed. We must
873 ;; handle both cases.
874 (last-nth (if (nth 9 mount-info) 9 8))
875 (mount-spec (nth 1 (nth last-nth mount-info)))
873 (method (dbus-byte-array-to-string (cadr (assoc "type" mount-spec)))) 876 (method (dbus-byte-array-to-string (cadr (assoc "type" mount-spec))))
874 (user (dbus-byte-array-to-string (cadr (assoc "user" mount-spec)))) 877 (user (dbus-byte-array-to-string (cadr (assoc "user" mount-spec))))
875 (domain (dbus-byte-array-to-string 878 (domain (dbus-byte-array-to-string
876 (cadr (assoc "domain" mount-spec)))) 879 (cadr (assoc "domain" mount-spec))))
877 (host (dbus-byte-array-to-string 880 (host (dbus-byte-array-to-string
896 (if (string-equal signal-name "unmounted") 899 (if (string-equal signal-name "unmounted")
897 (tramp-set-file-property v "/" "fuse-mountpoint" nil) 900 (tramp-set-file-property v "/" "fuse-mountpoint" nil)
898 (tramp-set-file-property 901 (tramp-set-file-property
899 v "/" "fuse-mountpoint" 902 v "/" "fuse-mountpoint"
900 (file-name-nondirectory 903 (file-name-nondirectory
901 (dbus-byte-array-to-string (nth 8 mount-info))))))))) 904 (dbus-byte-array-to-string (nth (1- last-nth) mount-info)))))))))
902 905
903 (dbus-register-signal 906 (dbus-register-signal
904 :session nil tramp-gvfs-path-mounttracker 907 :session nil tramp-gvfs-path-mounttracker
905 tramp-gvfs-interface-mounttracker "mounted" 908 tramp-gvfs-interface-mounttracker "mounted"
906 'tramp-gvfs-handler-mounted-unmounted) 909 'tramp-gvfs-handler-mounted-unmounted)
918 (with-file-property vec "/" "list-mounts" 921 (with-file-property vec "/" "list-mounts"
919 (with-tramp-dbus-call-method vec t 922 (with-tramp-dbus-call-method vec t
920 :session tramp-gvfs-service-daemon tramp-gvfs-path-mounttracker 923 :session tramp-gvfs-service-daemon tramp-gvfs-path-mounttracker
921 tramp-gvfs-interface-mounttracker "listMounts")) 924 tramp-gvfs-interface-mounttracker "listMounts"))
922 nil) 925 nil)
923 (let* ((mount-spec (nth 1 (nth 9 elt))) 926 ;; The interface of mount-info has been changed. We must handle
927 ;; both cases.
928 (let* ((last-nth (if (nth 9 mount-info) 9 8))
929 (mount-spec (nth 1 (nth last-nth elt)))
924 (method (dbus-byte-array-to-string 930 (method (dbus-byte-array-to-string
925 (cadr (assoc "type" mount-spec)))) 931 (cadr (assoc "type" mount-spec))))
926 (user (dbus-byte-array-to-string 932 (user (dbus-byte-array-to-string
927 (cadr (assoc "user" mount-spec)))) 933 (cadr (assoc "user" mount-spec))))
928 (domain (dbus-byte-array-to-string 934 (domain (dbus-byte-array-to-string
948 (string-equal method (tramp-file-name-method vec)) 954 (string-equal method (tramp-file-name-method vec))
949 (string-equal user (or (tramp-file-name-user vec) "")) 955 (string-equal user (or (tramp-file-name-user vec) ""))
950 (string-equal host (tramp-file-name-host vec))) 956 (string-equal host (tramp-file-name-host vec)))
951 (tramp-set-file-property 957 (tramp-set-file-property
952 vec "/" "fuse-mountpoint" 958 vec "/" "fuse-mountpoint"
953 (file-name-nondirectory (dbus-byte-array-to-string (nth 8 elt)))) 959 (file-name-nondirectory
960 (dbus-byte-array-to-string (nth (1- last-nth) elt))))
954 (throw 'mounted t)))))) 961 (throw 'mounted t))))))
955 962
956 (defun tramp-gvfs-mount-spec (vec) 963 (defun tramp-gvfs-mount-spec (vec)
957 "Return a mount-spec for \"org.gtk.vfs.MountTracker.mountLocation\"." 964 "Return a mount-spec for \"org.gtk.vfs.MountTracker.mountLocation\"."
958 (let* ((method (tramp-file-name-method vec)) 965 (let* ((method (tramp-file-name-method vec))