#!/usr/local/bin/gosh
;; -*- mode: gauche -*-
(use srfi-1)
(use srfi-13)
(use file.util)
(use sxml.serializer)
(use util.list)

(define-constant index-rdf "index.rdf")

(define-constant prune-dirs
  `("_darcs"
    "rsrn"
    ))

(define-constant ignore-files
  `("index.html"
    ,index-rdf
    ".DS_Store"
    ))

(define-constant ignore-suffices
  '(".gif"
    ".jpg"
    ".jpeg"
    ".png"))

(define (prune-dir? path)
  (or (member path prune-dirs)
      ))

(define (ignore-file? path)
  (or (member path ignore-files)
      (any (cut string-suffix? <> path) ignore-suffices)
      ))

(define (make-rss-sxml path base-url)
  (define (dir-list-rec p)
    (receive (dirs files) (directory-list2 p
                                           :children? #t
                                           :add-path? #t
                                           :filter (complement
                                                    (any-pred prune-dir?
                                                              ignore-file?)))
      (append files (concatenate (map dir-list-rec dirs)))))
  (let* ((files (take* (sort (dir-list-rec path) (lambda (x y)
                                                   (file-mtime>? x y))) 15))
         (urls (map (lambda (p) (build-path base-url (simplify-path p))) files)))
    `(*TOP*
      (@@ (*NAMESPACES*
           (dc "http://purl.org/dc/elements/1.1/")
           (rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#")))
      (rdf:RDF
       (@ (xmlns "http://purl.org/rss/1.0/"))
       (channel
        (@ (rdf:about ,base-url))
        (title ,base-url)
        (description ,base-url)
        (link ,base-url)
        (items
         (rdf:Seq
          ,@(map (lambda (u)
                   `(rdf:li (@ (resource ,u))))
                 urls))))
       ,@(map (lambda (p url)
                `(item
                  (@ (rdf:about ,url))
                  (title ,p)
                  (link ,url)
                  (dc:date ,(sys-strftime "%Y-%m-%dT%H:%M:%S+00:00"
                                          (sys-gmtime (file-mtime p))))))
              files urls)))))

(define (main args)
  (srl:parameterizable
   (make-rss-sxml (second args) (third args))
   index-rdf
   '(indent . " ")
   '(omit-xml-declaration . #f))
  0)

