diff options
| author | Sacha Chua <sacha@sachachua.com> | 2022-10-03 11:35:13 -0400 | 
|---|---|---|
| committer | Sacha Chua <sacha@sachachua.com> | 2022-10-03 11:35:13 -0400 | 
| commit | b3e6b2d45e0585582d17995c50c75f29c957e3d2 (patch) | |
| tree | ca13dfb6e197e226e88abb6567870e26a274edf6 | |
| parent | cddcc3a790ef5e76ca618617d4a8bae96582e022 (diff) | |
| download | emacsconf-el-b3e6b2d45e0585582d17995c50c75f29c957e3d2.tar.xz emacsconf-el-b3e6b2d45e0585582d17995c50c75f29c957e3d2.zip  | |
Handle time
| -rw-r--r-- | emacsconf-schedule.el | 66 | 
1 files changed, 51 insertions, 15 deletions
diff --git a/emacsconf-schedule.el b/emacsconf-schedule.el index 7435bd7..0b9d02a 100644 --- a/emacsconf-schedule.el +++ b/emacsconf-schedule.el @@ -138,7 +138,7 @@ Each function should take the info and manipulate it as needed, returning the ne             (list :title "LUNCH" :time emacsconf-schedule-lunch-time))            ((and (listp seq) (member (car seq) '(break lunch)) (stringp (cdr seq)))             (list :title (if (eq (car seq) 'lunch) "LUNCH" "BREAK") -                 :scheduled (format-time-string (car org-time-stamp-formats) (date-to-time (cdr seq))) +                 :scheduled (format-time-string (cdr org-time-stamp-formats) (date-to-time (cdr seq)))                   :start-time (date-to-time (cdr seq))                   :fixed-time t                   :time (if (eq (car seq) 'lunch) emacsconf-schedule-lunch-time emacsconf-schedule-break-time))) @@ -148,33 +148,33 @@ Each function should take the info and manipulate it as needed, returning the ne            ;; Named thing with fixed time            ((and (listp seq) (stringp (car seq)) (stringp (cdr seq)))             (append -            (seq-find (lambda (o) (string= (plist-get o :title) (car seq))) info)              (list :title (car seq)                    :scheduled (format-time-string (car org-time-stamp-formats) (date-to-time (cdr seq)))                    :start-time (date-to-time (cdr seq)) -                  :fixed-time t))) +                  :fixed-time t) +            (seq-find (lambda (o) (string= (plist-get o :title) (car seq))) info) +            ))            ;; Named thing with duration            ((and (listp seq) (stringp (car seq)) (numberp (cdr seq)))             (append -            (seq-find (lambda (o) (string= (plist-get o :title) (car seq))) info)              (list :title (car seq) -                  :time (number-to-string (cdr seq))))) +                  :time (number-to-string (cdr seq))) +            (seq-find (lambda (o) (string= (plist-get o :title) (car seq))) info)))            ;; Named thing            ((stringp seq) -           (append -            (seq-find (lambda (o) (string= (plist-get o :title) seq)) info) -            (list :title seq))) +           (or (seq-find (lambda (o) (string= (plist-get o :title) seq)) info) +               (list :title seq)))            ;; Slug with time            ((and (listp seq) (symbolp (car seq)) (stringp (cdr seq))) -           (append (assoc-default (car seq) by-assoc) -                   (list :scheduled (format-time-string (car org-time-stamp-formats) (date-to-time (cdr seq))) +           (append (list :scheduled (format-time-string (cdr org-time-stamp-formats) (date-to-time (cdr seq)))                           :start-time (date-to-time (cdr seq)) -                         :fixed-time t))) +                         :fixed-time t) +                   (assoc-default (car seq) by-assoc)))            ;; Slug with duration            ((and (listp seq) (symbolp (car seq)) (numberp (cdr seq))) -           (append (assoc-default (car seq) by-assoc) -                   (list :override-time t -                         :time (number-to-string (cdr seq))))) +           (append (list :override-time t +                         :time (number-to-string (cdr seq))) +                   (assoc-default (car seq) by-assoc)))            ;; Just the slug            ((symbolp seq)             (assoc-default seq by-assoc)) @@ -262,7 +262,7 @@ Each function should take the info and manipulate it as needed, returning the ne                (height . ,(1- (if vertical size height)))                (stroke . "black")                (fill . ,(cond -                        ((string-match "BREAK\\|LUNCH" (plist-get o :title)) nil) +                        ((string-match "BREAK\\|LUNCH" (plist-get o :title)) "white")                          ((plist-get o :invalid) "red")                          ((string-match "EST"                                         (or (plist-get o :availability) "")) @@ -494,5 +494,41 @@ Both start and end time are tested."              (list (match-string 2 avail) nil)            (list nil (match-string 2 avail))))))) +(defun emacsconf-schedule-validate (sched) +  (let* ((sched-slugs (mapcar (lambda (o) (plist-get o :slug)) +                              (emacsconf-filter-talks sched))) +         (diff (delq nil +                     (seq-difference +                      (mapcar (lambda (o) (plist-get o :slug)) +                              (seq-remove (lambda (o) +                                            (string= (plist-get o :status) "CANCELLED")) +                                          (let ((emacsconf-talk-info-functions '(emacsconf-get-talk-info-from-properties))) +                                            (emacsconf-get-talk-info)))) +                      sched-slugs))) +         (dupes (seq-filter (lambda (o) (> (length (cdr o)) 1)) +                           (seq-group-by #'identity sched-slugs)))) +    (append +     (emacsconf-schedule-validate-time-constraints sched) +     (when diff +       (list (concat "Missing talks: " (string-join diff ", ")))) +     (when dupes +       (list (concat "Duplicate talks: " (mapconcat 'car dupes ", "))))))) + +(defmacro emacsconf-schedule-test (filename &rest varlist) +  `(let* (,@varlist) +     (let* ((schedule (emacsconf-schedule-prepare arranged)) +            (validation (or (emacsconf-schedule-validate schedule) ""))) +       (with-temp-file ,filename +         (svg-print (emacsconf-schedule-svg 800 200 +                                            (mapcar +                                             (lambda (day) +                                               (plist-put day :track +                                                          (mapcar +                                                           (lambda (track) +                                                             (apply #'emacsconf-schedule-get-subsequence schedule track)) +                                                           (plist-get day :track))) +                                               day) +                                             tracks)))) +       (mapconcat (lambda (o) (format "- %s\n" o)) (append validation (list (format "[[file:%s]]" filename)))))))  (provide 'emacsconf-schedule)  ;;; emacsconf-schedule.el ends here  | 
