Simple database: Difference between revisions

Content added Content deleted
m (→‎{{header|Common Lisp}}: small improvements: prompt more and better defaults for make-episode, improve output formatting)
Line 253: Line 253:
(format stream (if *print-escape*
(format stream (if *print-escape*
"#s(episode~@{~*~@[ :~1:*~a ~s~]~})"
"#s(episode~@{~*~@[ :~1:*~a ~s~]~})"
"~&~34< ~*~a~;~*~@[~d-~]~*~d~> ~45<~*~@[~a ~]~*~@[(~a) ~]~;~*~@[(~a)~]~>~*~@[ (~{~a~^ ~})~]")
"~32<~*~a~; ~*~@[~d-~]~*~d~> ~45<~*~@[~a ~]~*~@[(~a) ~]~;~*~@[(~a)~]~>~*~@[ (~{~a~^ ~})~]")
:series (episode-series ep)
:series (episode-series ep)
:season (episode-season ep)
:season (episode-season ep)
Line 324: Line 324:
(when (not last)
(when (not last)
(setf last (make-episode)))
(setf last (make-episode)))
(let* ((series (prompt-read "Series Title" (episode-series last)))
(make-episode
:series (prompt-read "Series Title" (episode-series last))
(title (prompt-read "Title"))
:title (prompt-read "Title")
(season (parse-number (prompt-read "Season" (episode-season last))))
:season (parse-number (prompt-read "Season" (episode-season last)))
(episode (parse-number (prompt-read "Episode"
:episode (parse-number (prompt-read "Episode" (1+ (or (episode-episode last) 0))))
(if (eq (episode-season last) season)
:part (parse-number (prompt-read "Part" (when (episode-part last)
(1+ (episode-episode last))
(1+ (episode-part last)))))
1))))
:date (parse-date (prompt-read "Date watched" (format-ymd (get-current-date))))
(part (parse-number (prompt-read "Part"
(when (and (episode-part last)
:tags (parse-tags (prompt-read "Tags"))))
(or (eq (episode-season last) season)
(eq (episode-part last) 1)))
(1+ (episode-part last))))))
(date (parse-date (prompt-read "Date watched" (format-ymd (get-current-date)))))
(tags (parse-tags (prompt-read "Tags"))))
(make-episode
:series series
:title title
:season season
:episode episode
:part part
:date date
:tags tags)))


(defun parse-integer-quietly (&rest args)
(defun parse-integer-quietly (&rest args)
Line 375: Line 388:
(format t "~30a ~a ~@[ (~{~a~^ ~})~]~%"
(format t "~30a ~a ~@[ (~{~a~^ ~})~]~%"
(car series) (series-description (cdr series)) (series-tags (cdr series)))
(car series) (series-description (cdr series)) (series-tags (cdr series)))
(format t "~{~a~%~}" (series-episodes series)))
(format t "~{~& ~a~%~}" (series-episodes series)))


(defun watch-series (title)
(defun watch-series (title)
Line 381: Line 394:
(format t "~30a ~@[ (~{~a~^ ~})~]~%~@[ ~a~%~]" title (series-tags series)
(format t "~30a ~@[ (~{~a~^ ~})~]~%~@[ ~a~%~]" title (series-tags series)
(series-description series))
(series-description series))
(format t "~{~a~%~}" (reverse (series-episodes series)))))
(format t "~{~& ~a~%~}" (reverse (series-episodes series)))))


(defun dump-db (database)
(defun dump-db (database)
Line 388: Line 401:


(defun watch-latest ()
(defun watch-latest ()
(format t "~{~a~%~}" (sort (get-latest *db*) #'compare-by-date)))
(format t "~{~& ~a~%~}" (sort (get-latest *db*) #'compare-by-date)))


(defun watch-all ()
(defun watch-all ()
(format t "~{~a~%~}" (sort (get-all *db*) #'compare-by-date)))
(format t "~{~& ~a~%~}" (sort (get-all *db*) #'compare-by-date)))


(defun watch-new-series (&key name description tags)
(defun watch-new-series (&key name description tags)
Line 411: Line 424:


(defun watch-series-names ()
(defun watch-series-names ()
(format T "~{~a~%~}"
(format T "~{~& ~a~%~}"
(sort (mapcar #'car *db*)
(sort (mapcar #'car *db*)
(lambda (series1 series2)
(lambda (series1 series2)
Line 419: Line 432:
(defun watch-load (dbfile)
(defun watch-load (dbfile)
(setf *db* (load-db dbfile)))
(setf *db* (load-db dbfile)))



(defun argv ()
(defun argv ()