Compare commits

...

2 Enmetoj

Author SHA1 Message Date
Jaidyn Ann 205576d973 Support URL-format vCard properties 2024-02-11 19:12:20 -06:00
Jaidyn Ann 3a1b9aa543 Parse and display contacts’ profile-photos 2024-02-11 19:12:01 -06:00
2 changed files with 41 additions and 3 deletions

View File

@ -25,6 +25,7 @@
(chicken string)
(chicken time)
(srfi 1)
(srfi 4)
(srfi 13)
(srfi 18)
(prefix getopt-long getopt:)
@ -209,7 +210,7 @@
;; fields.
(define property->formname-alist
'((FN . "name")
(ADR . "address")
;; (ADR . "address")
(TEL . "homePhone")
(TEL . "workPhone")
(EMAIL . "eMail")
@ -227,9 +228,40 @@
(let* [(formname (alist-ref (car property) property->formname-alist))
(lineEditName (conc formname "LineEdit"))
(lineEditWidget (if formname (qt:find window lineEditName) #f))]
(if lineEditWidget
(set! (qt:property lineEditWidget "text") (last property)))))
(cond
[lineEditWidget
(set! (qt:property lineEditWidget "text")
(cond
[(string? (last property))
(last property)]
[(uri:uri? (last property))
(uri:uri->string (last property))]
[#t ""]))]
[(and (eq? (car property) 'PHOTO)
(list? (last property)))
(let* [(avatar (qt:find window "avatarLabel"))
(old-pixmap (if avatar (qt:property avatar "pixmap")))
[new-pixmap (if avatar (u8vector->pixmap (cadr (last property))))]]
(when avatar
(set! (qt:property avatar "pixmap") new-pixmap)))])))
vcard-alist))
;; Given a image bytevector (u8vector), create a corresponding pixmap.
(define (u8vector->pixmap vector)
(let* ([temp-file (write-temporary-file vector)]
[pixmap (qt:pixmap temp-file)])
(delete-file* temp-file)
pixmap))
;; Given a u8vector for file-contents, create a tempory file and write the
;; contents to it. Returns the pathname.
(define (write-temporary-file u8vector-contents)
(let [(temp-file (create-temporary-file))]
(with-output-to-file temp-file
(lambda () (map write-byte (u8vector->list u8vector-contents))))
temp-file))
(init)

View File

@ -22,6 +22,12 @@
</property>
<item>
<widget class="QLabel" name="avatarLabel">
<property name="maximumSize">
<size>
<width>100</width>
<height>100</height>
</size>
</property>
<property name="text">
<string>Profile picture</string>
</property>