From 7343913f7d05e1c15d6e8fe1a78b0b481247b1ab Mon Sep 17 00:00:00 2001
From: Doge <guiqiqi187@gmail.com>
Date: Tue, 11 May 2021 03:25:21 +0800
Subject: Add rss podcast support

---
 _config.yml     | 14 ++++++++++---
 layout/post.ejs |  4 ++--
 scripts/feed.js | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 75 insertions(+), 5 deletions(-)
 create mode 100644 scripts/feed.js

diff --git a/_config.yml b/_config.yml
index 13eea1f..1015b30 100644
--- a/_config.yml
+++ b/_config.yml
@@ -2,6 +2,7 @@ logo: false
 timeformat: "MMM, D YYYY"
 podcast: true
 lazyload: true
+copyright: 'All rights reserved.'
 highlight:
   enable: true
   lightmode: 'atom-one-light'
@@ -9,7 +10,14 @@ highlight:
 navbar:
   - ['mailto:privet@utc3.live', 'fa fa-paper-plane']
   - ['https://github.com/guiqiqi/chromate', 'fa fa-github']
-  - ['/feed', 'fa fa-rss']
+  - ['/feed/', 'fa fa-rss']
 menubar:
-  - ['/about', '关于']
-  - ['/archives', '归档']
\ No newline at end of file
+  - ['/about/', '关于']
+  - ['/archives/', '归档']
+rss:
+  enable: true
+  path: '/feed/'
+  config:
+    email: 'privet@utc3.live'
+    category: Education
+    explicit: No
\ No newline at end of file
diff --git a/layout/post.ejs b/layout/post.ejs
index fa1940a..008b20a 100644
--- a/layout/post.ejs
+++ b/layout/post.ejs
@@ -24,9 +24,9 @@
                                 container: () => document.querySelector('.post-podcast-player'),
                                 audio: {
                                     title: "<%= page.title %>",
-                                    artist: "<%= page.podcast.author %>",
+                                    artist: "<%= page.podcast.authors %>",
                                     cover: "<%= page.podcast.cover %>",
-                                    src: "<%= page.podcast.media %>"
+                                    src: "<%= page.podcast.media.url %>"
                                 },
                                 fixed: {
                                     type: "auto",
diff --git a/scripts/feed.js b/scripts/feed.js
new file mode 100644
index 0000000..f60ed90
--- /dev/null
+++ b/scripts/feed.js
@@ -0,0 +1,62 @@
+'use strict';
+
+const xml = require("xml");
+const podcast = require("podcast");
+
+hexo.extend.generator.register("feed", (locals) => {
+
+    // Load config
+    const config = hexo.config;
+    const theme = hexo.theme.config;
+    const urler = hexo.extend.helper.get("url_for").bind(hexo);
+    const strip = hexo.extend.helper.get("strip_html").bind(hexo);
+    if (!theme.rss || !theme.rss.enable) return;
+
+    // Render for site config
+    const feed = new podcast({
+        title: config.title,
+        description: config.description,
+        copyright: theme.copyright,
+        language: config.language.slice(0, 2),
+        siteUrl: config.url,
+        imageUrl: theme.logo,
+        itunesSubtitle: config.subtitle,
+        itunesSummary: config.description,
+        itunesAuthor: config.author,
+        itunesExplicit: theme.rss.config.explicit,
+        itunesCategory: theme.rss.config.category,
+        itunesOwner: {
+            name: config.author,
+            email: theme.rss.config.email
+        }
+    });
+
+    // Rendor for podcasts
+    locals.posts.sort('date', -1).each(function (post) {
+        if (!post.podcast) return;
+        feed.addItem({
+            title: post.title,
+            description: post.excerpt,
+            url: config.url + urler(post.path),
+            guid: config.url + urler(post.path),
+            author: post.podcast.authors.join(', '),
+            date: post.date,
+            enclosure: {
+                url: post.podcast.media.url,
+                type: post.podcast.media.type,
+                size: post.podcast.media.size
+            },
+            itunesAuthor: post.podcast.authors.join(', '),
+            itunesExplicit: theme.rss.config.explicit,
+            itunesSubtitle: post.podcast.subtitle,
+            itunesSummary: strip(post.excerpt),
+            itunesCategory: theme.rss.config.category,
+            itunesDuration: post.podcast.duration
+        });
+    });
+
+    return {
+        path: theme.rss.path,
+        data: feed.buildXml()
+    };
+});
-- 
cgit v1.2.3