Error dialogues for invalid/unread vCard files

… instead of just being silent.
This commit is contained in:
Jaidyn Ann 2024-02-13 18:02:08 -06:00
parent bf718e72c4
commit 6100da7744

View File

@ -1,3 +1,5 @@
#!/usr/bin/env -S csi -s
;; Copyright © 2024 Jaidyn Ann <jadedctrl@posteo.at>
;;
;; This program is free software: you can redistribute it and/or
@ -62,12 +64,13 @@
(define (init-qt cli-args)
(set! *qt-app* (qt:init))
(set! *qt-win* (create-window))
(qt:char-encoding 'utf8)
(init-window *qt-win*)
;; Kick off the QT thread, then open the cli free-arg vCard file, if provided.
;; That is, like `$ contact freeArgFile.vcf`.
(let [(qt-thread (thread-start! qt-loop))
(last-arg (last-free-arg cli-args))]
(when (and (string? last-arg) (file-exists? last-arg))
(when (string? last-arg)
(open-vcard-file *qt-win* last-arg))
qt-thread))
@ -210,13 +213,28 @@
;; Parse a vCard file and populate the windows forms with its contents.
(define (open-vcard-file window file)
(when (and (file-exists? file)
(file-readable? file))
(set! *vcard-pathname* file)
(thread-start! (lambda () (populate-with-vcard
window
(with-input-from-file file
vcard:read-vcard))))))
(set! *vcard-pathname* file)
(thread-start!
(lambda ()
(condition-case
(populate-with-vcard
window
(with-input-from-file file
vcard:read-vcard))
[(vcard)
(set! *vcard-pathname* #f)
(qt:message
(string-join (list "This file doesnt seem to be a valid vCard file."
"Please make sure you selected the right file, and take a look at it manually."))
title: "Parsing error" type: 'critical)]
[exn (file)
(set! *vcard-pathname* #f)
(qt:message
(string-join (list "Failed to open the file."
((condition-property-accessor 'exn 'message) exn)))
title: "File error" type: 'critical)]))))
;; Simply map vCard property-names to their corresponding name in the windows