diff --git a/assets/logos/series-troxide-grayscaled.svg b/assets/logos/series-troxide-grayscaled.svg
new file mode 100644
index 0000000..8327356
--- /dev/null
+++ b/assets/logos/series-troxide-grayscaled.svg
@@ -0,0 +1,358 @@
+
+
+
+
diff --git a/src/gui/assets.rs b/src/gui/assets.rs
index 47b918b..3a66af4 100644
--- a/src/gui/assets.rs
+++ b/src/gui/assets.rs
@@ -22,6 +22,8 @@ pub mod icons {
pub static GITHUB_ICON: &[u8] = include_bytes!("../../assets/icons/github.svg");
pub static TRAKT_ICON_RED: &[u8] = include_bytes!("../../assets/logos/trakt-icon-red.svg");
pub static SERIES_TROXIDE_ICON: &[u8] = include_bytes!("../../assets/logos/series-troxide.svg");
+ pub static SERIES_TROXIDE_GRAY_SCALED_ICON: &[u8] =
+ include_bytes!("../../assets/logos/series-troxide-grayscaled.svg");
}
pub mod fonts {
diff --git a/src/gui/helpers.rs b/src/gui/helpers.rs
index cf3563c..d0916cb 100644
--- a/src/gui/helpers.rs
+++ b/src/gui/helpers.rs
@@ -22,6 +22,19 @@ pub fn season_episode_str_gen(season_number: u32, episode_number: u32) -> String
)
}
+pub fn genres_with_pipes(genres: &[String]) -> String {
+ let mut genres_string = String::new();
+
+ let mut series_result_iter = genres.iter().peekable();
+ while let Some(genre) = series_result_iter.next() {
+ genres_string.push_str(genre);
+ if series_result_iter.peek().is_some() {
+ genres_string.push_str(" | ");
+ }
+ }
+ genres_string
+}
+
pub mod time {
//! Time related helpers
use chrono::Duration;
@@ -157,15 +170,14 @@ pub mod time {
}
}
-pub fn genres_with_pipes(genres: &[String]) -> String {
- let mut genres_string = String::new();
+pub mod empty_image {
+ use crate::gui::assets::icons::SERIES_TROXIDE_GRAY_SCALED_ICON;
- let mut series_result_iter = genres.iter().peekable();
- while let Some(genre) = series_result_iter.next() {
- genres_string.push_str(genre);
- if series_result_iter.peek().is_some() {
- genres_string.push_str(" | ");
- }
+ use iced::widget::{svg, Svg};
+
+ /// Placeholder for an empty image
+ pub fn empty_image() -> Svg {
+ let icon_handle = svg::Handle::from_memory(SERIES_TROXIDE_GRAY_SCALED_ICON);
+ svg(icon_handle)
}
- genres_string
}
diff --git a/src/gui/series_page/series/cast_widget.rs b/src/gui/series_page/series/cast_widget.rs
index 7484517..a04ba1b 100644
--- a/src/gui/series_page/series/cast_widget.rs
+++ b/src/gui/series_page/series/cast_widget.rs
@@ -247,6 +247,8 @@ mod cast_poster {
pub fn view(&self) -> Element<'_, IndexedMessage, Renderer> {
let mut content = Row::new().spacing(10);
+ let empty_image = helpers::empty_image::empty_image().width(100).height(140);
+
match self.current_display_image {
DisplayImage::Person => {
if let Some(image_bytes) = self.person_image.clone() {
@@ -255,7 +257,7 @@ mod cast_poster {
let image = image(image_handle).width(100);
content = content.push(image);
} else {
- content = content.push(Space::new(100, 140));
+ content = content.push(empty_image);
};
}
DisplayImage::Character => {
@@ -265,7 +267,7 @@ mod cast_poster {
let image = image(image_handle).width(100);
content = content.push(image);
} else {
- content = content.push(Space::new(100, 140));
+ content = content.push(empty_image);
};
}
}
diff --git a/src/gui/series_page/series/mod.rs b/src/gui/series_page/series/mod.rs
index e859a99..9d09be5 100644
--- a/src/gui/series_page/series/mod.rs
+++ b/src/gui/series_page/series/mod.rs
@@ -6,7 +6,7 @@ use crate::core::api::tv_maze::Image;
use crate::core::caching::episode_list::EpisodeReleaseTime;
use crate::core::{caching, database};
use crate::gui::assets::icons::{PATCH_PLUS, PATCH_PLUS_FILL};
-use crate::gui::styles;
+use crate::gui::{helpers, styles};
use bytes::Bytes;
use cast_widget::{CastWidget, Message as CastWidgetMessage};
@@ -43,7 +43,7 @@ pub fn series_metadata<'a>(
main_info = main_info.push(image);
} else {
- main_info = main_info.push(Space::new(180, 253));
+ main_info = main_info.push(helpers::empty_image::empty_image().width(180).height(253));
};
let mut series_data_grid = Grid::with_columns(2);
diff --git a/src/gui/tabs/my_shows_tab/upcoming_releases_widget.rs b/src/gui/tabs/my_shows_tab/upcoming_releases_widget.rs
index 7a80e66..7d91511 100644
--- a/src/gui/tabs/my_shows_tab/upcoming_releases_widget.rs
+++ b/src/gui/tabs/my_shows_tab/upcoming_releases_widget.rs
@@ -161,7 +161,7 @@ mod upcoming_poster {
use crate::gui::troxide_widget::series_poster::{GenericPoster, GenericPosterMessage};
use iced::widget::{
- column, container, horizontal_space, image, mouse_area, row, text, vertical_space, Space,
+ column, container, horizontal_space, image, mouse_area, row, text, vertical_space,
};
use iced::{Command, Element, Length, Renderer};
@@ -226,7 +226,7 @@ mod upcoming_poster {
let image = image(image_handle).width(100);
content = content.push(image);
} else {
- content = content.push(Space::new(100, 140));
+ content = content.push(helpers::empty_image::empty_image().width(100).height(140));
};
let mut metadata = column!().spacing(5);
diff --git a/src/gui/tabs/statistics_tab/mini_widgets.rs b/src/gui/tabs/statistics_tab/mini_widgets.rs
index 1cdee26..83f4816 100644
--- a/src/gui/tabs/statistics_tab/mini_widgets.rs
+++ b/src/gui/tabs/statistics_tab/mini_widgets.rs
@@ -178,7 +178,7 @@ pub fn genre_stats(series_infos: Vec<&SeriesMainInformation>) -> Element<'_, Mes
pub mod series_banner {
use std::sync::mpsc;
- use iced::widget::{column, container, image, mouse_area, row, text, Row, Space};
+ use iced::widget::{column, container, image, mouse_area, row, text, Row};
use iced::{Alignment, Command, Element, Length, Renderer};
use crate::core::{api::tv_maze::series_information::SeriesMainInformation, database};
@@ -290,7 +290,10 @@ pub mod series_banner {
let image_handle = image::Handle::from_memory(image_bytes.clone());
image(image_handle).height(100).into()
} else {
- Space::new(71, 100).into()
+ helpers::empty_image::empty_image()
+ .width(71)
+ .height(100)
+ .into()
};
let content = column![text(series_name), metadata]
diff --git a/src/gui/troxide_widget.rs b/src/gui/troxide_widget.rs
index a58a434..2fa4098 100644
--- a/src/gui/troxide_widget.rs
+++ b/src/gui/troxide_widget.rs
@@ -1,18 +1,18 @@
pub mod episode_widget {
- pub use crate::gui::message::IndexedMessage;
- use crate::{
- core::{api::tv_maze::episodes_information::Episode as EpisodeInfo, caching, database},
- gui::{assets::icons::EYE_FILL, helpers::season_episode_str_gen, styles},
+ use crate::core::{
+ api::tv_maze::episodes_information::Episode as EpisodeInfo, caching, database,
};
+ use crate::gui::assets::icons::EYE_FILL;
+ use crate::gui::helpers::{self, season_episode_str_gen};
+ pub use crate::gui::message::IndexedMessage;
+ use crate::gui::styles;
use bytes::Bytes;
- use iced::{
- font::Weight,
- widget::{
- button, checkbox, column, container, horizontal_space, image, row, svg, text,
- vertical_space, Row, Space, Text,
- },
- Command, Element, Font, Length, Renderer,
+ use iced::font::Weight;
+ use iced::widget::{
+ button, checkbox, column, container, horizontal_space, image, row, svg, text,
+ vertical_space, Row, Space, Text,
};
+ use iced::{Command, Element, Font, Length, Renderer};
#[derive(Clone, Debug)]
pub enum Message {
@@ -143,7 +143,11 @@ pub mod episode_widget {
let image = image(image_handle).height(image_height);
content = content.push(image);
} else {
- content = content.push(Space::new(image_width, image_height));
+ content = content.push(
+ helpers::empty_image::empty_image()
+ .width(image_width)
+ .height(image_height),
+ );
};
let episode_details = column!(
@@ -411,7 +415,10 @@ pub mod series_poster {
let image_handle = image::Handle::from_memory(image_bytes.clone());
image(image_handle).height(image_height).into()
} else {
- Space::new(image_height as f32 / 1.4, image_height).into()
+ helpers::empty_image::empty_image()
+ .width(image_height as f32 / 1.4)
+ .height(image_height)
+ .into()
}
};