Configure URL via config; dd Rocket.toml example file
Also ignore a local `Rocket.toml`; it can be used for development without committing it.
This commit is contained in:
parent
aac6248878
commit
6efae911de
|
@ -1 +1,2 @@
|
||||||
/target
|
/target
|
||||||
|
Rocket.toml
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[default]
|
||||||
|
address = "0.0.0.0"
|
||||||
|
port = 7062
|
||||||
|
url = "https://my.domain.tld/podbringer"
|
18
src/lib.rs
18
src/lib.rs
|
@ -11,8 +11,10 @@ use std::process::Stdio;
|
||||||
|
|
||||||
use chrono::{DateTime, NaiveDateTime, Utc};
|
use chrono::{DateTime, NaiveDateTime, Utc};
|
||||||
use reqwest::Url;
|
use reqwest::Url;
|
||||||
|
use rocket::fairing::AdHoc;
|
||||||
use rocket::response::stream::ReaderStream;
|
use rocket::response::stream::ReaderStream;
|
||||||
use rocket::{get, routes, Build, Responder, Rocket};
|
use rocket::serde::{Deserialize, Serialize};
|
||||||
|
use rocket::{get, routes, Build, Responder, Rocket, State};
|
||||||
use rss::extension::itunes::ITunesItemExtensionBuilder;
|
use rss::extension::itunes::ITunesItemExtensionBuilder;
|
||||||
use rss::{
|
use rss::{
|
||||||
CategoryBuilder, ChannelBuilder, EnclosureBuilder, GuidBuilder, ImageBuilder, ItemBuilder,
|
CategoryBuilder, ChannelBuilder, EnclosureBuilder, GuidBuilder, ImageBuilder, ItemBuilder,
|
||||||
|
@ -21,6 +23,14 @@ use tokio::process::{ChildStdout, Command};
|
||||||
|
|
||||||
pub(crate) mod mixcloud;
|
pub(crate) mod mixcloud;
|
||||||
|
|
||||||
|
/// The extra application specific configuration.
|
||||||
|
#[derive(Debug, Deserialize, Serialize)]
|
||||||
|
#[serde(crate = "rocket::serde")]
|
||||||
|
pub(crate) struct Config {
|
||||||
|
#[serde(default)]
|
||||||
|
url: String,
|
||||||
|
}
|
||||||
|
|
||||||
/// A Rocket responder wrapper type for RSS feeds.
|
/// A Rocket responder wrapper type for RSS feeds.
|
||||||
#[derive(Responder)]
|
#[derive(Responder)]
|
||||||
#[response(content_type = "application/xml")]
|
#[response(content_type = "application/xml")]
|
||||||
|
@ -28,7 +38,7 @@ struct RssFeed(String);
|
||||||
|
|
||||||
/// Handler for retrieving the RSS feed of an Mixcloud user.
|
/// Handler for retrieving the RSS feed of an Mixcloud user.
|
||||||
#[get("/<username>")]
|
#[get("/<username>")]
|
||||||
async fn feed(username: &str) -> Option<RssFeed> {
|
async fn feed(username: &str, config: &State<Config>) -> Option<RssFeed> {
|
||||||
let user = mixcloud::get_user(username).await?;
|
let user = mixcloud::get_user(username).await?;
|
||||||
let cloudcasts = mixcloud::get_cloudcasts(username).await?;
|
let cloudcasts = mixcloud::get_cloudcasts(username).await?;
|
||||||
let mut last_build = DateTime::<Utc>::from_utc(NaiveDateTime::from_timestamp(0, 0), Utc);
|
let mut last_build = DateTime::<Utc>::from_utc(NaiveDateTime::from_timestamp(0, 0), Utc);
|
||||||
|
@ -42,7 +52,8 @@ async fn feed(username: &str) -> Option<RssFeed> {
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|cloudcast| {
|
.map(|cloudcast| {
|
||||||
let slug = cloudcast.slug;
|
let slug = cloudcast.slug;
|
||||||
let mut url = Url::parse("http://localhost:8000/download").unwrap();
|
let mut url = Url::parse(&config.url).unwrap();
|
||||||
|
url.set_path(&format!("{}/download", &url.path()[1..]));
|
||||||
url.query_pairs_mut().append_pair("url", &cloudcast.url);
|
url.query_pairs_mut().append_pair("url", &cloudcast.url);
|
||||||
let description = format!("Taken from Mixcloud: <{}>", cloudcast.url);
|
let description = format!("Taken from Mixcloud: <{}>", cloudcast.url);
|
||||||
let keywords = cloudcast
|
let keywords = cloudcast
|
||||||
|
@ -142,4 +153,5 @@ pub fn setup() -> Rocket<Build> {
|
||||||
rocket::build()
|
rocket::build()
|
||||||
.mount("/mixcloud", routes![feed])
|
.mount("/mixcloud", routes![feed])
|
||||||
.mount("/download", routes![download])
|
.mount("/download", routes![download])
|
||||||
|
.attach(AdHoc::config::<Config>())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue