make listenbrainz widget
This commit is contained in:
		
							parent
							
								
									3ac85babe9
								
							
						
					
					
						commit
						859f9fe9f8
					
				| 
						 | 
				
			
			@ -2,6 +2,12 @@
 | 
			
		|||
# It is not intended for manual editing.
 | 
			
		||||
version = 3
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "adler"
 | 
			
		||||
version = "1.0.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "aead"
 | 
			
		||||
version = "0.5.1"
 | 
			
		||||
| 
						 | 
				
			
			@ -96,6 +102,21 @@ dependencies = [
 | 
			
		|||
 "autocfg",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "attohttpc"
 | 
			
		||||
version = "0.24.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "b85f766c20e6ae766956f7a2fcc4e0931e79a7e1f48b29132b5d647021114914"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "flate2",
 | 
			
		||||
 "http",
 | 
			
		||||
 "log",
 | 
			
		||||
 "native-tls",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "serde_json",
 | 
			
		||||
 "url",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "atty"
 | 
			
		||||
version = "0.2.14"
 | 
			
		||||
| 
						 | 
				
			
			@ -283,6 +304,15 @@ dependencies = [
 | 
			
		|||
 "libc",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "crc32fast"
 | 
			
		||||
version = "1.3.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cfg-if 1.0.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "crypto-common"
 | 
			
		||||
version = "0.1.6"
 | 
			
		||||
| 
						 | 
				
			
			@ -447,6 +477,16 @@ dependencies = [
 | 
			
		|||
 "windows-sys",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "flate2"
 | 
			
		||||
version = "1.0.25"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "crc32fast",
 | 
			
		||||
 "miniz_oxide",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "fnv"
 | 
			
		||||
version = "1.0.7"
 | 
			
		||||
| 
						 | 
				
			
			@ -962,6 +1002,17 @@ dependencies = [
 | 
			
		|||
 "cc",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "listenbrainz"
 | 
			
		||||
version = "0.5.0"
 | 
			
		||||
source = "git+https://sectorinf.com/cel/listenbrainz-rs.git#b0cd2d6b8aa3d56fa3308a741cadc365d3683b6c"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "attohttpc",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "serde_json",
 | 
			
		||||
 "thiserror",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "lock_api"
 | 
			
		||||
version = "0.4.9"
 | 
			
		||||
| 
						 | 
				
			
			@ -1017,6 +1068,15 @@ version = "0.3.16"
 | 
			
		|||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "miniz_oxide"
 | 
			
		||||
version = "0.6.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "adler",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "mio"
 | 
			
		||||
version = "0.6.23"
 | 
			
		||||
| 
						 | 
				
			
			@ -1840,9 +1900,11 @@ checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
 | 
			
		|||
name = "site"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "listenbrainz",
 | 
			
		||||
 "reqwest",
 | 
			
		||||
 "rocket",
 | 
			
		||||
 "rocket_dyn_templates",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "tokio",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,4 +9,6 @@ edition = "2021"
 | 
			
		|||
rocket = { version = "0.5.0-rc.2", features = ["json"] }
 | 
			
		||||
reqwest = { version = "0.11", features = ["json"] }
 | 
			
		||||
tokio = { version = "1", features = ["full"] }
 | 
			
		||||
serde = { version = "1.0", features = ["derive"] }
 | 
			
		||||
rocket_dyn_templates = { version = "0.1.0-rc.2", features = ["tera"] }
 | 
			
		||||
listenbrainz = { git = "https://sectorinf.com/cel/listenbrainz-rs.git" }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										62
									
								
								src/main.rs
								
								
								
								
							
							
						
						
									
										62
									
								
								src/main.rs
								
								
								
								
							| 
						 | 
				
			
			@ -1,13 +1,71 @@
 | 
			
		|||
use listenbrainz::raw::response::UserPlayingNowResponse;
 | 
			
		||||
use rocket::fs::{relative, FileServer};
 | 
			
		||||
use rocket::{response::Responder, serde::json::Json};
 | 
			
		||||
use rocket::response::Responder;
 | 
			
		||||
use rocket_dyn_templates::{context, Template};
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
#[macro_use]
 | 
			
		||||
extern crate rocket;
 | 
			
		||||
 | 
			
		||||
#[derive(Serialize, Deserialize)]
 | 
			
		||||
struct ScrobbleData {
 | 
			
		||||
    is_scrobbling: bool,
 | 
			
		||||
    song: Option<String>,
 | 
			
		||||
    artist: Option<String>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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,
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[get("/")]
 | 
			
		||||
async fn home() -> Template {
 | 
			
		||||
    Template::render("home", context! { is_live: true, is_scrobbling: true })
 | 
			
		||||
    let listenbrainz = listenbrainz::raw::Client::new();
 | 
			
		||||
    let playingnow = listenbrainz.user_playing_now("celblossom").unwrap();
 | 
			
		||||
    println!(
 | 
			
		||||
        "{}",
 | 
			
		||||
        playingnow.payload.listens[0].track_metadata.artist_name
 | 
			
		||||
    );
 | 
			
		||||
    let listenbrainz_data = ScrobbleData::new(playingnow);
 | 
			
		||||
    println!("{}", listenbrainz_data.is_scrobbling);
 | 
			
		||||
 | 
			
		||||
    Template::render(
 | 
			
		||||
        "home",
 | 
			
		||||
        context! { is_live: false, listenbrainz: listenbrainz_data },
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[get("/contact")]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,8 +20,8 @@
 | 
			
		|||
</iframe>
 | 
			
		||||
{% endif %}
 | 
			
		||||
 | 
			
		||||
{% if is_scrobbling %}
 | 
			
		||||
<a href="https://listenbrainz.org/user/celblossom" class="panel" id="scrobble">now playing: Parfum d'étoiles - Ichiko Aoba</a>
 | 
			
		||||
{% if listenbrainz.is_scrobbling %}
 | 
			
		||||
<a href="https://listenbrainz.org/user/celblossom" class="panel" id="scrobble">now playing: {{ listenbrainz.song }} - {{ listenbrainz.artist }}</a>
 | 
			
		||||
{% endif %}
 | 
			
		||||
  
 | 
			
		||||
{% endblock header %}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue