add frontpage files to the rss feed
1 files changed, 99 insertions(+), 87 deletions(-)

M site.arc
M site.arc +99 -87
@@ 27,51 27,55 @@ 
          frontpage-folder (string base "/frontpage/")
          ;; a folder holding extra files for the frontpage.
          ;; each of them should be a serialized arc obj
-         ;; with keys date and frontpage.
+         ;; with keys date, frontpage, and navbar.
          ;; The date value is used for sorting,
          ;; and the frontpage value is printed on the frontpage.
 
          codegen-folder (string base "/codegen/"))
-        (unless (dir-exists published-folder)
-          (err (string "Where's your published folder? I'm expecting it to be at " published-folder)))
-        (when (dir-exists output-folder)
-          (system (string "rm -r " output-folder)))
-        (ensure-dir output-folder)
-        (msince start-time "Getting divs-and-scripts: ")
-        (with (navbar-div (get-navbar-div published-folder config)
-               analytics-script (get-analytics-script base)
-               src-filepaths (get-src-filepaths published-folder)
-               codegen-filepaths (get-codegen-filepaths codegen-folder)
-               tag-map (get-tags published-folder))
-              (msince start-time "Copying pregenerated folder: ")
-              (when (dir-exists pregenerated-folder)
-                (copy-pregenerated-folder pregenerated-folder output-folder analytics-script))
-              (msince start-time "Generating rss feed: ")
-              (generate-rss-feed (string output-folder "feed.rss") src-filepaths config)
-              (msince start-time "Generating pages: ")
-              (each src-filepath src-filepaths
-                    (genpage src-filepath
-                             output-folder
-                             navbar-div
-                             analytics-script
-                             config
-                             tag-map))
-              (msince start-time "Codegeneration: ")
-              (each codegen-filepath codegen-filepaths
-                    (codegenpage codegen-filepath
-                                 output-folder
-                                 analytics-script
-                                 config
-                                 pregenerated-folder))
-              (msince start-time "Generating frontpage: ")
-              (prn-frontpage published-folder
-                             frontpage-folder
-                             output-folder
-                             navbar-div
-                             analytics-script
-                             config)
-              (msince start-time "Generating tags page: ")
-              (prn-tagspage tag-map output-folder navbar-div analytics-script config))
+    (unless (dir-exists published-folder)
+      (err (string "Where's your published folder? I'm expecting it to be at " published-folder)))
+    (when (dir-exists output-folder)
+      (system (string "rm -r " output-folder)))
+    (ensure-dir output-folder)
+    (msince start-time "Getting divs-and-scripts: ")
+    (with (navbar-div (get-navbar-div published-folder config)
+           analytics-script (get-analytics-script base)
+           src-filepaths (get-src-filepaths published-folder)
+           frontpage-filepaths (get-frontpage-filepaths frontpage-folder)
+           codegen-filepaths (get-codegen-filepaths codegen-folder)
+           tag-map (get-tags published-folder))
+      (msince start-time "Copying pregenerated folder: ")
+      (when (dir-exists pregenerated-folder)
+        (copy-pregenerated-folder pregenerated-folder output-folder analytics-script))
+      (msince start-time "Generating rss feed: ")
+      ;; (generate-rss-feed (string output-folder "feed.rss") src-filepaths config)
+      (generate-rss-feed (string output-folder "feed.rss") (join src-filepaths frontpage-filepaths) config)
+      (msince start-time "Generating pages: ")
+      (prn "frontpage-filepaths: " frontpage-filepaths)
+      (prn "src-filepaths: " src-filepaths)
+      (each src-filepath src-filepaths
+        (genpage src-filepath
+                 output-folder
+                 navbar-div
+                 analytics-script
+                 config
+                 tag-map))
+      (msince start-time "Codegeneration: ")
+      (each codegen-filepath codegen-filepaths
+        (codegenpage codegen-filepath
+                     output-folder
+                     analytics-script
+                     config
+                     pregenerated-folder))
+      (msince start-time "Generating frontpage: ")
+      (prn-frontpage published-folder
+                     frontpage-folder
+                     output-folder
+                     navbar-div
+                     analytics-script
+                     config)
+      (msince start-time "Generating tags page: ")
+      (prn-tagspage tag-map output-folder navbar-div analytics-script config))
         (prn "generated site at "
              base
              " in "

          
@@ 107,6 111,10 @@ This returns fully qualified path names.
          (map [string codegen-folder "/" _]
               filenames))))
 
