Simple database: Difference between revisions

→‎{{header|Common Lisp}}: improve column output formatting, separate getting and formatting date, don't crash when no existing backup is found, don't print series-description if nil
m (category data structures)
(→‎{{header|Common Lisp}}: improve column output formatting, separate getting and formatting date, don't crash when no existing backup is found, don't print series-description if nil)
Line 42:
(defstruct (episode (:print-function print-episode-struct))
series title season episode part date tags)
 
(defun format-ymd (date)
(format nil "~{~a.~a.~a~}" date))
 
(defun print-episode-struct (ep stream level)
Line 47 ⟶ 50:
(format stream (if *print-escape*
"#s(episode~@{~*~@[ :~1:*~a ~s~]~})"
"~&~34< ~*~30a a~;~*~@[~ad-~]~*~ad~40T> ~45<~*~@[~a ~]~*~@[(~a) ~]~;~*~@[ ~70T(~a)~]~>~*~@[ (~{~a~^ ~})~]")
:series (episode-series ep)
:season (episode-season ep)
Line 55 ⟶ 58:
:date (if *print-escape*
(episode-date ep)
(format-ymdwhen (episode-date ep)))
(format-ymd (episode-date ep))))
:tags (episode-tags ep))))
 
Line 94 ⟶ 98:
while j))
 
(defun formatget-ymdcurrent-date (&optional date)
(format nil "~{~a.~a.~a~}" (or date (cdddr (multiple-value-list (get-decoded-time))))))bind
(second minute hour date month year day-of-week dst-p tz)
(get-decoded-time)
(declare (ignore second minute hour day-of-week dst-p tz))
(list date month year)))
 
 
(defun parse-date (date)
Line 110 ⟶ 119:
 
(defun prompt-for-episode (&optional last)
(when (not last)
(setf last (make-episode)))
(make-episode
:series (prompt-read "Series Title" (episode-series last))
Line 115 ⟶ 126:
:season (parse-number (prompt-read "Season" (episode-season last)))
:episode (parse-number (prompt-read "Episode" (1+ (or (episode-episode last) 0))))
:part (parse-number (prompt-read "Part" (ifwhen (episode-part last) (1+ (episode-part last)))))
(1+ (episode-part last)))))
:date (parse-date (prompt-read "Date watched" (format-ymd (get-current-date))))
:tags (parse-tags (prompt-read "Tags"))))
 
Line 129 ⟶ 141:
:start 1) 0)))
(let* ((files (directory (format nil "~A,*" (namestring basename))))
(max (reduce #'maxif files :key #'parse-version)))
(reduce #'max files :key #'parse-version)
0)))
(merge-pathnames (format nil "~a,~d" (file-namestring basename) (1+ max))
basename))))
Line 162 ⟶ 176:
(defun watch-series (title)
(let ((series (get-series title *db*)))
(format t "~30a ~@[ (~{~a~^ ~})~]~%~@[ ~a~%~]" title (series-tags series)
(series-description series))
(format t "~{~a~%~}" (reverse (series-episodes series)))))
Line 225 ⟶ 239:
((equal (cadr argv) "all") (watch-all))
(T (watch-series (format nil "~{~a~^ ~}" (cdr argv)))))))
 
(main (argv))</lang>
 
Anonymous user