Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate to Iced 0.12 #470

Merged
merged 12 commits into from
Mar 9, 2024
2,338 changes: 1,337 additions & 1,001 deletions Cargo.lock

Large diffs are not rendered by default.

104 changes: 52 additions & 52 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
[package]
name = "sniffnet"
version = "1.2.2"
authors = [ "Giuliano Bellini <[email protected]>" ]
edition = "2021"
name = "sniffnet"
version = "1.2.2"
authors = ["Giuliano Bellini <[email protected]>"]
edition = "2021"
description = "Application to comfortably monitor your network traffic"
readme = "README.md"
homepage = "https://sniffnet.net"
repository = "https://github.com/GyulyVGC/sniffnet"
license = "MIT OR Apache-2.0"
keywords = [ "filter", "network", "packet", "sniffer", "gui" ]
categories = [ "visualization", "gui", "network-programming" ]
include = [
readme = "README.md"
homepage = "https://sniffnet.net"
repository = "https://github.com/GyulyVGC/sniffnet"
license = "MIT OR Apache-2.0"
keywords = ["filter", "network", "packet", "sniffer", "gui"]
categories = ["visualization", "gui", "network-programming"]
include = [
"/src/**/*.rs",
"/LICENSE-MIT",
"/LICENSE-APACHE",
Expand Down Expand Up @@ -41,8 +41,8 @@ pcap = "1.2.0"
etherparse = "0.14.2"
chrono = { version = "0.4.33", default_features = false, features = ["clock"] }
plotters = { version = "0.3.5", default_features = false, features = ["area_series"] }
iced = { version = "0.10.0", features = ["tokio", "svg", "advanced", "lazy"] }
plotters-iced = "0.9.0"
iced = { version = "0.12.1", features = ["tokio", "svg", "advanced", "lazy"] }
plotters-iced = "0.10.0"
maxminddb = "0.24.0"
confy = "0.6.0"
serde = { version = "1.0.196", default_features = false, features = ["derive"] }
Expand All @@ -51,7 +51,7 @@ dns-lookup = "2.0.4"
toml = "0.8.10"
once_cell = "1.19.0"
ctrlc = { version = "3.4.2", features = ["termination"] }
rfd = "0.13.0"
rfd = "0.14.0"
phf = "0.11.2"
phf_shared = "0.11.2"
splines = "4.3.1"
Expand Down Expand Up @@ -114,31 +114,31 @@ pre-build = [
#═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════

[package.metadata.deb]
section="Network"
license-file="resources/packaging/LICENSE"
extended-description-file="resources/packaging/linux/description.txt"
maintainer-scripts="resources/packaging/linux/scripts/"
section = "Network"
license-file = "resources/packaging/LICENSE"
extended-description-file = "resources/packaging/linux/description.txt"
maintainer-scripts = "resources/packaging/linux/scripts/"
depends = "libasound2, libpcap0.8, libfontconfig1"
assets = [
["target/release/sniffnet", "/usr/bin/", "755"],
["resources/packaging/linux/sniffnet.desktop", "/usr/share/applications/", "644"],
["resources/packaging/linux/graphics/sniffnet_8x8.png", "/usr/share/icons/hicolor/8x8/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_16x16.png", "/usr/share/icons/hicolor/16x16/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_22x22.png", "/usr/share/icons/hicolor/22x22/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_24x24.png", "/usr/share/icons/hicolor/24x24/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_32x32.png", "/usr/share/icons/hicolor/32x32/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_36x36.png", "/usr/share/icons/hicolor/36x36/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_42x42.png", "/usr/share/icons/hicolor/42x42/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_48x48.png", "/usr/share/icons/hicolor/48x48/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_64x64.png", "/usr/share/icons/hicolor/64x64/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_72x72.png", "/usr/share/icons/hicolor/72x72/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_96x96.png", "/usr/share/icons/hicolor/96x96/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_128x128.png", "/usr/share/icons/hicolor/128x128/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_160x160.png", "/usr/share/icons/hicolor/160x160/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_192x192.png", "/usr/share/icons/hicolor/192x192/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_256x256.png", "/usr/share/icons/hicolor/256x256/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_384x384.png", "/usr/share/icons/hicolor/384x384/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_512x512.png", "/usr/share/icons/hicolor/512x512/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_8x8.png", "/usr/share/icons/hicolor/8x8/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_16x16.png", "/usr/share/icons/hicolor/16x16/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_22x22.png", "/usr/share/icons/hicolor/22x22/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_24x24.png", "/usr/share/icons/hicolor/24x24/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_32x32.png", "/usr/share/icons/hicolor/32x32/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_36x36.png", "/usr/share/icons/hicolor/36x36/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_42x42.png", "/usr/share/icons/hicolor/42x42/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_48x48.png", "/usr/share/icons/hicolor/48x48/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_64x64.png", "/usr/share/icons/hicolor/64x64/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_72x72.png", "/usr/share/icons/hicolor/72x72/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_96x96.png", "/usr/share/icons/hicolor/96x96/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_128x128.png", "/usr/share/icons/hicolor/128x128/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_160x160.png", "/usr/share/icons/hicolor/160x160/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_192x192.png", "/usr/share/icons/hicolor/192x192/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_256x256.png", "/usr/share/icons/hicolor/256x256/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_384x384.png", "/usr/share/icons/hicolor/384x384/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_512x512.png", "/usr/share/icons/hicolor/512x512/apps/sniffnet.png", "644"],
["resources/packaging/linux/graphics/sniffnet_1024x1024.png", "/usr/share/icons/hicolor/1024x1024/apps/sniffnet.png", "644"]
]

Expand All @@ -150,23 +150,23 @@ pre_uninstall_script = "setcap '' /usr/bin/sniffnet"
assets = [
{ source = "target/release/sniffnet", dest = "/usr/bin/", mode = "755" },
{ source = "resources/packaging/linux/sniffnet.desktop", dest = "/usr/share/applications/", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_8x8.png", dest = "/usr/share/icons/hicolor/8x8/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_16x16.png", dest = "/usr/share/icons/hicolor/16x16/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_22x22.png", dest = "/usr/share/icons/hicolor/22x22/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_24x24.png", dest = "/usr/share/icons/hicolor/24x24/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_32x32.png", dest = "/usr/share/icons/hicolor/32x32/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_36x36.png", dest = "/usr/share/icons/hicolor/36x36/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_42x42.png", dest = "/usr/share/icons/hicolor/42x42/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_48x48.png", dest = "/usr/share/icons/hicolor/48x48/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_64x64.png", dest = "/usr/share/icons/hicolor/64x64/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_72x72.png", dest = "/usr/share/icons/hicolor/72x72/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_96x96.png", dest = "/usr/share/icons/hicolor/96x96/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_128x128.png", dest = "/usr/share/icons/hicolor/128x128/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_160x160.png", dest = "/usr/share/icons/hicolor/160x160/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_192x192.png", dest = "/usr/share/icons/hicolor/192x192/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_256x256.png", dest = "/usr/share/icons/hicolor/256x256/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_384x384.png", dest = "/usr/share/icons/hicolor/384x384/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_512x512.png", dest = "/usr/share/icons/hicolor/512x512/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_8x8.png", dest = "/usr/share/icons/hicolor/8x8/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_16x16.png", dest = "/usr/share/icons/hicolor/16x16/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_22x22.png", dest = "/usr/share/icons/hicolor/22x22/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_24x24.png", dest = "/usr/share/icons/hicolor/24x24/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_32x32.png", dest = "/usr/share/icons/hicolor/32x32/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_36x36.png", dest = "/usr/share/icons/hicolor/36x36/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_42x42.png", dest = "/usr/share/icons/hicolor/42x42/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_48x48.png", dest = "/usr/share/icons/hicolor/48x48/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_64x64.png", dest = "/usr/share/icons/hicolor/64x64/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_72x72.png", dest = "/usr/share/icons/hicolor/72x72/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_96x96.png", dest = "/usr/share/icons/hicolor/96x96/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_128x128.png", dest = "/usr/share/icons/hicolor/128x128/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_160x160.png", dest = "/usr/share/icons/hicolor/160x160/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_192x192.png", dest = "/usr/share/icons/hicolor/192x192/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_256x256.png", dest = "/usr/share/icons/hicolor/256x256/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_384x384.png", dest = "/usr/share/icons/hicolor/384x384/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_512x512.png", dest = "/usr/share/icons/hicolor/512x512/apps/sniffnet.png", mode = "644" },
{ source = "resources/packaging/linux/graphics/sniffnet_1024x1024.png", dest = "/usr/share/icons/hicolor/1024x1024/apps/sniffnet.png", mode = "644" }
]

Expand Down
Binary file modified resources/fonts/subset/icons.ttf
Binary file not shown.
22 changes: 10 additions & 12 deletions src/chart/manage_chart_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,14 @@ mod tests {
use crate::chart::manage_chart_data::{get_max, get_min, update_charts_data};
use crate::{ChartType, Language, RunTimeData, StyleType, TrafficChart};

fn spline_from_vec(vec: Vec<(i32, i32)>) -> Spline<f32, f32> {
Spline::from_vec(
vec.iter()
.map(|&(x, y)| Key::new(x as f32, y as f32, Interpolation::Cosine))
.collect::<Vec<Key<f32, f32>>>(),
)
}

#[test]
fn test_chart_data_updates() {
let sent_vec = vec![
Expand Down Expand Up @@ -116,12 +124,7 @@ mod tests {
(27, -1000),
(28, -1000),
];
let sent = Spline::from_vec(
sent_vec
.iter()
.map(|&(x, y)| Key::new(x as f32, y as f32, Interpolation::Cosine))
.collect(),
);
let sent = spline_from_vec(sent_vec);
let received_vec = vec![
(0, 1000),
(1, 21000),
Expand Down Expand Up @@ -153,12 +156,7 @@ mod tests {
(27, 21000),
(28, 21000),
];
let received = Spline::from_vec(
received_vec
.iter()
.map(|&(x, y)| Key::new(x as f32, y as f32, Interpolation::Cosine))
.collect(),
);
let received = spline_from_vec(received_vec);
let tot_sent = 1000 * 28 + 500;
let tot_received = 21000 * 28 + 1000;
let mut traffic_chart = TrafficChart {
Expand Down
22 changes: 9 additions & 13 deletions src/chart/types/traffic_chart.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
//! This module defines the behavior of the `TrafficChart` struct, used to display chart in GUI run page

use iced::alignment::{Horizontal, Vertical};
use iced::widget::{Column, Container};
use iced::{Element, Renderer};
use iced::widget::Container;
use iced::Element;
use plotters::prelude::*;
use plotters_iced::{Chart, ChartBuilder, ChartWidget, DrawingBackend};
use splines::Spline;
Expand Down Expand Up @@ -63,11 +62,8 @@ impl TrafficChart {
}
}

pub fn view(&self) -> Element<Message, Renderer<StyleType>> {
Container::new(Column::new().push(ChartWidget::new(self)))
.align_x(Horizontal::Left)
.align_y(Vertical::Bottom)
.into()
pub fn view(&self) -> Element<Message, StyleType> {
Container::new(ChartWidget::new(self)).into()
}

pub fn change_kind(&mut self, kind: ChartType) {
Expand Down Expand Up @@ -161,10 +157,10 @@ impl Chart<Message> for TrafficChart {
}

chart_builder
.margin_right(30)
.margin_bottom(0)
.set_label_area_size(LabelAreaPosition::Left, 60)
.set_label_area_size(LabelAreaPosition::Bottom, 50);
.margin_right(25)
.margin_top(6)
.set_label_area_size(LabelAreaPosition::Left, 55)
.set_label_area_size(LabelAreaPosition::Bottom, 40);

let x_axis_range = self.x_axis_range();
let y_axis_range = self.y_axis_range();
Expand Down Expand Up @@ -285,7 +281,7 @@ mod tests {
let spline = Spline::from_vec(
vec.iter()
.map(|&(x, y)| Key::new(x as f32, y as f32, Interpolation::Cosine))
.collect(),
.collect::<Vec<Key<f32, f32>>>(),
);

let eps = 0.001;
Expand Down
21 changes: 20 additions & 1 deletion src/configs/types/config_window.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use iced::window::Position;
use iced::{Point, Size};
use serde::{Deserialize, Serialize};

#[cfg(not(test))]
Expand Down Expand Up @@ -44,7 +45,25 @@ pub trait ToPosition {

impl ToPosition for (i32, i32) {
fn to_position(self) -> Position {
Position::Specific(self.0, self.1)
#[allow(clippy::cast_precision_loss)]
Position::Specific(Point {
x: self.0 as f32,
y: self.1 as f32,
})
}
}

pub trait ToSize {
fn to_size(self) -> Size;
}

impl ToSize for (u32, u32) {
fn to_size(self) -> Size {
#[allow(clippy::cast_precision_loss)]
Size {
width: self.0 as f32,
height: self.1 as f32,
}
}
}

Expand Down
40 changes: 23 additions & 17 deletions src/countries/country_utils.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use iced::widget::svg::Handle;
use iced::widget::tooltip::Position;
use iced::widget::Svg;
use iced::widget::Tooltip;
use iced::{Font, Length, Renderer};
use iced::widget::{Svg, Text};
use iced::Font;

use crate::countries::flags_pictures::{
AD, AE, AF, AG, AI, AL, AM, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI,
Expand Down Expand Up @@ -35,7 +35,7 @@ fn get_flag_from_country(
is_loopback: bool,
traffic_type: TrafficType,
language: Language,
) -> (Svg<Renderer<StyleType>>, String) {
) -> (Svg<StyleType>, String) {
#![allow(clippy::too_many_lines)]
let mut tooltip = country.to_string();
let mut svg_style = SvgType::Standard;
Expand Down Expand Up @@ -310,8 +310,8 @@ fn get_flag_from_country(
}
})))
.style(svg_style)
.width(Length::Fixed(width))
.height(Length::Fixed(width * 0.75));
.width(width)
.height(width * 0.75);

(svg, tooltip)
}
Expand All @@ -322,7 +322,7 @@ pub fn get_flag_tooltip(
host_info: &DataInfoHost,
language: Language,
font: Font,
) -> Tooltip<'static, Message, Renderer<StyleType>> {
) -> Tooltip<'static, Message, StyleType> {
let is_local = host_info.is_local;
let is_loopback = host_info.is_loopback;
let traffic_type = host_info.traffic_type;
Expand All @@ -335,10 +335,13 @@ pub fn get_flag_tooltip(
language,
);

let mut tooltip = Tooltip::new(content, tooltip, Position::FollowCursor)
.font(font)
.snap_within_viewport(true)
.style(ContainerType::Tooltip);
let mut tooltip = Tooltip::new(
content,
Text::new(tooltip).font(font),
Position::FollowCursor,
)
.snap_within_viewport(true)
.style(ContainerType::Tooltip);

if width == FLAGS_WIDTH_SMALL {
tooltip = tooltip.padding(3);
Expand All @@ -353,7 +356,7 @@ pub fn get_computer_tooltip(
traffic_type: TrafficType,
language: Language,
font: Font,
) -> Tooltip<'static, Message, Renderer<StyleType>> {
) -> Tooltip<'static, Message, StyleType> {
let content = Svg::new(Handle::from_memory(Vec::from(
match (is_my_address, is_local, traffic_type) {
(true, _, _) => COMPUTER,
Expand All @@ -364,8 +367,8 @@ pub fn get_computer_tooltip(
},
)))
.style(SvgType::AdaptColor)
.width(Length::Fixed(FLAGS_WIDTH_BIG))
.height(Length::Fixed(FLAGS_WIDTH_BIG * 0.75));
.width(FLAGS_WIDTH_BIG)
.height(FLAGS_WIDTH_BIG * 0.75);

let tooltip = match (is_my_address, is_local, traffic_type) {
(true, _, _) => your_network_adapter_translation(language),
Expand All @@ -375,8 +378,11 @@ pub fn get_computer_tooltip(
(false, false, TrafficType::Unicast) => unknown_translation(language),
};

Tooltip::new(content, tooltip, Position::FollowCursor)
.font(font)
.snap_within_viewport(true)
.style(ContainerType::Tooltip)
Tooltip::new(
content,
Text::new(tooltip).font(font),
Position::FollowCursor,
)
.snap_within_viewport(true)
.style(ContainerType::Tooltip)
}
Loading