+(def get-frontpage-filepaths (frontpage-folder)
+  (let raw-pathnames (map [string frontpage-folder "/" _] (dir frontpage-folder))
+    (keep file-exists raw-pathnames)))
+
 (def get-config (config-location)
   "Get the config, as a hash from CONFIG-LOCATION.
 

          
@@ 160,9 168,12 @@ page-specific-headers"
 
 (def get-body (filepath)
   (w/infile infile filepath
-            (when (is (peekc infile) #\()
-              (read-table infile))
-            (string (drain (readline infile)))))
+    (with (options (when (is (peekc infile) #\()
+                     (read-table infile))
+           body-after-options (string (drain (readline infile))))
+      (if (blank body-after-options)
+          options!frontpage
+          body-after-options))))
 
 (def get-option (filepath option-name (o default nil))
   "Looks at the options for filepath, and returns option-name, or default if it's not there"

          
@@ 367,28 378,28 @@ title, url-slug, body."
   (withs (published-files (keep file-exists
                                 (map [string published-folder "/" _]
                                      (dir published-folder)))
-                          frontpage-files (and frontpage-folder
-                                               (dir-exists frontpage-folder)
-                                               (keep file-exists
-                                                     (map [string frontpage-folder "/" _]
-                                                          (dir frontpage-folder))))
-                          files (+ published-files frontpage-files)
-                          sorted-options (get-sorted-options-for-files files)
-                          public-sorted-options (keep page-is-public sorted-options))
-         (w/outfile dest (+ output-folder "index.html")
-                    (w/stdout dest
-                              (prn-html-page
-                               config!sitename
-                               "index"
-                               navbar-div
-                               (obj)
-                               (instring (tostring
-                                          (prn)
-                                          (each option public-sorted-options
-                                                (awhen option!frontpage
-                                                       (prn (make-frontpage-blurb option))))))
-                               analytics-script
-                               config)))))
+         frontpage-files (and frontpage-folder
+                              (dir-exists frontpage-folder)
+                              (keep file-exists
+                                    (map [string frontpage-folder "/" _]
+                                         (dir frontpage-folder))))
+         files (+ published-files frontpage-files)
+         sorted-options (get-sorted-options-for-files files)
+         public-sorted-options (keep page-is-public sorted-options))
+      (w/outfile dest (+ output-folder "index.html")
+                 (w/stdout dest
+                           (prn-html-page
+                            config!sitename
+                            "index"
+                            navbar-div
+                            (obj)
+                            (instring (tostring
+                                       (prn)
+                                       (each option public-sorted-options
+                                             (awhen option!frontpage
+                                                    (prn (make-frontpage-blurb option))))))
+                            analytics-script
+                            config)))))
 
 (def make-frontpage-blurb (options)
   (withs (raw-blurb options!frontpage)

          
@@ 510,7 521,8 @@ for example 04 Feb 2018 00:00:00 EST."
 
 (def should-include-in-rss-feed (file-options)
   (and file-options!date
-       file-options!frontpage
+       file-options!title
+       file-options!url-slug
        (page-is-public file-options)))
 
 (def generate-rss-feed (rss-filename src-filepaths site-config)

          
@@ 521,26 533,26 @@ for example 04 Feb 2018 00:00:00 EST."
   (prn ")")
   (w/outfile rssfile rss-filename
              (w/stdout rssfile
-                       (prn "<?xml version=\"1.0\"?>")
-                       (tag (rss version "2.0"
-                                 "xml:base" site-config!site-root
-                                 "xmlns:atom" "http://www.w3.org/2005/Atom")
-                            (prn)
-                            (tag channel
-                                 (tag title (pr site-config!sitename))
-                                 (tag link (pr site-config!site-root))
-                                 (tag ("atom:link" rel "self" href (string site-config!site-root "/feed.rss")))
-                                 (tag description (pr site-config!description))
-                                 (prn)
-                                 (each (options body)
-                                       (sort (fn ((options1 body1) (options2 body2))
-                                                 (> options1!date options2!date))
-                                             (keep (fn ((options body)) (should-include-in-rss-feed options))
-                                                   (map [list (get-options _) (get-body _)]
-                                                        src-filepaths)))
-                                       (generate-rss-entry options body site-config)
-                                       (prn)))
-                            (prn)))))
+               (prn "<?xml version=\"1.0\"?>")
+               (tag (rss version "2.0"
+                         "xml:base" site-config!site-root
+                         "xmlns:atom" "http://www.w3.org/2005/Atom")
+                    (prn)
+                    (tag channel
+                         (tag title (pr site-config!sitename))
+                         (tag link (pr site-config!site-root))
+                         (tag ("atom:link" rel "self" href (string site-config!site-root "/feed.rss")))
+                         (tag description (pr site-config!description))
+                         (prn)
+                         (each (options body)
+                             (sort (fn ((options1 body1) (options2 body2))
+                                     (> options1!date options2!date))
+                                   (keep (fn ((options body)) (should-include-in-rss-feed options))
+                                         (map [list (get-options _) (get-body _)]
+                                              src-filepaths)))
+                           (generate-rss-entry options body site-config)
+                           (prn)))
+                    (prn)))))
 
 (def load-codegen (location pregenerated-folder site-root)
   "Evaluates a codegen file located at LOCATION.