mirror of
https://github.com/Death916/deathclock.git
synced 2026-04-10 03:04:40 -07:00
add nba logos
This commit is contained in:
parent
be4ef703b2
commit
3bc2fdfa4f
2 changed files with 55 additions and 4 deletions
|
|
@ -9,6 +9,7 @@ use iced::Fill;
|
||||||
use iced::widget::pane_grid::Configuration;
|
use iced::widget::pane_grid::Configuration;
|
||||||
use iced::widget::{column, container, image, pane_grid, row, scrollable, text};
|
use iced::widget::{column, container, image, pane_grid, row, scrollable, text};
|
||||||
use sports::Game;
|
use sports::Game;
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
pub fn main() -> iced::Result {
|
pub fn main() -> iced::Result {
|
||||||
iced::run(State::update, State::view)
|
iced::run(State::update, State::view)
|
||||||
|
|
@ -28,6 +29,7 @@ enum PaneType {
|
||||||
enum Message {
|
enum Message {
|
||||||
PaneDragged(pane_grid::DragEvent),
|
PaneDragged(pane_grid::DragEvent),
|
||||||
PaneResized(pane_grid::ResizeEvent),
|
PaneResized(pane_grid::ResizeEvent),
|
||||||
|
RunSportsUpdate,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|
@ -41,6 +43,8 @@ struct State {
|
||||||
mlb_scores: Vec<Game>,
|
mlb_scores: Vec<Game>,
|
||||||
// nfl_scores: Vec<Game>,
|
// nfl_scores: Vec<Game>,
|
||||||
panes: pane_grid::State<PaneType>,
|
panes: pane_grid::State<PaneType>,
|
||||||
|
nba_logos: HashMap<String, Vec<u8>>,
|
||||||
|
mlb_logos: HashMap<String, Vec<u8>>,
|
||||||
}
|
}
|
||||||
impl State {
|
impl State {
|
||||||
fn update(&mut self, message: Message) {
|
fn update(&mut self, message: Message) {
|
||||||
|
|
@ -52,6 +56,10 @@ impl State {
|
||||||
Message::PaneResized(pane_grid::ResizeEvent { split, ratio }) => {
|
Message::PaneResized(pane_grid::ResizeEvent { split, ratio }) => {
|
||||||
self.panes.resize(split, ratio);
|
self.panes.resize(split, ratio);
|
||||||
}
|
}
|
||||||
|
Message::RunSportsUpdate => {
|
||||||
|
self.nba_scores = sports::update_nba();
|
||||||
|
self.mlb_scores = sports::update_mlb();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -60,11 +68,23 @@ impl State {
|
||||||
let content: Element<'_, Message> = match pane_state {
|
let content: Element<'_, Message> = match pane_state {
|
||||||
PaneType::NbaPane => {
|
PaneType::NbaPane => {
|
||||||
let games = &state.nba_scores;
|
let games = &state.nba_scores;
|
||||||
|
|
||||||
column(games.iter().map(|game| {
|
column(games.iter().map(|game| {
|
||||||
|
let Some(team1_logo) = state.nba_logos.get(&game.team1) else {
|
||||||
|
return text(format!("Error: Team 1 logo not found for {}", game.team1)).into();
|
||||||
|
};
|
||||||
|
let team1_handle = image::Handle::from_bytes(team1_logo.clone());
|
||||||
|
let Some(team2_logo) = state.nba_logos.get(&game.team2) else {
|
||||||
|
return text("Error: Team 2 logo not found").into();
|
||||||
|
};
|
||||||
|
let team2_handle = image::Handle::from_bytes(team2_logo.clone());
|
||||||
|
|
||||||
container(
|
container(
|
||||||
column![
|
column![
|
||||||
row![
|
row![
|
||||||
|
image(team1_handle).width(30).height(30),
|
||||||
text(&game.team1).size(20).width(Fill),
|
text(&game.team1).size(20).width(Fill),
|
||||||
|
image(team2_handle).width(30).height(30),
|
||||||
text(&game.team2).size(20).width(Fill),
|
text(&game.team2).size(20).width(Fill),
|
||||||
],
|
],
|
||||||
row![
|
row![
|
||||||
|
|
@ -104,13 +124,13 @@ impl State {
|
||||||
PaneType::News => text("News").into(),
|
PaneType::News => text("News").into(),
|
||||||
PaneType::MlbPane => {
|
PaneType::MlbPane => {
|
||||||
let games = &state.mlb_scores;
|
let games = &state.mlb_scores;
|
||||||
let logos = sports::get_mlb_logos(); // TODO: MOVE TO INITIALIZATION AND CACHE
|
// TODO: MOVE TO INITIALIZATION AND CACHE
|
||||||
scrollable(column(games.iter().map(|game| {
|
scrollable(column(games.iter().map(|game| {
|
||||||
let Some(team1_logo) = logos.get(&game.team1) else {
|
let Some(team1_logo) = state.mlb_logos.get(&game.team1) else {
|
||||||
return text("Error: Team 1 logo not found").into();
|
return text(format!("Error: Team 1 logo not found for {}", game.team1)).into();
|
||||||
};
|
};
|
||||||
let team1_handle = image::Handle::from_bytes(team1_logo.clone());
|
let team1_handle = image::Handle::from_bytes(team1_logo.clone());
|
||||||
let Some(team2_logo) = logos.get(&game.team2) else {
|
let Some(team2_logo) = state.mlb_logos.get(&game.team2) else {
|
||||||
return text("Error: Team 2 logo not found").into();
|
return text("Error: Team 2 logo not found").into();
|
||||||
};
|
};
|
||||||
let team2_handle = image::Handle::from_bytes(team2_logo.clone());
|
let team2_handle = image::Handle::from_bytes(team2_logo.clone());
|
||||||
|
|
@ -196,6 +216,9 @@ impl Default for State {
|
||||||
.read_to_vec()
|
.read_to_vec()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
let mlb_logos = sports::get_mlb_logos();
|
||||||
|
let nba_logos = sports::get_nba_logos();
|
||||||
|
|
||||||
State {
|
State {
|
||||||
current_time: Local::now(),
|
current_time: Local::now(),
|
||||||
next_alarm: None,
|
next_alarm: None,
|
||||||
|
|
@ -204,6 +227,8 @@ impl Default for State {
|
||||||
location: "Sacramento".to_string(),
|
location: "Sacramento".to_string(),
|
||||||
nba_scores: { sports::update_nba() },
|
nba_scores: { sports::update_nba() },
|
||||||
mlb_scores: { sports::update_mlb() },
|
mlb_scores: { sports::update_mlb() },
|
||||||
|
mlb_logos,
|
||||||
|
nba_logos,
|
||||||
panes: {
|
panes: {
|
||||||
let config = Configuration::Split {
|
let config = Configuration::Split {
|
||||||
axis: pane_grid::Axis::Horizontal,
|
axis: pane_grid::Axis::Horizontal,
|
||||||
|
|
|
||||||
|
|
@ -161,3 +161,29 @@ pub fn get_mlb_logos() -> HashMap<String, Vec<u8>> {
|
||||||
}
|
}
|
||||||
logos_svg_map
|
logos_svg_map
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_nba_logos() -> HashMap<String, Vec<u8>> {
|
||||||
|
let json = std::fs::read_to_string("src/files/nba_logos.json").unwrap();
|
||||||
|
let parsed_json: serde_json::Value = serde_json::from_str(&json).unwrap();
|
||||||
|
let teams = parsed_json.as_array().unwrap();
|
||||||
|
|
||||||
|
let mut logos_map = std::collections::HashMap::new();
|
||||||
|
for team in teams {
|
||||||
|
let team_name = team["name"].as_str().unwrap();
|
||||||
|
let logo_url = team["logo"].as_str().unwrap();
|
||||||
|
logos_map.insert(team_name.to_string(), logo_url.to_string());
|
||||||
|
}
|
||||||
|
let mut nba_svg_map = std::collections::HashMap::new();
|
||||||
|
for (team_name, logo_url) in logos_map.iter() {
|
||||||
|
let response = ureq::get(logo_url)
|
||||||
|
.header("User-Agent", "deathclock-app/0.1")
|
||||||
|
.call()
|
||||||
|
.unwrap();
|
||||||
|
println!("Response {}", response.status());
|
||||||
|
|
||||||
|
let image_data = response.into_body().read_to_vec().unwrap();
|
||||||
|
nba_svg_map.insert(team_name.to_string(), image_data);
|
||||||
|
println!("Downloaded logo for {}", team_name);
|
||||||
|
}
|
||||||
|
nba_svg_map
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue