48 lines
1.2 KiB
Rust
48 lines
1.2 KiB
Rust
use chrono::{Datelike, Local};
|
|
use dioxus::prelude::*;
|
|
use prost_types::Timestamp;
|
|
|
|
use crate::{
|
|
components::playback::{Timeline, Viewport},
|
|
rpc::{azki::MediaPlaybackRequest, get_rpc_client},
|
|
};
|
|
const PLAYER_CSS: Asset = asset!("/assets/styling/player.scss");
|
|
|
|
#[component]
|
|
pub fn Player() -> Element {
|
|
let playbackResult = use_resource(|| async move {
|
|
let mut client = get_rpc_client();
|
|
let now = Local::now();
|
|
let from = Timestamp::date(now.year() as i64, now.month() as u8, now.day() as u8 - 4).unwrap();
|
|
let result = client
|
|
.get_media_playback(MediaPlaybackRequest { date: Some(from) })
|
|
.await;
|
|
if let Ok(entries) = result {
|
|
let res = entries.into_inner();
|
|
return Ok(res);
|
|
} else {
|
|
let err = result.err().unwrap();
|
|
let msg = err.message();
|
|
return Err(format!("Failed to load results: {msg}"));
|
|
}
|
|
});
|
|
let info = match playbackResult.cloned() {
|
|
Some(value) => match value {
|
|
Ok(result) => Some(result),
|
|
Err(_) => None,
|
|
},
|
|
_ => None,
|
|
};
|
|
rsx! {
|
|
document::Link { rel: "stylesheet", href: PLAYER_CSS }
|
|
div{
|
|
id: "player",
|
|
div {
|
|
id: "head",
|
|
}
|
|
Viewport { }
|
|
Timeline { playbackInfo: info }
|
|
}
|
|
}
|
|
}
|