Function: hyrolo-google-contacts-insert-data
hyrolo-google-contacts-insert-data is a byte-compiled function defined
in hyrolo.el.
Signature
(hyrolo-google-contacts-insert-data CONTACTS TOKEN CONTACT-PREFIX-STRING)
Documentation
Insert google CONTACTS data.
Source Code
;; Defined in ~/.emacs.d/elpa/hyperbole-20260414.325/hyrolo.el
;; Derived from google-contacts.el.
(defun hyrolo-google-contacts-insert-data (contacts _token contact-prefix-string)
"Insert google CONTACTS data."
(if (not contacts)
;; No contacts, insert a string and return nil
(insert "No result.")
(print contacts (get-buffer-create "*contacts-data*"))
(dolist (contact contacts)
;; `child' variable is necessary or the Google code will fail; don't
;; remove. -- rsw, 2026-04-04
(let* ((child nil)
(name-value (nth 0 (xml-get-children contact 'gd:name)))
(fullname (xml-node-child-string (nth 0 (xml-get-children name-value 'gd:fullName))))
(givenname (xml-node-child-string (nth 0 (xml-get-children name-value 'gd:givenName))))
(familyname (xml-node-child-string (nth 0 (xml-get-children name-value 'gd:familyName))))
(nickname (xml-node-child-string (nth 0 (xml-get-children contact 'gContact:nickname))))
(birthday (xml-get-attribute-or-nil (nth 0 (xml-get-children contact 'gContact:birthday)) 'when))
(organization-value (nth 0 (xml-get-children contact 'gd:organization)))
(organization-name (xml-node-child-string (nth 0 (xml-get-children organization-value 'gd:orgName))))
(organization-title (xml-node-child-string (nth 0 (xml-get-children organization-value 'gd:orgTitle))))
(notes (xml-node-child-string (nth 0 (xml-get-children contact 'content))))
;; Links
;; (links (xml-get-children contact 'link))
;; Multiple values
;; Format is ((rel-type . data) (rel-type . data) … )
(events (google-contacts-build-node-list contact 'gContact:event
(xml-get-attribute (nth 0 (xml-get-children child 'gd:when)) 'startTime)))
(emails (google-contacts-build-node-list contact 'gd:email
(xml-get-attribute child 'address)))
(phones (google-contacts-build-node-list contact 'gd:phoneNumber))
(websites (google-contacts-build-node-list contact 'gContact:website
(xml-get-attribute child 'href)))
(relations (google-contacts-build-node-list contact 'gContact:relation))
(postal-addresses (google-contacts-build-node-list contact 'gd:structuredPostalAddress
(xml-node-child-string
(nth 0 (xml-get-children child 'gd:formattedAddress)))))
(instant-messaging (google-contacts-build-node-list contact 'gd:im
(cons
(xml-node-get-attribute-type child 'protocol)
(cdr (assoc 'address (xml-node-attributes child))))))
(beg (point)))
(unless (and (string-equal familyname "") (string-equal givenname "") (string-equal nickname ""))
(insert contact-prefix-string familyname (if (or (string-equal familyname "")
(string-equal givenname "")) "" ", ")
givenname
(if (string-equal nickname "")
""
(format " (%s)" nickname))
"\n"))
(unless (and (string-equal organization-name "")
(string-equal organization-title ""))
(insert (google-contacts-margin-element))
(if (string-equal organization-title "")
(insert organization-name "\n")
(insert organization-title " @ " organization-name "\n")))
(hyrolo-google-contacts-insert-generic-list emails "E-mails")
(hyrolo-google-contacts-insert-generic-list phones "Phones")
(hyrolo-google-contacts-insert-generic-list postal-addresses "Addresses"
(lambda (address)
(google-contacts-add-margin-to-text (cdr address)
(+ 4 (length (car address))))))
(hyrolo-google-contacts-insert-generic-list websites "Websites"
(lambda (website) (cdr website)))
(hyrolo-google-contacts-insert-generic-list events "Events")
(hyrolo-google-contacts-insert-generic-list relations "Relations"
(lambda (relation)
(widget-create 'link
:button-prefix "" :button-suffix ""
:action (lambda (widget &optional _event)
(google-contacts (widget-value widget)))
(cdr relation))
""))
(hyrolo-google-contacts-insert-generic-list instant-messaging "Instant messaging"
(lambda (im)
(concat (cddr im) " (" (cadr im) ")")))
(when birthday
(insert "\n" (google-contacts-margin-element) "Birthday: " birthday "\n"))
(unless (string-equal notes "")
(insert "\n" (google-contacts-margin-element) "Notes: "
(google-contacts-add-margin-to-text notes 8)
"\n"))
;; Insert properties
(put-text-property beg (1+ beg) 'google-contacts t)
(when emails
(put-text-property beg (point)
'google-contacts-email (concat fullname " <" (cdr (nth 0 emails)) ">")))))
(goto-char (point-min)))
;; Return contacts
contacts)