diff --git a/src/main.rs b/src/main.rs index 2bcf28a..41c84ef 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,6 +19,7 @@ use comrak::{markdown_to_html, ComrakOptions}; use controllers::posts; use dotenv::dotenv; use misc::get_context; +use rocket::response::content; use rocket::response::NamedFile; use rocket::Request; use rocket_contrib::serve::StaticFiles; @@ -42,6 +43,52 @@ fn index(page: Option<u64>) -> Template { Template::render("index", context) } +#[get("/feed.xml")] +fn rss_feed() -> content::Xml<Template> { + let mut context = get_context(); + let (mut posts, _) = posts::get_posts(None); + + let comrak_options = ComrakOptions { + ext_table: true, + ext_autolink: true, + ext_tasklist: true, + unsafe_: true, + ..ComrakOptions::default() + }; + + posts.iter_mut().for_each(|post| { + let content = markdown_to_html(&post.content, &comrak_options); + post.content = content; + }); + + context.insert("posts", &posts); + + content::Xml(Template::render("rss", context)) +} + +#[get("/atom.xml")] +fn atom_feed() -> content::Xml<Template> { + let mut context = get_context(); + let (mut posts, _) = posts::get_posts(None); + + let comrak_options = ComrakOptions { + ext_table: true, + ext_autolink: true, + ext_tasklist: true, + unsafe_: true, + ..ComrakOptions::default() + }; + + posts.iter_mut().for_each(|post| { + let content = markdown_to_html(&post.content, &comrak_options); + post.content = content; + }); + + context.insert("posts", &posts); + + content::Xml(Template::render("atom", context)) +} + #[get("/post/<title>")] fn show_post(title: String) -> Template { let mut context = get_context(); @@ -93,7 +140,7 @@ fn main() { rocket::ignite() .attach(Template::fairing()) - .mount("/", routes![index, show_post, favicon]) + .mount("/", routes![index, show_post, favicon, rss_feed, atom_feed]) .mount("/admin", admin::get_routes()) .mount("/static", StaticFiles::from("static")) .register(catchers![not_found_404]) diff --git a/templates/atom.html.tera b/templates/atom.html.tera new file mode 100644 index 0000000..13b6511 --- /dev/null +++ b/templates/atom.html.tera @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<feed xmlns="http://www.w3.org/2005/Atom"> + <title>Código Comentado</title> + <link href="https://blog.kirbylife.dev" rel="alternate" /> + <link href="https://blog.kirbylife.dev/atom.xml" rel="self" /> + <id>"https://blog.kirbylife.dev"</id> + <subtitle>Blog personal de kirbylife</subtitle> + <updated>{{ posts.0.created_at | date(format="%Y-%m-%d") }}</updated> + <author> + <name>kirbylife</name> + <email>hola@kirbylife.dev</email> + </author> + {%- for post in posts %} + <entry> + <title>{{ post.title }}</title> + <link>https://blog.kirbylife.dev/post/{{ post.title | slugify }}-{{ post.id }}</link> + <published>{{ post.created_at | date(format="%Y-%m-%d") }}</published> + <updated>{{ post.created_at | date(format="%Y-%m-%d") }}</updated> + <author> + <name>kirbylife</name> + <email>hola@kirbylife.dev</email> + </author> + <id>tag:blog.kirbylife.dev,{{ post.created_at | date(format="%Y-%m-%d") }}:/post/{{ post.id }}</id> + <content type="html">{{ post.content }}</content> + </entry> + {%- endfor %} +</feed> diff --git a/templates/base.html.tera b/templates/base.html.tera index 749a595..db45ab6 100644 --- a/templates/base.html.tera +++ b/templates/base.html.tera @@ -38,7 +38,7 @@ </div> <footer> <span> - Hecho con Rust, Rocket y Emacs por <a href="https://kirbylife.gitlab.io">@kirbylife</a> + Hecho con Rust y Rocket por <a href="https://kirbylife.dev">@kirbylife</a> - <a href="/feed.xml">RSS</a> - <a href="/atom.xml">Atom</a> </span> </footer> {% block extrajs %} diff --git a/templates/rss.html.tera b/templates/rss.html.tera new file mode 100644 index 0000000..51783c5 --- /dev/null +++ b/templates/rss.html.tera @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<rss version="2.0"> + <channel> + <title>Código Comentado</title> + <link>https://blog.kirbylife.dev</link> + <description>Blog personal de kirbylife</description> + <language>es-mx</language> + <webMaster>https://kirbylife.dev</webMaster> + <managingEditor>https://kirbylife.dev</managingEditor> + <generator>Rocket</generator> + {%- for post in posts %} + <item> + <title>{{ post.title }}</title> + <pubDate>{{ post.created_at | date(format="%Y-%m-%d") }}</pubDate> + <link>https://blog.kirbylife.dev/post/{{ post.title | slugify }}-{{ post.id }}</link> + <guid isPermaLink="true">https://blog.kirbylife.dev/post/{{ post.id }}</guid> + <description>{{ post.content }}</description> + </item> + {%- endfor %} + </channel> +</rss>