Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,4 @@ serde_yaml = "0.9.34+deprecated"
image = { version = "0.25.2", default-features = false, features = ["png"] }
bitflags = "2.6.0"
libsqlite3-sys = { version = "0.30.1", features = ["bundled"] }
rust-embed = "8.5.0"
45 changes: 29 additions & 16 deletions src/ui/components/left_panel.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,37 @@ use crate::ui::RootScreenType;
use eframe::epaint::{Color32, Margin};
use egui::{Context, Frame, ImageButton, SidePanel, TextureHandle};
use std::sync::Arc;
use rust_embed::RustEmbed;

// Function to load an icon as a texture
#[derive(RustEmbed)]
#[folder = "icons/"] // Adjust the folder path if necessary
struct Assets;

// Function to load an icon as a texture using embedded assets
fn load_icon(ctx: &Context, path: &str) -> Option<TextureHandle> {
if let Ok(image) = image::open(path) {
let size = [image.width() as usize, image.height() as usize];
let rgba_image = image.into_rgba8();
let pixels = rgba_image.into_raw();
// Attempt to retrieve the embedded file
if let Some(content) = Assets::get(path) {
// Load the image from the embedded bytes
if let Ok(image) = image::load_from_memory(&content.data) {
let size = [image.width() as usize, image.height() as usize];
let rgba_image = image.into_rgba8();
let pixels = rgba_image.into_raw();

Some(ctx.load_texture(
path,
egui::ColorImage::from_rgba_unmultiplied(size, &pixels),
Default::default(),
))
Some(ctx.load_texture(
path,
egui::ColorImage::from_rgba_unmultiplied(size, &pixels),
Default::default(),
))
} else {
eprintln!("Failed to load image from embedded data at path: {}", path);
None
Comment on lines +29 to +30
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Consider using a logging crate instead of eprintln!

Using eprintln! for error messages in a GUI application may not be ideal. Consider using a logging crate like log or env_logger for more flexible and configurable logging, which can be directed to files, consoles, or other outputs as needed.

}
Comment on lines +16 to +31
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Simplify nested if let statements for better readability

The nested if let statements in the load_icon function can be simplified to improve readability using combinators like and_then and map.

Here's an example of how you might refactor it:

fn load_icon(ctx: &Context, path: &str) -> Option<TextureHandle> {
    Assets::get(path).and_then(|content| {
        image::load_from_memory(&content.data).ok().map(|image| {
            let size = [image.width() as usize, image.height() as usize];
            let rgba_image = image.into_rgba8();
            let pixels = rgba_image.into_raw();
            ctx.load_texture(
                path,
                egui::ColorImage::from_rgba_unmultiplied(size, &pixels),
                Default::default(),
            )
        })
    })
}

} else {
eprintln!("Failed to load icon at path: {}", path);
eprintln!("Image not found in embedded assets at path: {}", path);
None
}
}

pub fn add_left_panel(
ctx: &Context,
app_context: &Arc<AppContext>,
Expand All @@ -34,27 +47,27 @@ pub fn add_left_panel(
(
"I",
RootScreenType::RootScreenIdentities,
"icons/identity.png",
"identity.png",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix inconsistent icon path.

The icon paths have been updated to remove the "icons/" prefix, which is correct for the new embedded asset approach. However, there's an inconsistency in one of the paths:

"icons/tools.png", // Line 65

This path still includes the "icons/" prefix, while others don't. To maintain consistency and ensure all icons load correctly, update this line to:

"tools.png",

This change will align all icon paths with the new embedded asset structure.

Also applies to: 55-55, 60-60, 65-65, 70-70

),
(
"C",
RootScreenType::RootScreenDPNSContestedNames,
"icons/voting.png",
"voting.png",
),
(
"Q",
RootScreenType::RootScreenDocumentQuery,
"icons/doc.png",
"doc.png",
),
(
"T",
RootScreenType::RootScreenTransitionVisualizerScreen,
"icons/tools.png",
"tools.png",
),
(
"N",
RootScreenType::RootScreenNetworkChooser,
"icons/config.png",
"config.png",
),
];

Expand Down