#! /usr/bin/guile \
-e main -s
!#
(use-modules (sxml simple))
(define site-url "https://shittyweb.org")
;; Generate description from article file
(define (get-description file)
  (call-with-input-file file
    (lambda (fp)
      (letrec ((read-characters
                (lambda (fp)
                  (let ((character (read-char fp)))
                    (unless (eof-object? character)
                      (display character)
                      (read-characters fp))))))
        (display "\n")))))
(define (format-article-filename file)
  (let ((file-length (string-length file)))
    (string-append (substring file
                              0
                              (- file-length 4))
                   ".xhtml")))
;; Generate rss item
(define (make-item article)
  (let ((title (cadr (list-ref article 0)))
        (pub-date (cadr (list-ref article 4)))
        (file (cadr (list-ref article 6))))
    (format #t "\n    - \n\
        ~a\n\
        ~a/blog/~a\n\
        ~a\n\
        \n"
            title site-url (format-article-filename file) pub-date)
    (get-description file)
    (display "        \n")
    (display "    
 \n")))
    
;; Generate rss feed
(define (generate-feed)
  ;; Display the rss header
  (format #t "\n\
\n\
  \n\
    Nathan's shitty blog\n\
    The coffee powered blog of chaos\n\
    ~a/blog\n\
    \n\
      ~a/images/icon.png\n\
      Nathan's shitty blog\n\
      ~a/blog\n\
    \n" site-url site-url site-url)
  (call-with-input-file "articles.xml"
    (lambda (fp)
      (let ((articles (xml->sxml fp)))
        (for-each (lambda (article)
                    (if (list? article)
                      (make-item (cddr article))))
                  (cdr (cadr articles))))))
  (display "  \n")
  (display "\n"))
(define (main args)
  (generate-feed))