aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs113
1 files changed, 24 insertions, 89 deletions
diff --git a/src/main.rs b/src/main.rs
index 1a2aab7..ba7bed0 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,82 +1,27 @@
-use std::borrow::Cow;
-
-use listenbrainz::raw::response::UserPlayingNowResponse;
-use mastodon_async::{Data, Mastodon};
use rocket::fs::{relative, FileServer};
use rocket::http::Status;
-use rocket::response::Responder;
use rocket::Request;
+use rocket::State;
use rocket_dyn_templates::{context, Template};
-use serde::{Deserialize, Serialize};
+use std::borrow::Cow;
-#[macro_use]
-extern crate rocket;
+mod scrobbles;
+mod skweets;
-#[derive(Serialize, Deserialize)]
-struct ScrobbleData {
- is_scrobbling: bool,
- song: Option<String>,
- artist: Option<String>,
+struct Clients {
+ listenbrainz: listenbrainz::raw::Client,
+ skinnyverse: mastodon_async::Mastodon,
}
-impl ScrobbleData {
- fn new(playingnow: UserPlayingNowResponse) -> Self {
- let is_scrobbling = playingnow.payload.count > 0;
- if is_scrobbling {
- Self {
- is_scrobbling,
- song: Some(
- playingnow
- .payload
- .listens
- .first()
- .unwrap()
- .track_metadata
- .track_name
- .clone(),
- ),
- artist: Some(
- playingnow
- .payload
- .listens
- .first()
- .unwrap()
- .track_metadata
- .artist_name
- .clone(),
- ),
- }
- } else {
- Self {
- is_scrobbling,
- song: None,
- artist: None,
- }
- }
- }
-}
+#[macro_use]
+extern crate rocket;
#[get("/")]
-async fn home() -> Template {
- let listenbrainz = listenbrainz::raw::Client::new();
- let playingnow = listenbrainz.user_playing_now("celblossom").unwrap();
- let listenbrainz_data = ScrobbleData::new(playingnow);
-
- let mut skinny_data = Data::default();
- skinny_data.base = Cow::from("https://skinnyver.se");
- let skinny_client = Mastodon::from(skinny_data);
- let mut skweets = skinny_client
- .statuses("cel", Default::default())
- .await
- .unwrap()
- .initial_items;
-
- skweets.truncate(6);
-
- Template::render(
+async fn home(clients: &State<Clients>) -> Result<Template, BlossomError> {
+ Ok(Template::render(
"home",
- context! { is_live: false, listenbrainz: listenbrainz_data, skweets: skweets },
- )
+ context! { is_live: false, listenbrainz: scrobbles::get_now_playing(&clients.listenbrainz).await?, skweets: skweets::get_recents(&clients.skinnyverse).await? },
+ ))
}
#[get("/contact")]
@@ -89,16 +34,8 @@ async fn plants() -> Result<Template, BlossomError> {
todo!()
}
-// #[get("/test")]
-// async fn test() -> Result<Template, BlossomError> {
-// let posts = reqwest::get("https://skinnyver.se/api/v1/accounts/cel/statuses")
-// .await?
-// .json()
-// .await?;
-// }
-
#[catch(default)]
-fn error(status: Status, req: &Request) -> Template {
+fn catcher(status: Status, req: &Request) -> Template {
let message;
if status.code == 404 {
message = "i either haven't built this page yet or it looks like you're a little lost";
@@ -118,12 +55,19 @@ fn error(status: Status, req: &Request) -> Template {
#[tokio::main]
async fn main() -> Result<(), rocket::Error> {
+ let mut skinny_data = mastodon_async::Data::default();
+ skinny_data.base = Cow::from("https://skinnyver.se");
+
let _rocket = rocket::build()
+ .manage(Clients {
+ listenbrainz: listenbrainz::raw::Client::new(),
+ skinnyverse: mastodon_async::Mastodon::from(skinny_data),
+ })
.attach(Template::custom(|engines| {
engines.tera.autoescape_on(vec![]);
}))
.mount("/", routes![home, contact])
- .register("/", catchers![error])
+ .register("/", catchers![catcher])
.mount("/", FileServer::from(relative!("static")))
.launch()
.await?;
@@ -131,14 +75,5 @@ async fn main() -> Result<(), rocket::Error> {
Ok(())
}
-#[derive(Responder)]
-enum BlossomError {
- #[response(status = 500)]
- Reqwest(&'static str, #[response(ignore)] reqwest::Error),
-}
-
-impl From<reqwest::Error> for BlossomError {
- fn from(e: reqwest::Error) -> Self {
- BlossomError::Reqwest("reqwest error", e)
- }
-}
+mod error;
+use error::BlossomError;