mirror of
https://github.com/GyulyVGC/sniffnet.git
synced 2025-12-23 22:29:01 -05:00
bump Rust edition and update deps
This commit is contained in:
676
Cargo.lock
generated
676
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
14
Cargo.toml
14
Cargo.toml
@@ -2,7 +2,7 @@
|
||||
name = "sniffnet"
|
||||
version = "1.3.2"
|
||||
authors = ["Giuliano Bellini <gyulyvgc99@gmail.com>"]
|
||||
edition = "2021"
|
||||
edition = "2024"
|
||||
description = "Application to comfortably monitor your network traffic"
|
||||
readme = "README.md"
|
||||
homepage = "https://sniffnet.net"
|
||||
@@ -43,28 +43,27 @@ chrono = { version = "0.4.40", default-features = false, features = ["clock"] }
|
||||
plotters = { version = "0.3.7", default-features = false, features = ["area_series", "line_series"] }
|
||||
iced = { version = "0.13.1", features = ["tokio", "svg", "advanced", "lazy", "image"] }
|
||||
plotters-iced = "0.11.0"
|
||||
maxminddb = "0.25.0"
|
||||
maxminddb = "0.26.0"
|
||||
confy = "0.6.1"
|
||||
serde = { version = "1.0.219", default-features = false, features = ["derive"] }
|
||||
rodio = { version = "0.20.1", default-features = false, features = ["mp3"] }
|
||||
dns-lookup = "2.0.4"
|
||||
toml = "0.8.20"
|
||||
once_cell = "1.21.1"
|
||||
ctrlc = { version = "3.4.5", features = ["termination"] }
|
||||
ctrlc = { version = "3.4.6", features = ["termination"] }
|
||||
rfd = "0.15.3"
|
||||
phf = "0.11.3"
|
||||
phf_shared = "0.11.3"
|
||||
splines = "4.4.2"
|
||||
clap = { version = "4.5.32", features = ["derive"] }
|
||||
clap = { version = "4.5.35", features = ["derive"] }
|
||||
|
||||
[target.'cfg(windows)'.dependencies]
|
||||
gag = "1.0.0"
|
||||
|
||||
[target.'cfg(not(target_arch = "powerpc64"))'.dependencies]
|
||||
reqwest = { version = "0.12.14", default-features = false, features = ["json", "blocking", "rustls-tls"] }
|
||||
reqwest = { version = "0.12.15", default-features = false, features = ["json", "blocking", "rustls-tls"] }
|
||||
|
||||
[target.'cfg(target_arch = "powerpc64")'.dependencies]
|
||||
reqwest = { version = "0.12.14", features = ["json", "blocking"] }
|
||||
reqwest = { version = "0.12.15", features = ["json", "blocking"] }
|
||||
|
||||
#───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
@@ -79,7 +78,6 @@ serial_test = { version = "3.2.0", default-features = false }
|
||||
phf_codegen = "0.11.3"
|
||||
phf_shared = "0.11.3"
|
||||
rustrict = { version = "0.7.34", default-features = false, features = ["censor"] }
|
||||
once_cell = "1.21.1"
|
||||
|
||||
[target."cfg(windows)".build-dependencies]
|
||||
winres = "0.1.12"
|
||||
|
||||
194
build.rs
194
build.rs
@@ -6,7 +6,6 @@
|
||||
use std::io::{BufRead, BufReader, BufWriter, Write};
|
||||
use std::path::Path;
|
||||
|
||||
use once_cell::sync::Lazy;
|
||||
use rustrict::{Censor, Trie, Type};
|
||||
|
||||
include!("./src/networking/types/service_query.rs");
|
||||
@@ -99,99 +98,100 @@ fn get_valid_service_query(s: &str) -> ServiceQuery {
|
||||
ServiceQuery(port, protocol)
|
||||
}
|
||||
|
||||
pub static SAFE_WORDS_FOR_SERVICE_NAME: Lazy<Trie> = Lazy::new(|| {
|
||||
let mut safe_words = Trie::default();
|
||||
for word in [
|
||||
"npp",
|
||||
"emfis-cntl",
|
||||
"ardus-cntl",
|
||||
"pmip6-cntl",
|
||||
"mpp",
|
||||
"ipp",
|
||||
"vpp",
|
||||
"epp",
|
||||
"kink",
|
||||
"kvm-via-ip",
|
||||
"dpp",
|
||||
"slinkysearch",
|
||||
"alta-ana-lm",
|
||||
"vpps-qua",
|
||||
"vpps-via",
|
||||
"ibm-pps",
|
||||
"ppsms",
|
||||
"ppsuitemsg",
|
||||
"icpps",
|
||||
"rap-listen",
|
||||
"cadabra-lm",
|
||||
"pay-per-view",
|
||||
"sixtrak",
|
||||
"cvmon",
|
||||
"houdini-lm",
|
||||
"dic-aida",
|
||||
"p2pq",
|
||||
"bigbrother",
|
||||
"bintec-admin",
|
||||
"zymed-zpp",
|
||||
"cvmmon",
|
||||
"btpp2sectrans",
|
||||
"conclave-cpp",
|
||||
"btpp2audctr1",
|
||||
"tclprodebugger",
|
||||
"bintec-capi",
|
||||
"bintec-tapi",
|
||||
"dicom-iscl",
|
||||
"dicom-tls",
|
||||
"nmsigport",
|
||||
"ppp",
|
||||
"tl1-telnet",
|
||||
"opcon-xps",
|
||||
"netwatcher-mon",
|
||||
"netwatcher-db",
|
||||
"xnm-ssl",
|
||||
"edm-mgr-cntrl",
|
||||
"isoft-p2p",
|
||||
"must-p2p",
|
||||
"p2pgroup",
|
||||
"quasar-server",
|
||||
"int-rcv-cntrl",
|
||||
"faxstfx-port",
|
||||
"sunlps-http",
|
||||
"fagordnc",
|
||||
"p2pcommunity",
|
||||
"minger",
|
||||
"assuria-slm",
|
||||
"wcpp",
|
||||
"plcy-net-svcs",
|
||||
"assyst-dr",
|
||||
"mobile-p2p",
|
||||
"assuria-ins",
|
||||
"taep-as-svc",
|
||||
"nlg-data",
|
||||
"dj-ice",
|
||||
"x500ms",
|
||||
"X11:7",
|
||||
"p2p-sip",
|
||||
"p4p-portal",
|
||||
"bmc-perf-agent",
|
||||
"ntz-p2p-storage",
|
||||
"citrixupp",
|
||||
"freezexservice",
|
||||
"p2pevolvenet",
|
||||
"papachi-p2p-srv",
|
||||
"espeasy-p2p",
|
||||
"pim-port",
|
||||
"vp2p",
|
||||
"dicom",
|
||||
"icpp",
|
||||
"sauterdongle",
|
||||
"vocaltec-hos",
|
||||
"BackOrifice",
|
||||
"dhanalakshmi",
|
||||
"3gpp-w1ap",
|
||||
"pmsm-webrctl",
|
||||
"bif-p2p",
|
||||
] {
|
||||
safe_words.set(word, Type::SAFE);
|
||||
}
|
||||
safe_words
|
||||
});
|
||||
pub static SAFE_WORDS_FOR_SERVICE_NAME: std::sync::LazyLock<Trie> =
|
||||
std::sync::LazyLock::new(|| {
|
||||
let mut safe_words = Trie::default();
|
||||
for word in [
|
||||
"npp",
|
||||
"emfis-cntl",
|
||||
"ardus-cntl",
|
||||
"pmip6-cntl",
|
||||
"mpp",
|
||||
"ipp",
|
||||
"vpp",
|
||||
"epp",
|
||||
"kink",
|
||||
"kvm-via-ip",
|
||||
"dpp",
|
||||
"slinkysearch",
|
||||
"alta-ana-lm",
|
||||
"vpps-qua",
|
||||
"vpps-via",
|
||||
"ibm-pps",
|
||||
"ppsms",
|
||||
"ppsuitemsg",
|
||||
"icpps",
|
||||
"rap-listen",
|
||||
"cadabra-lm",
|
||||
"pay-per-view",
|
||||
"sixtrak",
|
||||
"cvmon",
|
||||
"houdini-lm",
|
||||
"dic-aida",
|
||||
"p2pq",
|
||||
"bigbrother",
|
||||
"bintec-admin",
|
||||
"zymed-zpp",
|
||||
"cvmmon",
|
||||
"btpp2sectrans",
|
||||
"conclave-cpp",
|
||||
"btpp2audctr1",
|
||||
"tclprodebugger",
|
||||
"bintec-capi",
|
||||
"bintec-tapi",
|
||||
"dicom-iscl",
|
||||
"dicom-tls",
|
||||
"nmsigport",
|
||||
"ppp",
|
||||
"tl1-telnet",
|
||||
"opcon-xps",
|
||||
"netwatcher-mon",
|
||||
"netwatcher-db",
|
||||
"xnm-ssl",
|
||||
"edm-mgr-cntrl",
|
||||
"isoft-p2p",
|
||||
"must-p2p",
|
||||
"p2pgroup",
|
||||
"quasar-server",
|
||||
"int-rcv-cntrl",
|
||||
"faxstfx-port",
|
||||
"sunlps-http",
|
||||
"fagordnc",
|
||||
"p2pcommunity",
|
||||
"minger",
|
||||
"assuria-slm",
|
||||
"wcpp",
|
||||
"plcy-net-svcs",
|
||||
"assyst-dr",
|
||||
"mobile-p2p",
|
||||
"assuria-ins",
|
||||
"taep-as-svc",
|
||||
"nlg-data",
|
||||
"dj-ice",
|
||||
"x500ms",
|
||||
"X11:7",
|
||||
"p2p-sip",
|
||||
"p4p-portal",
|
||||
"bmc-perf-agent",
|
||||
"ntz-p2p-storage",
|
||||
"citrixupp",
|
||||
"freezexservice",
|
||||
"p2pevolvenet",
|
||||
"papachi-p2p-srv",
|
||||
"espeasy-p2p",
|
||||
"pim-port",
|
||||
"vp2p",
|
||||
"dicom",
|
||||
"icpp",
|
||||
"sauterdongle",
|
||||
"vocaltec-hos",
|
||||
"BackOrifice",
|
||||
"dhanalakshmi",
|
||||
"3gpp-w1ap",
|
||||
"pmsm-webrctl",
|
||||
"bif-p2p",
|
||||
] {
|
||||
safe_words.set(word, Type::SAFE);
|
||||
}
|
||||
safe_words
|
||||
});
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::translations::translations::{bytes_translation, packets_translation};
|
||||
use crate::Language;
|
||||
use crate::translations::translations::{bytes_translation, packets_translation};
|
||||
|
||||
/// Enum representing the possible kind of chart displayed.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
use iced::alignment::{Horizontal, Vertical};
|
||||
use iced::widget::canvas::path::Arc;
|
||||
use iced::widget::canvas::{Frame, Text};
|
||||
use iced::widget::{canvas, Canvas};
|
||||
use iced::{mouse, Font, Radians, Renderer};
|
||||
use iced::widget::{Canvas, canvas};
|
||||
use iced::{Font, Radians, Renderer, mouse};
|
||||
use std::f32::consts;
|
||||
|
||||
pub struct DonutChart {
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
use std::cmp::min;
|
||||
use std::ops::Range;
|
||||
|
||||
use iced::widget::Container;
|
||||
use iced::Element;
|
||||
use iced::widget::Container;
|
||||
use plotters::prelude::*;
|
||||
use plotters::series::LineSeries;
|
||||
use plotters_iced::{Chart, ChartBuilder, ChartWidget, DrawingBackend};
|
||||
@@ -282,7 +282,7 @@ fn sample_spline(spline: &Spline<f32, f32>) -> Vec<(f32, f32)> {
|
||||
mod tests {
|
||||
use splines::{Interpolation, Key, Spline};
|
||||
|
||||
use crate::chart::types::traffic_chart::{sample_spline, PTS};
|
||||
use crate::chart::types::traffic_chart::{PTS, sample_spline};
|
||||
|
||||
#[test]
|
||||
fn test_spline_samples() {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
use clap::Parser;
|
||||
use iced::{window, Task};
|
||||
use iced::{Task, window};
|
||||
|
||||
use crate::CONFIGS;
|
||||
use crate::Configs;
|
||||
use crate::SNIFFNET_LOWERCASE;
|
||||
use crate::gui::types::message::Message;
|
||||
use crate::utils::formatted_strings::APP_VERSION;
|
||||
use crate::Configs;
|
||||
use crate::CONFIGS;
|
||||
use crate::SNIFFNET_LOWERCASE;
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
#[command(
|
||||
|
||||
@@ -6,10 +6,10 @@
|
||||
use pcap::{Device, DeviceFlags};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::networking::types::my_device::MyDevice;
|
||||
use crate::networking::types::my_link_type::MyLinkType;
|
||||
#[cfg(not(test))]
|
||||
use crate::SNIFFNET_LOWERCASE;
|
||||
use crate::networking::types::my_device::MyDevice;
|
||||
use crate::networking::types::my_link_type::MyLinkType;
|
||||
|
||||
#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
|
||||
pub struct ConfigDevice {
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::gui::styles::types::gradient_type::GradientType;
|
||||
use crate::notifications::types::notifications::Notifications;
|
||||
#[cfg(not(test))]
|
||||
use crate::SNIFFNET_LOWERCASE;
|
||||
use crate::gui::styles::types::gradient_type::GradientType;
|
||||
use crate::notifications::types::notifications::Notifications;
|
||||
use crate::{Language, StyleType};
|
||||
|
||||
#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
use crate::{ConfigDevice, ConfigSettings, ConfigWindow};
|
||||
|
||||
pub static CONFIGS: Lazy<Configs> = Lazy::new(Configs::load);
|
||||
pub static CONFIGS: std::sync::LazyLock<Configs> = std::sync::LazyLock::new(Configs::load);
|
||||
|
||||
#[derive(Default, Clone, PartialEq, Debug)]
|
||||
pub struct Configs {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
use iced::Font;
|
||||
use iced::widget::Tooltip;
|
||||
use iced::widget::svg::Handle;
|
||||
use iced::widget::tooltip::Position;
|
||||
use iced::widget::Tooltip;
|
||||
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,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
use iced::widget::text::LineHeight;
|
||||
use iced::widget::tooltip::Position;
|
||||
use iced::widget::{button, Row, Text, Tooltip};
|
||||
use iced::widget::{Row, Text, Tooltip, button};
|
||||
use iced::{Alignment, Font};
|
||||
|
||||
use crate::gui::styles::container::ContainerType;
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
use iced::widget::text::LineHeight;
|
||||
use iced::widget::tooltip::Position;
|
||||
use iced::widget::{button, rich_text, span, Column, Container, Row, Text, Tooltip};
|
||||
use iced::widget::{horizontal_space, Space};
|
||||
use iced::widget::{Column, Container, Row, Text, Tooltip, button, rich_text, span};
|
||||
use iced::widget::{Space, horizontal_space};
|
||||
use iced::{Alignment, Font, Length, Padding};
|
||||
|
||||
use crate::gui::components::button::row_open_link_tooltip;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
use iced::widget::text::LineHeight;
|
||||
use iced::widget::tooltip::Position;
|
||||
use iced::widget::{button, horizontal_space, Container, Row, Space, Text, Tooltip};
|
||||
use iced::widget::{Container, Row, Space, Text, Tooltip, button, horizontal_space};
|
||||
use iced::{Alignment, Font, Length};
|
||||
|
||||
use crate::configs::types::config_settings::ConfigSettings;
|
||||
@@ -17,7 +17,7 @@
|
||||
use crate::translations::translations::{quit_analysis_translation, settings_translation};
|
||||
use crate::translations::translations_3::thumbnail_mode_translation;
|
||||
use crate::utils::types::icon::Icon;
|
||||
use crate::{Language, StyleType, SNIFFNET_TITLECASE};
|
||||
use crate::{Language, SNIFFNET_TITLECASE, StyleType};
|
||||
|
||||
pub fn header(sniffer: &Sniffer) -> Container<Message, StyleType> {
|
||||
let thumbnail = sniffer.thumbnail;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use iced::alignment::Alignment;
|
||||
use iced::widget::{
|
||||
button, center, horizontal_space, mouse_area, opaque, stack, Column, Container, Row, Space,
|
||||
Text,
|
||||
Column, Container, Row, Space, Text, button, center, horizontal_space, mouse_area, opaque,
|
||||
stack,
|
||||
};
|
||||
use iced::{Element, Font, Length};
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
//! Tab buttons to be used in the various pages just under the header
|
||||
|
||||
use iced::widget::text::LineHeight;
|
||||
use iced::widget::{button, horizontal_space, Button, Container, Row, Space, Text};
|
||||
use iced::{alignment, Alignment, Font, Length};
|
||||
use iced::widget::{Button, Container, Row, Space, Text, button, horizontal_space};
|
||||
use iced::{Alignment, Font, Length, alignment};
|
||||
|
||||
use crate::gui::pages::types::settings_page::SettingsPage;
|
||||
use crate::gui::styles::button::ButtonType;
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
use iced::widget::scrollable::Direction;
|
||||
use iced::widget::tooltip::Position;
|
||||
use iced::widget::{button, horizontal_space, lazy, vertical_space, Rule, Scrollable};
|
||||
use iced::widget::{Column, Container, Row, Text, Tooltip};
|
||||
use iced::widget::{Rule, Scrollable, button, horizontal_space, lazy, vertical_space};
|
||||
use iced::{Alignment, Font, Length, Padding};
|
||||
|
||||
use crate::countries::country_utils::{get_computer_tooltip, get_flag_tooltip};
|
||||
|
||||
@@ -3,15 +3,16 @@
|
||||
//! It contains elements to select network adapter and traffic filters.
|
||||
|
||||
use std::collections::HashSet;
|
||||
use std::fmt::Write;
|
||||
|
||||
use iced::Length::FillPortion;
|
||||
use iced::widget::scrollable::Direction;
|
||||
use iced::widget::tooltip::Position;
|
||||
use iced::widget::{
|
||||
button, Button, Checkbox, Column, Container, Row, Rule, Scrollable, Space, Text, TextInput,
|
||||
Tooltip,
|
||||
Button, Checkbox, Column, Container, Row, Rule, Scrollable, Space, Text, TextInput, Tooltip,
|
||||
button,
|
||||
};
|
||||
use iced::Length::FillPortion;
|
||||
use iced::{alignment, Alignment, Font, Length, Padding};
|
||||
use iced::{Alignment, Font, Length, Padding, alignment};
|
||||
use pcap::Device;
|
||||
|
||||
use crate::gui::components::button::button_open_file;
|
||||
@@ -302,7 +303,7 @@ fn get_col_adapter(sniffer: &Sniffer, font: Font) -> Column<Message, StyleType>
|
||||
}
|
||||
Some(description) => {
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
dev_str.push_str(&format!("{name}\n"));
|
||||
let _ = writeln!(dev_str, "{name}");
|
||||
dev_str.push_str(&description);
|
||||
}
|
||||
}
|
||||
@@ -310,16 +311,16 @@ fn get_col_adapter(sniffer: &Sniffer, font: Font) -> Column<Message, StyleType>
|
||||
match num_addresses {
|
||||
0 => {}
|
||||
1 => {
|
||||
dev_str.push_str(&format!("\n{}:", address_translation(language)));
|
||||
let _ = write!(dev_str, "\n{}:", address_translation(language));
|
||||
}
|
||||
_ => {
|
||||
dev_str.push_str(&format!("\n{}:", addresses_translation(language)));
|
||||
let _ = write!(dev_str, "\n{}:", addresses_translation(language));
|
||||
}
|
||||
}
|
||||
|
||||
for addr in dev.addresses {
|
||||
let address_string = addr.addr.to_string();
|
||||
dev_str.push_str(&format!("\n {address_string}"));
|
||||
let _ = write!(dev_str, "\n {address_string}");
|
||||
}
|
||||
dev_str_list.push((name, dev_str));
|
||||
}
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
use iced::widget::text::LineHeight;
|
||||
use iced::widget::text_input::Side;
|
||||
use iced::widget::tooltip::Position;
|
||||
use iced::widget::{Button, Column, Container, Row, Scrollable, Text, TextInput, lazy};
|
||||
use iced::widget::{
|
||||
button, combo_box, horizontal_space, text_input, vertical_space, ComboBox, Rule, Space,
|
||||
Toggler, Tooltip,
|
||||
ComboBox, Rule, Space, Toggler, Tooltip, button, combo_box, horizontal_space, text_input,
|
||||
vertical_space,
|
||||
};
|
||||
use iced::widget::{lazy, Button, Column, Container, Row, Scrollable, Text, TextInput};
|
||||
use iced::{alignment, Alignment, Font, Length, Padding, Pixels};
|
||||
use iced::{Alignment, Font, Length, Padding, Pixels, alignment};
|
||||
|
||||
use crate::chart::types::chart_type::ChartType;
|
||||
use crate::gui::components::tab::get_pages_tabs;
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
use iced::Length::FillPortion;
|
||||
use iced::widget::scrollable::Direction;
|
||||
use iced::widget::text::LineHeight;
|
||||
use iced::widget::tooltip::Position;
|
||||
use iced::widget::{button, vertical_space, Space};
|
||||
use iced::widget::{lazy, Column, Container, Row, Scrollable, Text, Tooltip};
|
||||
use iced::Length::FillPortion;
|
||||
use iced::widget::{Column, Container, Row, Scrollable, Text, Tooltip, lazy};
|
||||
use iced::widget::{Space, button, vertical_space};
|
||||
use iced::{Alignment, Font, Length};
|
||||
use std::fmt::Write;
|
||||
|
||||
use crate::countries::country_utils::get_flag_tooltip;
|
||||
use crate::gui::components::header::get_button_settings;
|
||||
@@ -232,7 +233,7 @@ fn bytes_notification_log<'a>(
|
||||
(logged_notification.threshold).into(),
|
||||
));
|
||||
|
||||
threshold_str.push_str(&format!(" {}", per_second_translation(language)));
|
||||
let _ = write!(threshold_str, " {}", per_second_translation(language));
|
||||
let mut incoming_str = " - ".to_string();
|
||||
incoming_str.push_str(incoming_translation(language));
|
||||
incoming_str.push_str(": ");
|
||||
@@ -314,7 +315,7 @@ fn favorite_notification_log<'a>(
|
||||
|
||||
let mut domain_asn_str = logged_notification.host.domain;
|
||||
if !asn.name.is_empty() {
|
||||
domain_asn_str.push_str(&format!(" - {}", asn.name));
|
||||
let _ = write!(domain_asn_str, " - {}", asn.name);
|
||||
}
|
||||
|
||||
let row_flag_details = Row::new()
|
||||
|
||||
@@ -38,16 +38,17 @@
|
||||
use crate::utils::formatted_strings::get_active_filters_string;
|
||||
use crate::utils::types::icon::Icon;
|
||||
use crate::{ByteMultiple, ChartType, ConfigSettings, Language, RunningPage, StyleType};
|
||||
use iced::Length::{Fill, FillPortion};
|
||||
use iced::alignment::{Horizontal, Vertical};
|
||||
use iced::widget::scrollable::Direction;
|
||||
use iced::widget::text::LineHeight;
|
||||
use iced::widget::tooltip::Position;
|
||||
use iced::widget::{
|
||||
button, horizontal_space, lazy, vertical_space, Button, Column, Container, Row, Rule,
|
||||
Scrollable, Space, Text, Tooltip,
|
||||
Button, Column, Container, Row, Rule, Scrollable, Space, Text, Tooltip, button,
|
||||
horizontal_space, lazy, vertical_space,
|
||||
};
|
||||
use iced::Length::{Fill, FillPortion};
|
||||
use iced::{Alignment, Font, Length, Padding, Shrink};
|
||||
use std::fmt::Write;
|
||||
|
||||
/// Computes the body of gui overview page
|
||||
pub fn overview_page(sniffer: &Sniffer) -> Container<Message, StyleType> {
|
||||
@@ -145,7 +146,11 @@ fn body_no_packets<'a>(
|
||||
) -> Column<'a, Message, StyleType> {
|
||||
let link_type = device.link_type;
|
||||
let mut adapter_info = device.name.clone();
|
||||
adapter_info.push_str(&format!("\n{}", link_type.full_print_on_one_line(language)));
|
||||
let _ = write!(
|
||||
adapter_info,
|
||||
"\n{}",
|
||||
link_type.full_print_on_one_line(language)
|
||||
);
|
||||
let (icon_text, nothing_to_see_text) = if !link_type.is_supported() {
|
||||
(
|
||||
Icon::Warning.to_text().size(60),
|
||||
@@ -885,7 +890,7 @@ fn sort_arrows<'a>(
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::chart::types::chart_type::ChartType;
|
||||
use crate::gui::pages::overview_page::{get_bars_length, MIN_BARS_LENGTH};
|
||||
use crate::gui::pages::overview_page::{MIN_BARS_LENGTH, get_bars_length};
|
||||
use crate::networking::types::data_info::DataInfo;
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use iced::widget::text::LineHeight;
|
||||
use iced::widget::tooltip::Position;
|
||||
use iced::widget::{
|
||||
button, vertical_space, Column, Container, PickList, Row, Rule, Slider, Space, Text, Tooltip,
|
||||
Column, Container, PickList, Row, Rule, Slider, Space, Text, Tooltip, button, vertical_space,
|
||||
};
|
||||
use iced::{Alignment, Font, Length};
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use iced::widget::scrollable::Direction;
|
||||
use iced::widget::{horizontal_space, Button, Slider};
|
||||
use iced::widget::{Button, Slider, horizontal_space};
|
||||
use iced::widget::{Checkbox, Column, Container, Row, Scrollable, Space, Text, TextInput};
|
||||
use iced::{Alignment, Font, Length, Padding};
|
||||
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
use iced::widget::scrollable::Direction;
|
||||
use iced::widget::{button, lazy, Rule, Space};
|
||||
use iced::widget::{Button, Column, Container, Row, Scrollable, Text};
|
||||
use iced::widget::{Rule, Space, button, lazy};
|
||||
use iced::{Alignment, Color, Element, Font, Length, Padding};
|
||||
|
||||
use crate::StyleType::{Day, DeepSea, MonAmour, Night};
|
||||
use crate::gui::components::button::button_open_file;
|
||||
use crate::gui::components::tab::get_settings_tabs;
|
||||
use crate::gui::pages::settings_notifications_page::settings_header;
|
||||
@@ -26,7 +27,6 @@
|
||||
use crate::utils::formatted_strings::get_path_termination_string;
|
||||
use crate::utils::types::file_info::FileInfo;
|
||||
use crate::utils::types::icon::Icon;
|
||||
use crate::StyleType::{Day, DeepSea, MonAmour, Night};
|
||||
use crate::{ConfigSettings, Language, Sniffer, StyleType};
|
||||
|
||||
pub fn settings_style_page(sniffer: &Sniffer) -> Container<Message, StyleType> {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
use std::net::IpAddr;
|
||||
use std::sync::Mutex;
|
||||
|
||||
use iced::widget::{lazy, vertical_space, Column, Container, Row, Rule, Space, Text};
|
||||
use iced::widget::{Column, Container, Row, Rule, Space, Text, lazy, vertical_space};
|
||||
use iced::{Alignment, Font, Length};
|
||||
|
||||
use crate::chart::types::chart_type::ChartType;
|
||||
@@ -155,7 +155,7 @@ fn clip_text(text: &str, max_chars: usize) -> String {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::gui::pages::thumbnail_page::{
|
||||
clip_text, host_text, MAX_CHARS_HOST, MAX_CHARS_SERVICE,
|
||||
MAX_CHARS_HOST, MAX_CHARS_SERVICE, clip_text, host_text,
|
||||
};
|
||||
use crate::networking::types::asn::Asn;
|
||||
use crate::networking::types::host::Host;
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
use std::thread;
|
||||
use std::time::Duration;
|
||||
|
||||
use iced::Event::{Keyboard, Window};
|
||||
use iced::keyboard::key::Named;
|
||||
use iced::keyboard::{Event, Key, Modifiers};
|
||||
use iced::mouse::Event::ButtonPressed;
|
||||
use iced::widget::Column;
|
||||
use iced::window::{Id, Level};
|
||||
use iced::Event::{Keyboard, Window};
|
||||
use iced::{window, Element, Point, Size, Subscription, Task};
|
||||
use iced::{Element, Point, Size, Subscription, Task, window};
|
||||
use pcap::Device;
|
||||
use rfd::FileHandle;
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
use crate::networking::types::port_collection::PortCollection;
|
||||
use crate::notifications::notify_and_log::notify_and_log;
|
||||
use crate::notifications::types::notifications::Notification;
|
||||
use crate::notifications::types::sound::{play, Sound};
|
||||
use crate::notifications::types::sound::{Sound, play};
|
||||
use crate::report::get_report_entries::get_searched_entries;
|
||||
use crate::report::types::report_sort_type::ReportSortType;
|
||||
use crate::report::types::search_parameters::SearchParameters;
|
||||
|
||||
@@ -7,12 +7,12 @@
|
||||
use iced::widget::button::{Catalog, Status, Style};
|
||||
use iced::{Background, Border, Color, Shadow, Vector};
|
||||
|
||||
use crate::StyleType;
|
||||
use crate::gui::styles::style_constants::{ALERT_RED_COLOR, BORDER_BUTTON_RADIUS, BORDER_WIDTH};
|
||||
use crate::gui::styles::types::gradient_type::{
|
||||
get_gradient_buttons, get_gradient_hovered_buttons, GradientType,
|
||||
GradientType, get_gradient_buttons, get_gradient_hovered_buttons,
|
||||
};
|
||||
use crate::gui::styles::types::palette::mix_colors;
|
||||
use crate::StyleType;
|
||||
|
||||
#[derive(Default)]
|
||||
pub enum ButtonType {
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
use iced::widget::checkbox::{Catalog, Status, Style};
|
||||
use iced::{Background, Border};
|
||||
|
||||
use crate::gui::styles::style_constants::BORDER_WIDTH;
|
||||
use crate::StyleType;
|
||||
use crate::gui::styles::style_constants::BORDER_WIDTH;
|
||||
|
||||
#[derive(Default)]
|
||||
pub enum CheckboxType {
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
use iced::widget::container::{Catalog, Style};
|
||||
use iced::{Background, Border, Color, Shadow};
|
||||
|
||||
use crate::gui::styles::style_constants::{BORDER_ROUNDED_RADIUS, BORDER_WIDTH};
|
||||
use crate::gui::styles::types::gradient_type::{get_gradient_headers, GradientType};
|
||||
use crate::StyleType;
|
||||
use crate::gui::styles::style_constants::{BORDER_ROUNDED_RADIUS, BORDER_WIDTH};
|
||||
use crate::gui::styles::types::gradient_type::{GradientType, get_gradient_headers};
|
||||
|
||||
#[derive(Default)]
|
||||
pub enum ContainerType {
|
||||
|
||||
@@ -4,12 +4,11 @@
|
||||
//! <https://github.com/GyulyVGC/sniffnet/pull/708>
|
||||
|
||||
use iced::color;
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
use crate::gui::styles::types::palette::Palette;
|
||||
use crate::gui::styles::types::palette_extension::PaletteExtension;
|
||||
|
||||
pub static A11Y_DARK_PALETTE: Lazy<Palette> = Lazy::new(|| Palette {
|
||||
pub static A11Y_DARK_PALETTE: std::sync::LazyLock<Palette> = std::sync::LazyLock::new(|| Palette {
|
||||
primary: color!(0x000000),
|
||||
secondary: color!(0x934900),
|
||||
outgoing: color!(0xF0F0F0),
|
||||
@@ -18,17 +17,18 @@
|
||||
text_body: color!(0xfcfaf0),
|
||||
});
|
||||
|
||||
pub static A11Y_DARK_PALETTE_EXTENSION: Lazy<PaletteExtension> =
|
||||
Lazy::new(|| A11Y_DARK_PALETTE.generate_palette_extension());
|
||||
pub static A11Y_DARK_PALETTE_EXTENSION: std::sync::LazyLock<PaletteExtension> =
|
||||
std::sync::LazyLock::new(|| A11Y_DARK_PALETTE.generate_palette_extension());
|
||||
|
||||
pub static A11Y_LIGHT_PALETTE: Lazy<Palette> = Lazy::new(|| Palette {
|
||||
primary: color!(0xFFFFFF),
|
||||
secondary: color!(0x6CB6FF),
|
||||
outgoing: color!(0x0F0F0F),
|
||||
starred: color!(0x0000FF),
|
||||
text_headers: color!(0x1F1F1F),
|
||||
text_body: color!(0x03050F),
|
||||
});
|
||||
pub static A11Y_LIGHT_PALETTE: std::sync::LazyLock<Palette> =
|
||||
std::sync::LazyLock::new(|| Palette {
|
||||
primary: color!(0xFFFFFF),
|
||||
secondary: color!(0x6CB6FF),
|
||||
outgoing: color!(0x0F0F0F),
|
||||
starred: color!(0x0000FF),
|
||||
text_headers: color!(0x1F1F1F),
|
||||
text_body: color!(0x03050F),
|
||||
});
|
||||
|
||||
pub static A11Y_LIGHT_PALETTE_EXTENSION: Lazy<PaletteExtension> =
|
||||
Lazy::new(|| A11Y_LIGHT_PALETTE.generate_palette_extension());
|
||||
pub static A11Y_LIGHT_PALETTE_EXTENSION: std::sync::LazyLock<PaletteExtension> =
|
||||
std::sync::LazyLock::new(|| A11Y_LIGHT_PALETTE.generate_palette_extension());
|
||||
|
||||
@@ -4,32 +4,33 @@
|
||||
//! <https://draculatheme.com/>
|
||||
//! Light style from: <https://github.com/AshGrowem/Dracula.min/>
|
||||
use iced::color;
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
use crate::gui::styles::types::palette::Palette;
|
||||
use crate::gui::styles::types::palette_extension::PaletteExtension;
|
||||
|
||||
pub static DRACULA_DARK_PALETTE: Lazy<Palette> = Lazy::new(|| Palette {
|
||||
primary: color!(0x282a36), // Background
|
||||
secondary: color!(0xff79c6), // Pink
|
||||
outgoing: color!(0x8be9fd), // Cyan
|
||||
starred: color!(0xf1fa8c, 0.7),
|
||||
text_headers: color!(0x282a36), // Background
|
||||
text_body: color!(0xf8f8f2), // Foreground
|
||||
});
|
||||
pub static DRACULA_DARK_PALETTE: std::sync::LazyLock<Palette> =
|
||||
std::sync::LazyLock::new(|| Palette {
|
||||
primary: color!(0x282a36), // Background
|
||||
secondary: color!(0xff79c6), // Pink
|
||||
outgoing: color!(0x8be9fd), // Cyan
|
||||
starred: color!(0xf1fa8c, 0.7),
|
||||
text_headers: color!(0x282a36), // Background
|
||||
text_body: color!(0xf8f8f2), // Foreground
|
||||
});
|
||||
|
||||
pub static DRACULA_DARK_PALETTE_EXTENSION: Lazy<PaletteExtension> =
|
||||
Lazy::new(|| DRACULA_DARK_PALETTE.generate_palette_extension());
|
||||
pub static DRACULA_DARK_PALETTE_EXTENSION: std::sync::LazyLock<PaletteExtension> =
|
||||
std::sync::LazyLock::new(|| DRACULA_DARK_PALETTE.generate_palette_extension());
|
||||
|
||||
// Light Darker variant
|
||||
pub static DRACULA_LIGHT_PALETTE: Lazy<Palette> = Lazy::new(|| Palette {
|
||||
primary: color!(0xf8f8f2),
|
||||
secondary: color!(0x9f1670),
|
||||
outgoing: color!(0x005d6f),
|
||||
starred: color!(0xffb86c),
|
||||
text_headers: color!(0xf8f8f2),
|
||||
text_body: color!(0x282a36),
|
||||
});
|
||||
pub static DRACULA_LIGHT_PALETTE: std::sync::LazyLock<Palette> =
|
||||
std::sync::LazyLock::new(|| Palette {
|
||||
primary: color!(0xf8f8f2),
|
||||
secondary: color!(0x9f1670),
|
||||
outgoing: color!(0x005d6f),
|
||||
starred: color!(0xffb86c),
|
||||
text_headers: color!(0xf8f8f2),
|
||||
text_body: color!(0x282a36),
|
||||
});
|
||||
|
||||
pub static DRACULA_LIGHT_PALETTE_EXTENSION: Lazy<PaletteExtension> =
|
||||
Lazy::new(|| DRACULA_LIGHT_PALETTE.generate_palette_extension());
|
||||
pub static DRACULA_LIGHT_PALETTE_EXTENSION: std::sync::LazyLock<PaletteExtension> =
|
||||
std::sync::LazyLock::new(|| DRACULA_LIGHT_PALETTE.generate_palette_extension());
|
||||
|
||||
@@ -4,33 +4,34 @@
|
||||
//! <https://github.com/morhetz/gruvbox>
|
||||
|
||||
use iced::color;
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
use crate::gui::styles::types::palette::Palette;
|
||||
use crate::gui::styles::types::palette_extension::PaletteExtension;
|
||||
|
||||
/// Gruvbox (night style)
|
||||
pub static GRUVBOX_DARK_PALETTE: Lazy<Palette> = Lazy::new(|| Palette {
|
||||
primary: color!(0x282828), // bg
|
||||
secondary: color!(0xfe8019), // orange
|
||||
outgoing: color!(0x8ec07c), // aqua
|
||||
starred: color!(0xd79921, 0.8),
|
||||
text_headers: color!(0x1d2021), // bg0_h
|
||||
text_body: color!(0xebdbb2), // fg
|
||||
});
|
||||
pub static GRUVBOX_DARK_PALETTE: std::sync::LazyLock<Palette> =
|
||||
std::sync::LazyLock::new(|| Palette {
|
||||
primary: color!(0x282828), // bg
|
||||
secondary: color!(0xfe8019), // orange
|
||||
outgoing: color!(0x8ec07c), // aqua
|
||||
starred: color!(0xd79921, 0.8),
|
||||
text_headers: color!(0x1d2021), // bg0_h
|
||||
text_body: color!(0xebdbb2), // fg
|
||||
});
|
||||
|
||||
pub static GRUVBOX_DARK_PALETTE_EXTENSION: Lazy<PaletteExtension> =
|
||||
Lazy::new(|| GRUVBOX_DARK_PALETTE.generate_palette_extension());
|
||||
pub static GRUVBOX_DARK_PALETTE_EXTENSION: std::sync::LazyLock<PaletteExtension> =
|
||||
std::sync::LazyLock::new(|| GRUVBOX_DARK_PALETTE.generate_palette_extension());
|
||||
|
||||
/// Gruvbox (day style)
|
||||
pub static GRUVBOX_LIGHT_PALETTE: Lazy<Palette> = Lazy::new(|| Palette {
|
||||
primary: color!(0xfbf1c7), // bg
|
||||
secondary: color!(0xd65d0e), // orange
|
||||
outgoing: color!(0x689d6a), // aqua
|
||||
starred: color!(0xd79921, 0.9), // yellow
|
||||
text_headers: color!(0xf9f5d7), // bg0_h
|
||||
text_body: color!(0x282828), // fg
|
||||
});
|
||||
pub static GRUVBOX_LIGHT_PALETTE: std::sync::LazyLock<Palette> =
|
||||
std::sync::LazyLock::new(|| Palette {
|
||||
primary: color!(0xfbf1c7), // bg
|
||||
secondary: color!(0xd65d0e), // orange
|
||||
outgoing: color!(0x689d6a), // aqua
|
||||
starred: color!(0xd79921, 0.9), // yellow
|
||||
text_headers: color!(0xf9f5d7), // bg0_h
|
||||
text_body: color!(0x282828), // fg
|
||||
});
|
||||
|
||||
pub static GRUVBOX_LIGHT_PALETTE_EXTENSION: Lazy<PaletteExtension> =
|
||||
Lazy::new(|| GRUVBOX_LIGHT_PALETTE.generate_palette_extension());
|
||||
pub static GRUVBOX_LIGHT_PALETTE_EXTENSION: std::sync::LazyLock<PaletteExtension> =
|
||||
std::sync::LazyLock::new(|| GRUVBOX_LIGHT_PALETTE.generate_palette_extension());
|
||||
|
||||
@@ -3,12 +3,11 @@
|
||||
//! Nord theme
|
||||
//! <https://www.nordtheme.com/docs/colors-and-palettes>
|
||||
use iced::color;
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
use crate::gui::styles::types::palette::Palette;
|
||||
use crate::gui::styles::types::palette_extension::PaletteExtension;
|
||||
|
||||
pub static NORD_DARK_PALETTE: Lazy<Palette> = Lazy::new(|| Palette {
|
||||
pub static NORD_DARK_PALETTE: std::sync::LazyLock<Palette> = std::sync::LazyLock::new(|| Palette {
|
||||
primary: color!(0x2e3440), // nord0
|
||||
secondary: color!(0x88c0d0), // nord8
|
||||
outgoing: color!(0xB48EAD), // nord15
|
||||
@@ -17,17 +16,18 @@
|
||||
text_body: color!(0xd8dee9), // nord4
|
||||
});
|
||||
|
||||
pub static NORD_DARK_PALETTE_EXTENSION: Lazy<PaletteExtension> =
|
||||
Lazy::new(|| NORD_DARK_PALETTE.generate_palette_extension());
|
||||
pub static NORD_DARK_PALETTE_EXTENSION: std::sync::LazyLock<PaletteExtension> =
|
||||
std::sync::LazyLock::new(|| NORD_DARK_PALETTE.generate_palette_extension());
|
||||
|
||||
pub static NORD_LIGHT_PALETTE: Lazy<Palette> = Lazy::new(|| Palette {
|
||||
primary: color!(0xeceff4), // nord6
|
||||
secondary: color!(0x05e81ac), // nord10
|
||||
outgoing: color!(0xb48ead), // nord15
|
||||
starred: color!(0xD08770, 0.8), // nord12
|
||||
text_headers: color!(0xeceff4), // nord6
|
||||
text_body: color!(0x2e3440), // nord0
|
||||
});
|
||||
pub static NORD_LIGHT_PALETTE: std::sync::LazyLock<Palette> =
|
||||
std::sync::LazyLock::new(|| Palette {
|
||||
primary: color!(0xeceff4), // nord6
|
||||
secondary: color!(0x05e81ac), // nord10
|
||||
outgoing: color!(0xb48ead), // nord15
|
||||
starred: color!(0xD08770, 0.8), // nord12
|
||||
text_headers: color!(0xeceff4), // nord6
|
||||
text_body: color!(0x2e3440), // nord0
|
||||
});
|
||||
|
||||
pub static NORD_LIGHT_PALETTE_EXTENSION: Lazy<PaletteExtension> =
|
||||
Lazy::new(|| NORD_LIGHT_PALETTE.generate_palette_extension());
|
||||
pub static NORD_LIGHT_PALETTE_EXTENSION: std::sync::LazyLock<PaletteExtension> =
|
||||
std::sync::LazyLock::new(|| NORD_LIGHT_PALETTE.generate_palette_extension());
|
||||
|
||||
@@ -3,33 +3,34 @@
|
||||
//! Solarized
|
||||
//! <https://ethanschoonover.com/solarized/>
|
||||
use iced::color;
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
use crate::gui::styles::types::palette::Palette;
|
||||
use crate::gui::styles::types::palette_extension::PaletteExtension;
|
||||
|
||||
/// Solarized light (Day style)
|
||||
pub static SOLARIZED_LIGHT_PALETTE: Lazy<Palette> = Lazy::new(|| Palette {
|
||||
primary: color!(0xfdf6e3), // base3
|
||||
secondary: color!(0x859900), // green
|
||||
outgoing: color!(0x268bd2), // blue
|
||||
starred: color!(0xb58900, 0.9), // yellow
|
||||
text_headers: color!(0xfdf6e3), // base3
|
||||
text_body: color!(0x002b36), // base03
|
||||
});
|
||||
pub static SOLARIZED_LIGHT_PALETTE: std::sync::LazyLock<Palette> =
|
||||
std::sync::LazyLock::new(|| Palette {
|
||||
primary: color!(0xfdf6e3), // base3
|
||||
secondary: color!(0x859900), // green
|
||||
outgoing: color!(0x268bd2), // blue
|
||||
starred: color!(0xb58900, 0.9), // yellow
|
||||
text_headers: color!(0xfdf6e3), // base3
|
||||
text_body: color!(0x002b36), // base03
|
||||
});
|
||||
|
||||
pub static SOLARIZED_LIGHT_PALETTE_EXTENSION: Lazy<PaletteExtension> =
|
||||
Lazy::new(|| SOLARIZED_LIGHT_PALETTE.generate_palette_extension());
|
||||
pub static SOLARIZED_LIGHT_PALETTE_EXTENSION: std::sync::LazyLock<PaletteExtension> =
|
||||
std::sync::LazyLock::new(|| SOLARIZED_LIGHT_PALETTE.generate_palette_extension());
|
||||
|
||||
/// Solarized dark (Night style)
|
||||
pub static SOLARIZED_DARK_PALETTE: Lazy<Palette> = Lazy::new(|| Palette {
|
||||
primary: color!(0x002b36), // base03
|
||||
secondary: color!(0x859900), // green
|
||||
outgoing: color!(0x268bd2), // blue
|
||||
starred: color!(0xb58900), // yellow
|
||||
text_headers: color!(0x002b36), // base03
|
||||
text_body: color!(0xeee8d5), // base2
|
||||
});
|
||||
pub static SOLARIZED_DARK_PALETTE: std::sync::LazyLock<Palette> =
|
||||
std::sync::LazyLock::new(|| Palette {
|
||||
primary: color!(0x002b36), // base03
|
||||
secondary: color!(0x859900), // green
|
||||
outgoing: color!(0x268bd2), // blue
|
||||
starred: color!(0xb58900), // yellow
|
||||
text_headers: color!(0x002b36), // base03
|
||||
text_body: color!(0xeee8d5), // base2
|
||||
});
|
||||
|
||||
pub static SOLARIZED_DARK_PALETTE_EXTENSION: Lazy<PaletteExtension> =
|
||||
Lazy::new(|| SOLARIZED_DARK_PALETTE.generate_palette_extension());
|
||||
pub static SOLARIZED_DARK_PALETTE_EXTENSION: std::sync::LazyLock<PaletteExtension> =
|
||||
std::sync::LazyLock::new(|| SOLARIZED_DARK_PALETTE.generate_palette_extension());
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
use iced::widget::pick_list::{Catalog, Status, Style};
|
||||
use iced::{Background, Border, Color};
|
||||
|
||||
use crate::StyleType;
|
||||
use crate::gui::styles::style_constants::BORDER_WIDTH;
|
||||
use crate::gui::styles::types::palette::mix_colors;
|
||||
use crate::StyleType;
|
||||
|
||||
#[derive(Default)]
|
||||
pub enum PicklistType {
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
|
||||
#![allow(clippy::module_name_repetitions)]
|
||||
|
||||
use crate::gui::styles::style_constants::ALERT_RED_COLOR;
|
||||
use crate::StyleType;
|
||||
use iced::widget::rule::{Catalog, FillMode, Style};
|
||||
use crate::gui::styles::style_constants::ALERT_RED_COLOR;
|
||||
use iced::Color;
|
||||
use iced::widget::rule::{Catalog, FillMode, Style};
|
||||
|
||||
#[derive(Default)]
|
||||
pub enum RuleType {
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
use iced::widget::scrollable::{Scrollbar, Scroller};
|
||||
use iced::{Background, Border, Color};
|
||||
|
||||
use crate::StyleType;
|
||||
use crate::gui::styles::style_constants::BORDER_ROUNDED_RADIUS;
|
||||
use crate::gui::styles::types::palette::mix_colors;
|
||||
use crate::StyleType;
|
||||
|
||||
#[derive(Default)]
|
||||
pub enum ScrollbarType {
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
use iced::widget::slider::{Catalog, Handle, HandleShape, Rail, Status};
|
||||
use iced::{Background, Border};
|
||||
|
||||
use crate::StyleType;
|
||||
use crate::gui::styles::style_constants::{BORDER_ROUNDED_RADIUS, BORDER_WIDTH};
|
||||
use crate::gui::styles::types::palette::mix_colors;
|
||||
use crate::StyleType;
|
||||
|
||||
#[derive(Default)]
|
||||
pub enum SliderType {
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
#![allow(clippy::module_name_repetitions)]
|
||||
|
||||
use crate::StyleType;
|
||||
use crate::gui::styles::style_constants::ALERT_RED_COLOR;
|
||||
use crate::gui::types::message::Message;
|
||||
use crate::StyleType;
|
||||
use iced::widget::text::{Catalog, Style};
|
||||
use iced::widget::{Column, Text};
|
||||
use iced::{Color, Font};
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
use iced::widget::text_input::{Catalog, Status, Style};
|
||||
use iced::{Background, Border, Color};
|
||||
|
||||
use crate::gui::styles::style_constants::{ALERT_RED_COLOR, BORDER_WIDTH};
|
||||
use crate::StyleType;
|
||||
use crate::gui::styles::style_constants::{ALERT_RED_COLOR, BORDER_WIDTH};
|
||||
|
||||
#[derive(Default)]
|
||||
pub enum TextInputType {
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
#![allow(clippy::module_name_repetitions)]
|
||||
|
||||
use iced::widget::toggler::{Catalog, Status, Style};
|
||||
use iced::Color;
|
||||
use iced::widget::toggler::{Catalog, Status, Style};
|
||||
|
||||
use crate::gui::styles::style_constants::BORDER_WIDTH;
|
||||
use crate::StyleType;
|
||||
use crate::gui::styles::style_constants::BORDER_WIDTH;
|
||||
|
||||
#[derive(Default)]
|
||||
pub enum TogglerType {
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
|
||||
use iced::Color;
|
||||
use serde::{
|
||||
de::{Error as DeErrorTrait, Unexpected},
|
||||
Deserialize, Deserializer, Serializer,
|
||||
de::{Error as DeErrorTrait, Unexpected},
|
||||
};
|
||||
|
||||
// #aabbcc is seven bytes long
|
||||
@@ -109,7 +109,7 @@ pub(super) fn serialize_color<S>(color: &Color, serializer: S) -> Result<S::Ok,
|
||||
mod tests {
|
||||
use iced::Color;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_test::{assert_de_tokens_error, assert_tokens, Token};
|
||||
use serde_test::{Token, assert_de_tokens_error, assert_tokens};
|
||||
|
||||
use super::{deserialize_color, serialize_color};
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use iced::{Color, Degrees, Gradient};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::gui::styles::types::palette::{mix_colors, Palette};
|
||||
use crate::gui::styles::types::palette::{Palette, mix_colors};
|
||||
|
||||
#[derive(Debug, Clone, Copy, Eq, PartialEq, Default, Serialize, Deserialize)]
|
||||
pub enum GradientType {
|
||||
|
||||
@@ -197,8 +197,8 @@ fn default() -> Self {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use iced::color;
|
||||
use iced::Color;
|
||||
use iced::color;
|
||||
|
||||
use crate::gui::styles::style_constants::{SARASA_MONO, SARASA_MONO_BOLD};
|
||||
use crate::gui::styles::types::palette_extension::PaletteExtension;
|
||||
|
||||
@@ -86,7 +86,7 @@ pub(super) fn serialize_font<S>(font: &Font, serializer: S) -> Result<S::Ok, S::
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use iced::Color;
|
||||
use serde_test::{assert_tokens, Token};
|
||||
use serde_test::{Token, assert_tokens};
|
||||
|
||||
use crate::gui::styles::style_constants::{SARASA_MONO, SARASA_MONO_BOLD};
|
||||
use crate::gui::styles::types::palette_extension::PaletteExtension;
|
||||
|
||||
@@ -70,12 +70,12 @@ pub fn get_font_weight(self) -> FontStyle {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use iced::{color, Color};
|
||||
use serde_test::{assert_tokens, Token};
|
||||
use iced::{Color, color};
|
||||
use serde_test::{Token, assert_tokens};
|
||||
|
||||
use crate::StyleType;
|
||||
use crate::gui::styles::types::custom_palette::{CustomPalette, ExtraStyles};
|
||||
use crate::gui::styles::types::palette::Palette;
|
||||
use crate::StyleType;
|
||||
|
||||
// test if deserializing and serializing a StyleType works n.1
|
||||
// simple case: one of the default themes
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
use iced::advanced::graphics::image::image_rs::ImageFormat;
|
||||
#[cfg(target_os = "linux")]
|
||||
use iced::window::settings::PlatformSpecific;
|
||||
use iced::{application, window, Font, Pixels, Settings};
|
||||
use iced::{Font, Pixels, Settings, application, window};
|
||||
|
||||
use chart::types::chart_type::ChartType;
|
||||
use chart::types::traffic_chart::TrafficChart;
|
||||
@@ -31,7 +31,7 @@
|
||||
use utils::formatted_strings::print_cli_welcome_message;
|
||||
|
||||
use crate::configs::types::config_window::{ConfigWindow, ToPosition, ToSize};
|
||||
use crate::configs::types::configs::{Configs, CONFIGS};
|
||||
use crate::configs::types::configs::{CONFIGS, Configs};
|
||||
use crate::gui::sniffer::FONT_FAMILY_NAME;
|
||||
use crate::gui::styles::style_constants::{ICONS_BYTES, SARASA_MONO_BOLD_BYTES, SARASA_MONO_BYTES};
|
||||
use crate::secondary_threads::check_updates::set_newer_release_status;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
#[allow(clippy::module_name_repetitions)]
|
||||
pub fn get_asn(address: &str, asn_db_reader: &MmdbReader) -> Asn {
|
||||
if let Ok(res) = asn_db_reader.lookup::<MmdbAsnEntry>(address.parse().unwrap()) {
|
||||
if let Ok(Some(res)) = asn_db_reader.lookup::<MmdbAsnEntry>(address.parse().unwrap()) {
|
||||
return res.get_asn();
|
||||
}
|
||||
Asn::default()
|
||||
@@ -14,7 +14,7 @@ pub fn get_asn(address: &str, asn_db_reader: &MmdbReader) -> Asn {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::mmdb::asn::{get_asn, ASN_MMDB};
|
||||
use crate::mmdb::asn::{ASN_MMDB, get_asn};
|
||||
use crate::mmdb::types::mmdb_reader::MmdbReader;
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
#[allow(clippy::module_name_repetitions)]
|
||||
pub fn get_country(address: &str, country_db_reader: &MmdbReader) -> Country {
|
||||
if let Ok(res) = country_db_reader.lookup::<MmdbCountryEntry>(address.parse().unwrap()) {
|
||||
if let Ok(Some(res)) = country_db_reader.lookup::<MmdbCountryEntry>(address.parse().unwrap()) {
|
||||
return res.get_country();
|
||||
}
|
||||
Country::ZZ // unknown
|
||||
@@ -15,7 +15,7 @@ pub fn get_country(address: &str, country_db_reader: &MmdbReader) -> Country {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::countries::types::country::Country;
|
||||
use crate::mmdb::country::{get_country, COUNTRY_MMDB};
|
||||
use crate::mmdb::country::{COUNTRY_MMDB, get_country};
|
||||
use crate::mmdb::types::mmdb_reader::MmdbReader;
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use std::net::IpAddr;
|
||||
use std::sync::Arc;
|
||||
|
||||
use maxminddb::{MaxMindDBError, Reader};
|
||||
use maxminddb::{MaxMindDbError, Reader};
|
||||
use serde::Deserialize;
|
||||
|
||||
#[derive(Clone)]
|
||||
@@ -24,7 +24,10 @@ pub fn from(mmdb_path: &String, default_mmdb: &'static [u8]) -> MmdbReader {
|
||||
MmdbReader::Default(default_reader)
|
||||
}
|
||||
|
||||
pub fn lookup<'a, T: Deserialize<'a>>(&'a self, ip: IpAddr) -> Result<T, MaxMindDBError> {
|
||||
pub fn lookup<'a, T: Deserialize<'a>>(
|
||||
&'a self,
|
||||
ip: IpAddr,
|
||||
) -> Result<Option<T>, MaxMindDbError> {
|
||||
match self {
|
||||
MmdbReader::Default(reader) => reader.lookup(ip),
|
||||
MmdbReader::Custom(reader) => reader.lookup(ip),
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
use etherparse::{EtherType, LaxPacketHeaders, LinkHeader, NetHeaders, TransportHeader};
|
||||
use pcap::{Address, Device};
|
||||
|
||||
use crate::IpVersion::{IPv4, IPv6};
|
||||
use crate::mmdb::asn::get_asn;
|
||||
use crate::mmdb::country::get_country;
|
||||
use crate::mmdb::types::mmdb_reader::MmdbReaders;
|
||||
@@ -26,8 +27,8 @@
|
||||
use crate::networking::types::traffic_direction::TrafficDirection;
|
||||
use crate::networking::types::traffic_type::TrafficType;
|
||||
use crate::utils::formatted_strings::get_domain_from_r_dns;
|
||||
use crate::IpVersion::{IPv4, IPv6};
|
||||
use crate::{InfoTraffic, IpVersion, Protocol};
|
||||
use std::fmt::Write;
|
||||
|
||||
include!(concat!(env!("OUT_DIR"), "/services.rs"));
|
||||
|
||||
@@ -296,7 +297,7 @@ pub fn modify_or_insert_in_map(
|
||||
);
|
||||
// determine upper layer service
|
||||
service = get_service(key, traffic_direction);
|
||||
};
|
||||
}
|
||||
|
||||
let mut info_traffic = info_traffic_mutex
|
||||
.lock()
|
||||
@@ -633,7 +634,7 @@ pub fn is_my_address(local_address: &String, my_interface_addresses: &Vec<Addres
|
||||
fn mac_from_dec_to_hex(mac_dec: [u8; 6]) -> String {
|
||||
let mut mac_hex = String::new();
|
||||
for n in &mac_dec {
|
||||
mac_hex.push_str(&format!("{n:02x}:"));
|
||||
let _ = write!(mac_hex, "{n:02x}:");
|
||||
}
|
||||
mac_hex.pop();
|
||||
mac_hex
|
||||
@@ -653,6 +654,8 @@ mod tests {
|
||||
|
||||
use pcap::Address;
|
||||
|
||||
use crate::Protocol;
|
||||
use crate::Service;
|
||||
use crate::networking::manage_packets::{
|
||||
get_service, get_traffic_direction, get_traffic_type, is_local_connection,
|
||||
mac_from_dec_to_hex,
|
||||
@@ -661,8 +664,6 @@ mod tests {
|
||||
use crate::networking::types::service_query::ServiceQuery;
|
||||
use crate::networking::types::traffic_direction::TrafficDirection;
|
||||
use crate::networking::types::traffic_type::TrafficType;
|
||||
use crate::Protocol;
|
||||
use crate::Service;
|
||||
|
||||
include!(concat!(env!("OUT_DIR"), "/services.rs"));
|
||||
|
||||
@@ -1134,9 +1135,11 @@ fn is_local_connection_ipv6_link_local_test() {
|
||||
fn test_get_service_simple_only_one_valid() {
|
||||
let unknown_port = Some(65000);
|
||||
for p in [Protocol::TCP, Protocol::UDP] {
|
||||
assert!(SERVICES
|
||||
.get(&ServiceQuery(unknown_port.unwrap(), p))
|
||||
.is_none());
|
||||
assert!(
|
||||
SERVICES
|
||||
.get(&ServiceQuery(unknown_port.unwrap(), p))
|
||||
.is_none()
|
||||
);
|
||||
for d in [TrafficDirection::Incoming, TrafficDirection::Outgoing] {
|
||||
let key = AddressPortPair::new(
|
||||
String::new(),
|
||||
@@ -1347,12 +1350,16 @@ fn test_get_service_unknown() {
|
||||
let unknown_port_1 = Some(39332);
|
||||
let unknown_port_2 = Some(23679);
|
||||
for p in [Protocol::TCP, Protocol::UDP] {
|
||||
assert!(SERVICES
|
||||
.get(&ServiceQuery(unknown_port_1.unwrap(), p))
|
||||
.is_none());
|
||||
assert!(SERVICES
|
||||
.get(&ServiceQuery(unknown_port_2.unwrap(), p))
|
||||
.is_none());
|
||||
assert!(
|
||||
SERVICES
|
||||
.get(&ServiceQuery(unknown_port_1.unwrap(), p))
|
||||
.is_none()
|
||||
);
|
||||
assert!(
|
||||
SERVICES
|
||||
.get(&ServiceQuery(unknown_port_2.unwrap(), p))
|
||||
.is_none()
|
||||
);
|
||||
for d in [TrafficDirection::Incoming, TrafficDirection::Outgoing] {
|
||||
for (p1, p2) in [
|
||||
(unknown_port_1, unknown_port_2),
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
use std::fmt::{Display, Formatter};
|
||||
|
||||
use etherparse::ArpOperation;
|
||||
use std::fmt::Write;
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default)]
|
||||
pub enum ArpType {
|
||||
@@ -27,7 +28,7 @@ pub fn pretty_print_types(map: &HashMap<ArpType, usize>) -> String {
|
||||
vec.sort_by(|(_, a), (_, b)| b.cmp(a));
|
||||
|
||||
for (arp_type, n) in vec {
|
||||
ret_val.push_str(&format!(" {arp_type} ({n})\n"));
|
||||
let _ = writeln!(ret_val, " {arp_type} ({n})");
|
||||
}
|
||||
ret_val
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
use crate::networking::types::ip_collection::AddressCollection;
|
||||
use once_cell::sync::Lazy;
|
||||
use std::net::IpAddr;
|
||||
use std::str::FromStr;
|
||||
|
||||
@@ -10,12 +9,12 @@ pub struct Bogon {
|
||||
|
||||
// IPv4 bogons
|
||||
|
||||
static THIS_NETWORK: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static THIS_NETWORK: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("0.0.0.0-0.255.255.255").unwrap(),
|
||||
description: "\"this\" network",
|
||||
});
|
||||
|
||||
static PRIVATE_USE: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static PRIVATE_USE: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new(
|
||||
"10.0.0.0-10.255.255.255, 172.16.0.0-172.31.255.255, 192.168.0.0-192.168.255.255",
|
||||
)
|
||||
@@ -23,84 +22,84 @@ pub struct Bogon {
|
||||
description: "private-use",
|
||||
});
|
||||
|
||||
static CARRIER_GRADE: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static CARRIER_GRADE: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("100.64.0.0-100.127.255.255").unwrap(),
|
||||
description: "carrier-grade NAT",
|
||||
});
|
||||
|
||||
static LOOPBACK: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static LOOPBACK: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("127.0.0.0-127.255.255.255").unwrap(),
|
||||
description: "loopback",
|
||||
});
|
||||
|
||||
static LINK_LOCAL: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static LINK_LOCAL: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("169.254.0.0-169.254.255.255").unwrap(),
|
||||
description: "link local",
|
||||
});
|
||||
|
||||
static IETF_PROTOCOL: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static IETF_PROTOCOL: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("192.0.0.0-192.0.0.255").unwrap(),
|
||||
description: "IETF protocol assignments",
|
||||
});
|
||||
|
||||
static TEST_NET_1: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static TEST_NET_1: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("192.0.2.0-192.0.2.255").unwrap(),
|
||||
description: "TEST-NET-1",
|
||||
});
|
||||
|
||||
static NETWORK_INTERCONNECT: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static NETWORK_INTERCONNECT: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("198.18.0.0-198.19.255.255").unwrap(),
|
||||
description: "network interconnect device benchmark testing",
|
||||
});
|
||||
|
||||
static TEST_NET_2: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static TEST_NET_2: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("198.51.100.0-198.51.100.255").unwrap(),
|
||||
description: "TEST-NET-2",
|
||||
});
|
||||
|
||||
static TEST_NET_3: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static TEST_NET_3: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("203.0.113.0-203.0.113.255").unwrap(),
|
||||
description: "TEST-NET-3",
|
||||
});
|
||||
|
||||
static FUTURE_USE: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static FUTURE_USE: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("240.0.0.0-255.255.255.255").unwrap(),
|
||||
description: "future use",
|
||||
});
|
||||
|
||||
// IPv6 bogons
|
||||
|
||||
static NODE_SCOPE_UNSPECIFIED: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static NODE_SCOPE_UNSPECIFIED: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("::").unwrap(),
|
||||
description: "node-scope unicast unspecified",
|
||||
});
|
||||
|
||||
static NODE_SCOPE_LOOPBACK: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static NODE_SCOPE_LOOPBACK: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("::1").unwrap(),
|
||||
description: "node-scope unicast loopback",
|
||||
});
|
||||
|
||||
static IPV4_MAPPED: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static IPV4_MAPPED: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("::ffff:0.0.0.0-::ffff:255.255.255.255").unwrap(),
|
||||
description: "IPv4-mapped",
|
||||
});
|
||||
|
||||
static IPV4_COMPATIBLE: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static IPV4_COMPATIBLE: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("::-::255.255.255.255").unwrap(),
|
||||
description: "IPv4-compatible",
|
||||
});
|
||||
|
||||
static REMOTELY_TRIGGERED: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static REMOTELY_TRIGGERED: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("100::-100::ffff:ffff:ffff:ffff").unwrap(),
|
||||
description: "remotely triggered black hole",
|
||||
});
|
||||
|
||||
static ORCHID: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static ORCHID: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("2001:10::-2001:1f:ffff:ffff:ffff:ffff:ffff:ffff").unwrap(),
|
||||
description: "ORCHID",
|
||||
});
|
||||
|
||||
static DOCUMENTATION_PREFIX: Lazy<Bogon> = Lazy::new(|| {
|
||||
static DOCUMENTATION_PREFIX: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| {
|
||||
Bogon {
|
||||
range: AddressCollection::new("2001:db8::-2001:db8:ffff:ffff:ffff:ffff:ffff:ffff, 3fff::-3fff:fff:ffff:ffff:ffff:ffff:ffff:ffff")
|
||||
.unwrap(),
|
||||
@@ -108,24 +107,24 @@ pub struct Bogon {
|
||||
}
|
||||
});
|
||||
|
||||
static ULA: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static ULA: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff").unwrap(),
|
||||
description: "ULA",
|
||||
});
|
||||
|
||||
static LINK_LOCAL_UNICAST: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static LINK_LOCAL_UNICAST: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff").unwrap(),
|
||||
description: "link-local unicast",
|
||||
});
|
||||
|
||||
static SITE_LOCAL_UNICAST: Lazy<Bogon> = Lazy::new(|| Bogon {
|
||||
static SITE_LOCAL_UNICAST: std::sync::LazyLock<Bogon> = std::sync::LazyLock::new(|| Bogon {
|
||||
range: AddressCollection::new("fec0::-feff:ffff:ffff:ffff:ffff:ffff:ffff:ffff").unwrap(),
|
||||
description: "site-local unicast",
|
||||
});
|
||||
|
||||
// all bogons
|
||||
|
||||
static BOGONS: Lazy<Vec<&'static Bogon>> = Lazy::new(|| {
|
||||
static BOGONS: std::sync::LazyLock<Vec<&'static Bogon>> = std::sync::LazyLock::new(|| {
|
||||
vec![
|
||||
&THIS_NETWORK,
|
||||
&PRIVATE_USE,
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
use std::fmt::{Display, Formatter};
|
||||
|
||||
use etherparse::{Icmpv4Type, Icmpv6Type};
|
||||
use std::fmt::Write;
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Hash)]
|
||||
pub enum IcmpType {
|
||||
@@ -17,7 +18,7 @@ pub fn pretty_print_types(map: &HashMap<IcmpType, usize>) -> String {
|
||||
vec.sort_by(|(_, a), (_, b)| b.cmp(a));
|
||||
|
||||
for (icmp_type, n) in vec {
|
||||
ret_val.push_str(&format!(" {icmp_type} ({n})\n"));
|
||||
let _ = writeln!(ret_val, " {icmp_type} ({n})");
|
||||
}
|
||||
ret_val
|
||||
}
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
|
||||
use chrono::{DateTime, Local};
|
||||
|
||||
use crate::Service;
|
||||
use crate::networking::types::arp_type::ArpType;
|
||||
use crate::networking::types::icmp_type::IcmpType;
|
||||
use crate::networking::types::traffic_direction::TrafficDirection;
|
||||
use crate::Service;
|
||||
|
||||
/// Struct useful to format the output report file and to keep track of statistics about the sniffed traffic.
|
||||
///
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
|
||||
use std::collections::{HashMap, HashSet};
|
||||
|
||||
use crate::Service;
|
||||
use crate::networking::types::address_port_pair::AddressPortPair;
|
||||
use crate::networking::types::data_info::DataInfo;
|
||||
use crate::networking::types::data_info_host::DataInfoHost;
|
||||
use crate::networking::types::host::Host;
|
||||
use crate::networking::types::info_address_port_pair::InfoAddressPortPair;
|
||||
use crate::networking::types::traffic_direction::TrafficDirection;
|
||||
use crate::Service;
|
||||
|
||||
/// Struct to be shared between the threads in charge of parsing packets and update reports.
|
||||
pub struct InfoTraffic {
|
||||
|
||||
@@ -101,13 +101,19 @@ fn test_default_collection_contains_everything() {
|
||||
assert!(collection.contains(&IpAddr::from_str("0.0.0.0").unwrap()));
|
||||
assert!(collection.contains(&IpAddr::from_str("255.255.255.255").unwrap()));
|
||||
assert!(collection.contains(&IpAddr::from_str("192.168.1.1").unwrap()));
|
||||
assert!(collection
|
||||
.contains(&IpAddr::from_str("0000:0000:0000:0000:0000:0000:0000:0000").unwrap()));
|
||||
assert!(collection
|
||||
.contains(&IpAddr::from_str("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff").unwrap()));
|
||||
assert!(
|
||||
collection
|
||||
.contains(&IpAddr::from_str("0000:0000:0000:0000:0000:0000:0000:0000").unwrap())
|
||||
);
|
||||
assert!(
|
||||
collection
|
||||
.contains(&IpAddr::from_str("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff").unwrap())
|
||||
);
|
||||
assert!(collection.contains(&IpAddr::from_str("88::02").unwrap()));
|
||||
assert!(collection
|
||||
.contains(&IpAddr::from_str("2001:db8:1234:ffff:ffff:ffff:ffff:eeee").unwrap()));
|
||||
assert!(
|
||||
collection
|
||||
.contains(&IpAddr::from_str("2001:db8:1234:ffff:ffff:ffff:ffff:eeee").unwrap())
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -275,22 +281,36 @@ fn test_ip_collection_contains() {
|
||||
fn test_ip_collection_contains_ipv6() {
|
||||
let collection =
|
||||
AddressCollection::new( "2001:db8:1234:0000:0000:0000:0000:0000-2001:db8:1234:ffff:ffff:ffff:ffff:ffff,daa::aad,caa::aac").unwrap();
|
||||
assert!(collection
|
||||
.contains(&IpAddr::from_str("2001:db8:1234:0000:0000:0000:0000:0000").unwrap()));
|
||||
assert!(collection
|
||||
.contains(&IpAddr::from_str("2001:db8:1234:ffff:ffff:ffff:ffff:ffff").unwrap()));
|
||||
assert!(collection
|
||||
.contains(&IpAddr::from_str("2001:db8:1234:ffff:ffff:ffff:ffff:eeee").unwrap()));
|
||||
assert!(collection
|
||||
.contains(&IpAddr::from_str("2001:db8:1234:aaaa:ffff:ffff:ffff:eeee").unwrap()));
|
||||
assert!(
|
||||
collection
|
||||
.contains(&IpAddr::from_str("2001:db8:1234:0000:0000:0000:0000:0000").unwrap())
|
||||
);
|
||||
assert!(
|
||||
collection
|
||||
.contains(&IpAddr::from_str("2001:db8:1234:ffff:ffff:ffff:ffff:ffff").unwrap())
|
||||
);
|
||||
assert!(
|
||||
collection
|
||||
.contains(&IpAddr::from_str("2001:db8:1234:ffff:ffff:ffff:ffff:eeee").unwrap())
|
||||
);
|
||||
assert!(
|
||||
collection
|
||||
.contains(&IpAddr::from_str("2001:db8:1234:aaaa:ffff:ffff:ffff:eeee").unwrap())
|
||||
);
|
||||
assert!(collection.contains(&IpAddr::from_str("daa::aad").unwrap()));
|
||||
assert!(collection.contains(&IpAddr::from_str("caa::aac").unwrap()));
|
||||
assert!(!collection
|
||||
.contains(&IpAddr::from_str("2000:db8:1234:0000:0000:0000:0000:0000").unwrap()));
|
||||
assert!(!collection
|
||||
.contains(&IpAddr::from_str("2001:db8:1235:ffff:ffff:ffff:ffff:ffff").unwrap()));
|
||||
assert!(!collection
|
||||
.contains(&IpAddr::from_str("2001:eb8:1234:ffff:ffff:ffff:ffff:eeee").unwrap()));
|
||||
assert!(
|
||||
!collection
|
||||
.contains(&IpAddr::from_str("2000:db8:1234:0000:0000:0000:0000:0000").unwrap())
|
||||
);
|
||||
assert!(
|
||||
!collection
|
||||
.contains(&IpAddr::from_str("2001:db8:1235:ffff:ffff:ffff:ffff:ffff").unwrap())
|
||||
);
|
||||
assert!(
|
||||
!collection
|
||||
.contains(&IpAddr::from_str("2001:eb8:1234:ffff:ffff:ffff:ffff:eeee").unwrap())
|
||||
);
|
||||
assert!(!collection.contains(&IpAddr::from_str("da::aad").unwrap()));
|
||||
assert!(!collection.contains(&IpAddr::from_str("caa::aab").unwrap()));
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use iced::widget::Column;
|
||||
use iced::Font;
|
||||
use iced::widget::Column;
|
||||
use pcap::Linktype;
|
||||
|
||||
use crate::gui::styles::text::TextType;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
BytesThresholdExceeded, FavoriteTransmitted, LoggedNotification, PacketsThresholdExceeded,
|
||||
};
|
||||
use crate::notifications::types::notifications::Notifications;
|
||||
use crate::notifications::types::sound::{play, Sound};
|
||||
use crate::notifications::types::sound::{Sound, play};
|
||||
use crate::{InfoTraffic, RunTimeData};
|
||||
|
||||
/// Checks if one or more notifications have to be emitted and logs them.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::notifications::types::sound::Sound;
|
||||
use crate::ByteMultiple;
|
||||
use crate::notifications::types::sound::Sound;
|
||||
|
||||
/// Used to contain the notifications configuration set by the user
|
||||
#[derive(Clone, Serialize, Deserialize, Copy, PartialEq, Debug)]
|
||||
|
||||
@@ -6,10 +6,10 @@
|
||||
use rodio::{Decoder, OutputStream, Sink};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::StyleType;
|
||||
use crate::gui::styles::style_constants::FONT_SIZE_FOOTER;
|
||||
use crate::notifications::types::sound::Sound::{Gulp, Pop, Swhoosh};
|
||||
use crate::utils::types::icon::Icon;
|
||||
use crate::StyleType;
|
||||
|
||||
/// Enum representing the possible notification sounds.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
use crate::ByteMultiple;
|
||||
use crate::networking::types::address_port_pair::AddressPortPair;
|
||||
use crate::networking::types::info_address_port_pair::InfoAddressPortPair;
|
||||
use crate::report::types::search_parameters::FilterInputType;
|
||||
@@ -7,7 +8,6 @@
|
||||
use crate::translations::translations_2::{destination_translation, source_translation};
|
||||
use crate::translations::translations_3::{port_translation, service_translation};
|
||||
use crate::translations::types::language::Language;
|
||||
use crate::ByteMultiple;
|
||||
|
||||
// total width: 1012.0
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
use serde::Deserialize;
|
||||
|
||||
use crate::utils::formatted_strings::APP_VERSION;
|
||||
use crate::SNIFFNET_LOWERCASE;
|
||||
use crate::utils::formatted_strings::APP_VERSION;
|
||||
|
||||
#[derive(Deserialize, Debug)]
|
||||
struct AppVersion {
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
use etherparse::{LaxPacketHeaders, LenSource};
|
||||
use pcap::Packet;
|
||||
|
||||
use crate::InfoTraffic;
|
||||
use crate::mmdb::types::mmdb_reader::MmdbReaders;
|
||||
use crate::networking::manage_packets::{
|
||||
analyze_headers, get_address_to_lookup, modify_or_insert_in_map, reverse_dns_lookup,
|
||||
@@ -23,7 +24,6 @@
|
||||
use crate::networking::types::my_device::MyDevice;
|
||||
use crate::networking::types::my_link_type::MyLinkType;
|
||||
use crate::networking::types::packet_filters_fields::PacketFiltersFields;
|
||||
use crate::InfoTraffic;
|
||||
|
||||
/// The calling thread enters a loop in which it waits for network packets, parses them according
|
||||
/// to the user specified filters, and inserts them into the shared map variable.
|
||||
@@ -47,7 +47,6 @@ pub fn parse_packets(
|
||||
if *current_capture_id.lock().unwrap() != capture_id {
|
||||
return;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
Ok(packet) => {
|
||||
if *current_capture_id.lock().unwrap() != capture_id {
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
use iced::widget::Text;
|
||||
|
||||
use crate::translations::types::language::Language;
|
||||
use crate::StyleType;
|
||||
use crate::translations::types::language::Language;
|
||||
|
||||
pub fn choose_adapters_translation<'a>(language: Language) -> Text<'a, StyleType> {
|
||||
Text::new(match language {
|
||||
@@ -466,199 +466,311 @@ pub fn network_adapter_translation(language: Language) -> &'static str {
|
||||
pub fn no_addresses_translation<'a>(language: Language, adapter: &str) -> Text<'a, StyleType> {
|
||||
let network_adapter_translation = network_adapter_translation(language);
|
||||
Text::new(match language {
|
||||
Language::EN => format!("No traffic can be observed because the adapter you selected has no active addresses...\n\n\
|
||||
Language::EN => format!(
|
||||
"No traffic can be observed because the adapter you selected has no active addresses...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
If you are sure you are connected to the internet, try choosing a different adapter."),
|
||||
Language::IT => format!("Non è osservabile alcun traffico perché l'adattatore di rete selezionato non ha indirizzi attivi...\n\n\
|
||||
If you are sure you are connected to the internet, try choosing a different adapter."
|
||||
),
|
||||
Language::IT => format!(
|
||||
"Non è osservabile alcun traffico perché l'adattatore di rete selezionato non ha indirizzi attivi...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Se sei sicuro di essere connesso ad internet, prova a scegliere un adattatore diverso."),
|
||||
Language::FR => format!("Aucun trafic ne peut être observé, car la carte réseau que vous avez saisie n'a pas d'adresse...\n\n\
|
||||
Se sei sicuro di essere connesso ad internet, prova a scegliere un adattatore diverso."
|
||||
),
|
||||
Language::FR => format!(
|
||||
"Aucun trafic ne peut être observé, car la carte réseau que vous avez saisie n'a pas d'adresse...\n\n\
|
||||
{network_adapter_translation} : {adapter}\n\n\
|
||||
Si vous êtes sûr d'être connecté à internet, essayez une autre carte."),
|
||||
Language::ES => format!("No se puede observar ningún tráfico porque el adaptador seleccionado no tiene direcciones activas...\n\n\
|
||||
Si vous êtes sûr d'être connecté à internet, essayez une autre carte."
|
||||
),
|
||||
Language::ES => format!(
|
||||
"No se puede observar ningún tráfico porque el adaptador seleccionado no tiene direcciones activas...\n\n\
|
||||
{network_adapter_translation} : {adapter}\n\n\
|
||||
Si estás seguro de que estás conectado a Internet, prueba a elegir otro adaptador."),
|
||||
Language::PL => format!("Nie można zaobserwować żadnego ruchu, ponieważ wybrany adapter nie ma aktywnych adresów...\n\n\
|
||||
Si estás seguro de que estás conectado a Internet, prueba a elegir otro adaptador."
|
||||
),
|
||||
Language::PL => format!(
|
||||
"Nie można zaobserwować żadnego ruchu, ponieważ wybrany adapter nie ma aktywnych adresów...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Jeśli jesteś pewien, że jesteś podłączony do internetu, spróbuj wybrać inny adapter."),
|
||||
Language::DE => format!("Es kann kein Netzwerkverkehr beobachtet werden, weil der Adapter keine aktiven Adressen hat...\n\n\
|
||||
Jeśli jesteś pewien, że jesteś podłączony do internetu, spróbuj wybrać inny adapter."
|
||||
),
|
||||
Language::DE => format!(
|
||||
"Es kann kein Netzwerkverkehr beobachtet werden, weil der Adapter keine aktiven Adressen hat...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Wenn du dir sicher bist, dass du mit dem Internet verbunden bist, probier einen anderen Adapter auszuwählen."),
|
||||
Language::UK => format!("Не зафіксовано жодного мережевого руху, тому що вибраний адаптер не має активних адрес... \n\n\
|
||||
Wenn du dir sicher bist, dass du mit dem Internet verbunden bist, probier einen anderen Adapter auszuwählen."
|
||||
),
|
||||
Language::UK => format!(
|
||||
"Не зафіксовано жодного мережевого руху, тому що вибраний адаптер не має активних адрес... \n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Якщо ви впевнені, що підключені до інтернету, спробуйте вибрати інший адаптер."),
|
||||
Language::ZH => format!("您选择的网络适配器当前无活动网络...\n\n\
|
||||
Якщо ви впевнені, що підключені до інтернету, спробуйте вибрати інший адаптер."
|
||||
),
|
||||
Language::ZH => format!(
|
||||
"您选择的网络适配器当前无活动网络...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
如果您确信您已成功连接互联网, 请尝试选择其他网络适配器."),
|
||||
Language::RO => format!("Niciun trafic nu poate fi observat deoarece adaptorul selectat nu are adrese active...\n\n\
|
||||
如果您确信您已成功连接互联网, 请尝试选择其他网络适配器."
|
||||
),
|
||||
Language::RO => format!(
|
||||
"Niciun trafic nu poate fi observat deoarece adaptorul selectat nu are adrese active...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Dacă sunteți sigur că sunteți conectat la internet, încercați să alegeți un alt adaptor."),
|
||||
Language::KO => format!("선택한 어댑터에 유효한 주소가 없기 때문에 트래픽을 확인할 수 없습니다...\n\n\
|
||||
Dacă sunteți sigur că sunteți conectat la internet, încercați să alegeți un alt adaptor."
|
||||
),
|
||||
Language::KO => format!(
|
||||
"선택한 어댑터에 유효한 주소가 없기 때문에 트래픽을 확인할 수 없습니다...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
인터넷이 연결되어있다면 다른 어댑터로 시도해보세요."),
|
||||
Language::TR => format!("Seçtiğiniz adaptör aktif bir adrese sahip olmadığı için hiç bir trafik izlenemez...\n\n\
|
||||
인터넷이 연결되어있다면 다른 어댑터로 시도해보세요."
|
||||
),
|
||||
Language::TR => format!(
|
||||
"Seçtiğiniz adaptör aktif bir adrese sahip olmadığı için hiç bir trafik izlenemez...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Eğer gerçekten internete bağlı olduğunuza eminseniz, başka bir adaptör seçmeyi deneyiniz."),
|
||||
Language::RU => format!("Наблюдение за трафиком не возможно, потому что Вы выбрали интерфейс без активного адреса...\n\n\
|
||||
Eğer gerçekten internete bağlı olduğunuza eminseniz, başka bir adaptör seçmeyi deneyiniz."
|
||||
),
|
||||
Language::RU => format!(
|
||||
"Наблюдение за трафиком не возможно, потому что Вы выбрали интерфейс без активного адреса...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Если Вы уверены, что подключены к Интернету, попробуйте выбрать другой интерфейс."),
|
||||
Language::PT => format!("Não é possível observar tráfego porque o adaptador que selecionou não tem endereços ativos...\n\n\
|
||||
Если Вы уверены, что подключены к Интернету, попробуйте выбрать другой интерфейс."
|
||||
),
|
||||
Language::PT => format!(
|
||||
"Não é possível observar tráfego porque o adaptador que selecionou não tem endereços ativos...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Se tiver a certeza que está ligado à internet, tente escolher um adaptador diferente."),
|
||||
Language::EL => format!("Δεν μπορεί να ανιχνευθεί κίνηση επειδή ο προσαρμογέας που επέλεξες δεν έχει ενεργές διευθύνσεις...\n\n\
|
||||
Se tiver a certeza que está ligado à internet, tente escolher um adaptador diferente."
|
||||
),
|
||||
Language::EL => format!(
|
||||
"Δεν μπορεί να ανιχνευθεί κίνηση επειδή ο προσαρμογέας που επέλεξες δεν έχει ενεργές διευθύνσεις...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Αν είσαι σίγουρος ότι είσαι συνδεδεμένος στο διαδίκτυο, δοκίμασε αν επιλέξεις έναν διαφορετικό προσαρμογέα."),
|
||||
Αν είσαι σίγουρος ότι είσαι συνδεδεμένος στο διαδίκτυο, δοκίμασε αν επιλέξεις έναν διαφορετικό προσαρμογέα."
|
||||
),
|
||||
// Language::FA => format!("هیچ آمد و شدی قابل مشاهده نیست چون مبدلی که انتخاب کرده اید هیچ نشانی فعالی ندارد...\n\n\
|
||||
// مبدل شبکه: {adapter}\n\n\
|
||||
// اگر مطمئن هستید به اینترنت وصل هستید، سعی کنید مبدل متفاوتی را انتخاب کنید."),
|
||||
Language::SV => format!("Det går inte att observa någon trafik eftersom den valda adaptern inte har några aktiva adresser ...\n\n\
|
||||
Language::SV => format!(
|
||||
"Det går inte att observa någon trafik eftersom den valda adaptern inte har några aktiva adresser ...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Om du är säker att du är ansluten till internet, testa att välja en annan adapter."),
|
||||
Language::FI => format!("Liikennettä ei voitu havainnoida, koska valitulla sovittimella ei ole aktiivista osoitetta...\n\n\
|
||||
Om du är säker att du är ansluten till internet, testa att välja en annan adapter."
|
||||
),
|
||||
Language::FI => format!(
|
||||
"Liikennettä ei voitu havainnoida, koska valitulla sovittimella ei ole aktiivista osoitetta...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Jos olet varma että sinulla on internet-yhteys, kokeile valita toinen verkkosovitin."),
|
||||
Language::JA => format!("選択されたアダプターが有効なアドレスを持っていないため、トラフィックを観測できていません...\n\n\
|
||||
Jos olet varma että sinulla on internet-yhteys, kokeile valita toinen verkkosovitin."
|
||||
),
|
||||
Language::JA => format!(
|
||||
"選択されたアダプターが有効なアドレスを持っていないため、トラフィックを観測できていません...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
インターネットに接続しているか確認し、別のネットワーク アダプターを試してください。"),
|
||||
Language::UZ => format!("Trafik kuzatilmaydi, chunki siz tanlagan adapterda faol manzillar yo'q...\n\n\
|
||||
インターネットに接続しているか確認し、別のネットワーク アダプターを試してください。"
|
||||
),
|
||||
Language::UZ => format!(
|
||||
"Trafik kuzatilmaydi, chunki siz tanlagan adapterda faol manzillar yo'q...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Internetga ulanganingizga ishonchingiz komil bo'lsa, boshqa adapterni tanlashga harakat qiling"),
|
||||
Language::VI => format!("Không thể quan sát lưu lượng nào vì adapter mà bạn chọn không địa chỉ hoạt động...\n\n\
|
||||
Internetga ulanganingizga ishonchingiz komil bo'lsa, boshqa adapterni tanlashga harakat qiling"
|
||||
),
|
||||
Language::VI => format!(
|
||||
"Không thể quan sát lưu lượng nào vì adapter mà bạn chọn không địa chỉ hoạt động...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Nếu bạn đã chắc chắn kết nối với internet, hãy thử chọn network adapter khác."),
|
||||
Nếu bạn đã chắc chắn kết nối với internet, hãy thử chọn network adapter khác."
|
||||
),
|
||||
})
|
||||
}
|
||||
|
||||
pub fn waiting_translation<'a>(language: Language, adapter: &str) -> Text<'a, StyleType> {
|
||||
let network_adapter_translation = network_adapter_translation(language);
|
||||
Text::new(match language {
|
||||
Language::EN => format!("No traffic has been observed yet. Waiting for network packets...\n\n\
|
||||
Language::EN => format!(
|
||||
"No traffic has been observed yet. Waiting for network packets...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Are you sure you are connected to the internet and you have selected the correct adapter?"),
|
||||
Language::IT => format!("Nessun tipo di traffico è stato osservato finora. Attendo pacchetti di rete...\n\n\
|
||||
Are you sure you are connected to the internet and you have selected the correct adapter?"
|
||||
),
|
||||
Language::IT => format!(
|
||||
"Nessun tipo di traffico è stato osservato finora. Attendo pacchetti di rete...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Sei sicuro di esser connesso ad internet e di aver selezionato l'adattatore corretto?"),
|
||||
Language::FR => format!("Aucun trafic n'a été capturé pour le moment. En attente de paquets...\n\n\
|
||||
Sei sicuro di esser connesso ad internet e di aver selezionato l'adattatore corretto?"
|
||||
),
|
||||
Language::FR => format!(
|
||||
"Aucun trafic n'a été capturé pour le moment. En attente de paquets...\n\n\
|
||||
{network_adapter_translation} : {adapter}\n\n\
|
||||
Êtes-vous sûr d'être connecté à internet et d'avoir selectionné la bonne carte réseau ?"),
|
||||
Language::ES => format!("Aún no se ha captado tráfico. Esperando paquetes...\n\n\
|
||||
Êtes-vous sûr d'être connecté à internet et d'avoir selectionné la bonne carte réseau ?"
|
||||
),
|
||||
Language::ES => format!(
|
||||
"Aún no se ha captado tráfico. Esperando paquetes...\n\n\
|
||||
{network_adapter_translation} : {adapter}\n\n\
|
||||
¿Está seguro de que está conectado a Internet y ha seleccionado la tarjeta de red correcta?"),
|
||||
Language::PL => format!("Nie zaobserowano żadnego ruchu sieciowego. Oczekiwanie na pakiety...\n\n\
|
||||
¿Está seguro de que está conectado a Internet y ha seleccionado la tarjeta de red correcta?"
|
||||
),
|
||||
Language::PL => format!(
|
||||
"Nie zaobserowano żadnego ruchu sieciowego. Oczekiwanie na pakiety...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Czy na pewno jesteś podłączony do internetu i wybrałeś właściwy adapter?"),
|
||||
Language::DE => format!("Noch kein Netzwerkverkehr beobachtet. Warten auf Pakete...\n\n\
|
||||
Czy na pewno jesteś podłączony do internetu i wybrałeś właściwy adapter?"
|
||||
),
|
||||
Language::DE => format!(
|
||||
"Noch kein Netzwerkverkehr beobachtet. Warten auf Pakete...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Bist du sicher, dass du mit dem Internet verbunden bist und den richtigen Adapter ausgewählt hast?"),
|
||||
Language::UK => format!("Не зафіксовано жодного мережевого руху. Очікування пакетів...\n\n\
|
||||
Bist du sicher, dass du mit dem Internet verbunden bist und den richtigen Adapter ausgewählt hast?"
|
||||
),
|
||||
Language::UK => format!(
|
||||
"Не зафіксовано жодного мережевого руху. Очікування пакетів...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Чи ви дійсно підключені до інтернету і вибрали відповідний мережевий адаптер?"),
|
||||
Language::ZH => format!("暂无流量数据. 等待网络活动中......\n\n\
|
||||
Чи ви дійсно підключені до інтернету і вибрали відповідний мережевий адаптер?"
|
||||
),
|
||||
Language::ZH => format!(
|
||||
"暂无流量数据. 等待网络活动中......\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
您确信您已成功连接到互联网, 并选择了当前正在使用的的网络适配器吗?"),
|
||||
Language::RO => format!("Nu a fost observat încă trafic. Se așteaptă pachetele de rețea...\n\n\
|
||||
您确信您已成功连接到互联网, 并选择了当前正在使用的的网络适配器吗?"
|
||||
),
|
||||
Language::RO => format!(
|
||||
"Nu a fost observat încă trafic. Se așteaptă pachetele de rețea...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Ești sigur că ești conectat la internet și ai selectat adaptorul corect?"),
|
||||
Language::KO => format!("아직 트래픽이 관찰되지 않았습니다. 네트워크 패킷 대기 중...\n\n\
|
||||
Ești sigur că ești conectat la internet și ai selectat adaptorul corect?"
|
||||
),
|
||||
Language::KO => format!(
|
||||
"아직 트래픽이 관찰되지 않았습니다. 네트워크 패킷 대기 중...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
인터넷에 연결되어 있고 올바른 어댑터를 선택하셨습니까?"),
|
||||
Language::TR => format!("Henüz bir trafik algılanamadı. Ağ paketleri için bekleniyor...\n\n\
|
||||
인터넷에 연결되어 있고 올바른 어댑터를 선택하셨습니까?"
|
||||
),
|
||||
Language::TR => format!(
|
||||
"Henüz bir trafik algılanamadı. Ağ paketleri için bekleniyor...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
İnternete bağlı olduğunuza ve doğru adaptörü seçtiğinize emin misiniz?"),
|
||||
Language::RU => format!("Трафик не обнаружен. Ожидаем сетевые пакеты...\n\n\
|
||||
İnternete bağlı olduğunuza ve doğru adaptörü seçtiğinize emin misiniz?"
|
||||
),
|
||||
Language::RU => format!(
|
||||
"Трафик не обнаружен. Ожидаем сетевые пакеты...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Вы уверены, что подключены к Интернету и выбрали правильный интерфейс?"),
|
||||
Language::PT => format!("Ainda não foi observado tráfego. Aguardando por pacotes...\n\n\
|
||||
Вы уверены, что подключены к Интернету и выбрали правильный интерфейс?"
|
||||
),
|
||||
Language::PT => format!(
|
||||
"Ainda não foi observado tráfego. Aguardando por pacotes...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Tem a certeza de que está ligado à internet e selecionou o adaptador correto?"),
|
||||
Language::EL => format!("Δεν έχει παρατηρηθεί κίνηση μέχρι στιγμής. Ανέμενε για πακέτα δικτύου...\n\n\
|
||||
Tem a certeza de que está ligado à internet e selecionou o adaptador correto?"
|
||||
),
|
||||
Language::EL => format!(
|
||||
"Δεν έχει παρατηρηθεί κίνηση μέχρι στιγμής. Ανέμενε για πακέτα δικτύου...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Είσαι σίγουρος ότι είσαι συνδεδεμένος στο διαδίκτυο και ότι έχεις επιλέξει τον σωστό προσαρμογέα;"),
|
||||
Είσαι σίγουρος ότι είσαι συνδεδεμένος στο διαδίκτυο και ότι έχεις επιλέξει τον σωστό προσαρμογέα;"
|
||||
),
|
||||
// Language::FA => format!("هنوز هیچ آمد و شدی مشاهده نشده است. در حال انتظار برای بسته های شبکه...\n\n
|
||||
// مبدل شبکه: {adapter}\n\n
|
||||
// آیا مطمئن هستید به اینترنت وصل هستید و مبدل درست را انتخاب کرده اید؟"),
|
||||
Language::SV => format!("Ingen trafik har observerats ännu. Väntar på paket ...\n\n\
|
||||
Language::SV => format!(
|
||||
"Ingen trafik har observerats ännu. Väntar på paket ...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Är du säker på att du är ansluten till internet och att du har valt rätt adapter?"),
|
||||
Language::FI => format!("Ei vielä havaittua liikennettä. Odotetaan verkkopaketteja...\n\n\
|
||||
Är du säker på att du är ansluten till internet och att du har valt rätt adapter?"
|
||||
),
|
||||
Language::FI => format!(
|
||||
"Ei vielä havaittua liikennettä. Odotetaan verkkopaketteja...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Onhan sinulla varmasti internet-yhteys ja olet valinnut oikean verkkosovittimen."),
|
||||
Language::JA => format!("トラフィックがまだ観測できていません。ネットワーク パケットを待っています...\n\n\
|
||||
Onhan sinulla varmasti internet-yhteys ja olet valinnut oikean verkkosovittimen."
|
||||
),
|
||||
Language::JA => format!(
|
||||
"トラフィックがまだ観測できていません。ネットワーク パケットを待っています...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
インターネットに接続していて、正しいアダプターを選択していますか?"),
|
||||
インターネットに接続していて、正しいアダプターを選択していますか?"
|
||||
),
|
||||
Language::UZ => format!(
|
||||
"Hali hech qanday trafik aniqlanmadi. Tarmoq paketlari kutilmoqda...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Internetga ulanganingizga va to'g'ri adapterni tanlaganingizga ishonchingiz komilmi?"),
|
||||
Language::VI => format!("Chưa có lưu lượng để quan sát. Đang đợi các gói tin...\n\n\
|
||||
Internetga ulanganingizga va to'g'ri adapterni tanlaganingizga ishonchingiz komilmi?"
|
||||
),
|
||||
Language::VI => format!(
|
||||
"Chưa có lưu lượng để quan sát. Đang đợi các gói tin...\n\n\
|
||||
{network_adapter_translation}: {adapter}\n\n\
|
||||
Bạn có chắc là đã kết nối với internet và đã chọn đúng network adapter?"),
|
||||
Bạn có chắc là đã kết nối với internet và đã chọn đúng network adapter?"
|
||||
),
|
||||
})
|
||||
}
|
||||
|
||||
pub fn some_observed_translation<'a>(language: Language, observed: u128) -> Text<'a, StyleType> {
|
||||
Text::new(match language {
|
||||
Language::EN => format!("Total intercepted packets: {observed}\n\n\
|
||||
Language::EN => format!(
|
||||
"Total intercepted packets: {observed}\n\n\
|
||||
Filtered packets: 0\n\n\
|
||||
Some packets have been intercepted, but still none has been selected according to the filters you specified..."),
|
||||
Language::IT => format!("Totale pacchetti intercettati: {observed}\n\n\
|
||||
Some packets have been intercepted, but still none has been selected according to the filters you specified..."
|
||||
),
|
||||
Language::IT => format!(
|
||||
"Totale pacchetti intercettati: {observed}\n\n\
|
||||
Pacchetti filtrati: 0\n\n\
|
||||
Alcuni pacchetti sono stati intercettati, ma ancora nessuno è stato selezionato secondo i filtri specificati..."),
|
||||
Language::FR => format!("Total des paquets interceptés: {observed}\n\n\
|
||||
Alcuni pacchetti sono stati intercettati, ma ancora nessuno è stato selezionato secondo i filtri specificati..."
|
||||
),
|
||||
Language::FR => format!(
|
||||
"Total des paquets interceptés: {observed}\n\n\
|
||||
Paquets filtrés: 0\n\n\
|
||||
Certains paquets ont été interceptés, mais aucun ne satisfait les critères des filtres sélectionnés..."),
|
||||
Language::ES => format!("Total de paquetes interceptados: {observed}\n\n\
|
||||
Certains paquets ont été interceptés, mais aucun ne satisfait les critères des filtres sélectionnés..."
|
||||
),
|
||||
Language::ES => format!(
|
||||
"Total de paquetes interceptados: {observed}\n\n\
|
||||
Paquetes filtrados: 0\n\n\
|
||||
Se interceptaron algunos paquetes, pero ninguno de ellos cumplía los criterios de los filtros seleccionados..."),
|
||||
Language::PL => format!("Suma przechwyconych pakietów: {observed}\n\n\
|
||||
Se interceptaron algunos paquetes, pero ninguno de ellos cumplía los criterios de los filtros seleccionados..."
|
||||
),
|
||||
Language::PL => format!(
|
||||
"Suma przechwyconych pakietów: {observed}\n\n\
|
||||
Przefiltrowane pakiety: 0\n\n\
|
||||
Niektóre pakiety zostały przechwycone, ale żaden nie został wybrany zgodnie z wskazanymi filtrami..."),
|
||||
Language::DE => format!("Anzahl der empfangenen Pakete: {observed}\n\n\
|
||||
Niektóre pakiety zostały przechwycone, ale żaden nie został wybrany zgodnie z wskazanymi filtrami..."
|
||||
),
|
||||
Language::DE => format!(
|
||||
"Anzahl der empfangenen Pakete: {observed}\n\n\
|
||||
Gefilterte Pakete: 0\n\n\
|
||||
Ein Paar Pakete wurden empfangen, aber es entsprechen noch keine den gewählten Filtern..."),
|
||||
Language::UK => format!("Сума перехоплених пакетів: {observed}\n\n\
|
||||
Ein Paar Pakete wurden empfangen, aber es entsprechen noch keine den gewählten Filtern..."
|
||||
),
|
||||
Language::UK => format!(
|
||||
"Сума перехоплених пакетів: {observed}\n\n\
|
||||
Відфільтровані пакети: 0\n\n\
|
||||
Деякі пакети були перехоплені, але жоден з них не був вибраний відповідно до вказаних фільтрів..."),
|
||||
Language::ZH => format!("监测到的数据包总数: {observed}\n\n\
|
||||
Деякі пакети були перехоплені, але жоден з них не був вибраний відповідно до вказаних фільтрів..."
|
||||
),
|
||||
Language::ZH => format!(
|
||||
"监测到的数据包总数: {observed}\n\n\
|
||||
目标数据包总数: 0\n\n\
|
||||
当前已监测到一些数据包, 但其中并未包含您的目标数据包......"),
|
||||
Language::RO => format!("Total pachete interceptate: {observed}\n\n\
|
||||
当前已监测到一些数据包, 但其中并未包含您的目标数据包......"
|
||||
),
|
||||
Language::RO => format!(
|
||||
"Total pachete interceptate: {observed}\n\n\
|
||||
Pachete filtrate: 0\n\n\
|
||||
Unele pachete au fost interceptate, dar încă niciunul nu a fost selectat conform filtrelor pe care le-ați specificat..."),
|
||||
Language::KO => format!("감지한 총 패킷: {observed}\n\n\
|
||||
Unele pachete au fost interceptate, dar încă niciunul nu a fost selectat conform filtrelor pe care le-ați specificat..."
|
||||
),
|
||||
Language::KO => format!(
|
||||
"감지한 총 패킷: {observed}\n\n\
|
||||
필터링된 패킷: 0\n\n\
|
||||
일부 패킷이 감지되었지만, 지정한 필터에 따라 선택되지 않았습니다..."),
|
||||
Language::TR => format!("Toplam yakalanan paketler: {observed}\n\n\
|
||||
일부 패킷이 감지되었지만, 지정한 필터에 따라 선택되지 않았습니다..."
|
||||
),
|
||||
Language::TR => format!(
|
||||
"Toplam yakalanan paketler: {observed}\n\n\
|
||||
Filterelenen paketler: 0\n\n\
|
||||
Bazı paketler yakalandı, fakat belirttiğiniz filtrelere göre hiç biri seçilmedi..."),
|
||||
Language::RU => format!("Всего пакетов перехвачено: {observed}\n\n\
|
||||
Bazı paketler yakalandı, fakat belirttiğiniz filtrelere göre hiç biri seçilmedi..."
|
||||
),
|
||||
Language::RU => format!(
|
||||
"Всего пакетов перехвачено: {observed}\n\n\
|
||||
Фильтровано пакетов: 0\n\n\
|
||||
Сетевые пакеты были перехвачены, но ни один из них не соответствует заданным фильтрам..."),
|
||||
Language::PT => format!("Total de pacotes interceptados: {observed}\n\n\
|
||||
Сетевые пакеты были перехвачены, но ни один из них не соответствует заданным фильтрам..."
|
||||
),
|
||||
Language::PT => format!(
|
||||
"Total de pacotes interceptados: {observed}\n\n\
|
||||
Pacotes filtrados: 0\n\n\
|
||||
Alguns pacotes foram interceptados, mas nenhum deles foi selecionado de acordo com os filtros especificados..."),
|
||||
Language::EL => format!("Συνολικά αναχαιτισμένα πακέτα: {observed}\n\n\
|
||||
Alguns pacotes foram interceptados, mas nenhum deles foi selecionado de acordo com os filtros especificados..."
|
||||
),
|
||||
Language::EL => format!(
|
||||
"Συνολικά αναχαιτισμένα πακέτα: {observed}\n\n\
|
||||
Φιλτραρισμένα πακέτα: 0\n\n\
|
||||
Κάποια από τα πακέτα έχουν αναχαιτιστεί, αλλά κανένα ακόμη δεν έχει επιλεγεί σύμφωνα με τα φίλτρα που επέλεξες..."),
|
||||
Κάποια από τα πακέτα έχουν αναχαιτιστεί, αλλά κανένα ακόμη δεν έχει επιλεγεί σύμφωνα με τα φίλτρα που επέλεξες..."
|
||||
),
|
||||
// Language::FA => format!("مجموع بسته های رهگیری شده: {observed}\n\n\
|
||||
// بسته های صاف شده: 0\n\n\
|
||||
// شماری از بسته ها رهگیری شده اند، ولی هنوز هیچ کدام بر اساس صافی تعیین شده شما انتخاب نشده اند..."),
|
||||
Language::SV => format!("Antal fångade paket: {observed}\n\n\
|
||||
Language::SV => format!(
|
||||
"Antal fångade paket: {observed}\n\n\
|
||||
Filtrerade paket: 0\n\n\
|
||||
Några paket har fångats, men än har inget valts enligt de angivna filtren ..."),
|
||||
Language::FI => format!("Siepattuja paketteja yhteensä: {observed}\n\n\
|
||||
Några paket har fångats, men än har inget valts enligt de angivna filtren ..."
|
||||
),
|
||||
Language::FI => format!(
|
||||
"Siepattuja paketteja yhteensä: {observed}\n\n\
|
||||
Suodatettuja paketteja: 0\n\n\
|
||||
Joitakin paketteja on siepattu, mutta yhtäkään ei ole valittu määrittämiesi suodattimien mukaan..."),
|
||||
Language::JA => format!("取得したパケット数: {observed}\n\n\
|
||||
Joitakin paketteja on siepattu, mutta yhtäkään ei ole valittu määrittämiesi suodattimien mukaan..."
|
||||
),
|
||||
Language::JA => format!(
|
||||
"取得したパケット数: {observed}\n\n\
|
||||
フィルター後のパケット数: 0\n\n\
|
||||
パケットは取得できていますが、設定されたフィルタリングにより表示されません..."),
|
||||
パケットは取得できていますが、設定されたフィルタリングにより表示されません..."
|
||||
),
|
||||
Language::UZ => format!(
|
||||
"Jami ushlangan paketlar: {observed}\n\n\
|
||||
Filtrlangan paketlar: 0\n\n\
|
||||
Tarmoq paketlari ushlandi, lekin ularning hech biri belgilangan filtrlarga mos kelmadi..."),
|
||||
Language::VI => format!("Tổng số gói tin bị chặn: {observed}\n\n\
|
||||
Tarmoq paketlari ushlandi, lekin ularning hech biri belgilangan filtrlarga mos kelmadi..."
|
||||
),
|
||||
Language::VI => format!(
|
||||
"Tổng số gói tin bị chặn: {observed}\n\n\
|
||||
Các gói tin đã lọc: 0\n\n\
|
||||
Một số gói đã bị chặn, nhưng vẫn chưa có gói tin nào được bắt theo bộ lọc bạn đã chọn..."),
|
||||
Một số gói đã bị chặn, nhưng vẫn chưa có gói tin nào được bắt theo bộ lọc bạn đã chọn..."
|
||||
),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1832,66 +1944,104 @@ pub fn favorite_transmitted_translation(language: Language) -> &'static str {
|
||||
|
||||
pub fn no_notifications_set_translation<'a>(language: Language) -> Text<'a, StyleType> {
|
||||
Text::new(match language {
|
||||
Language::EN => "You haven't enabled notifications yet!\n\n\
|
||||
Language::EN => {
|
||||
"You haven't enabled notifications yet!\n\n\
|
||||
After enabling them, this page will display a log of your notifications\n\n\
|
||||
You can enable notifications from settings:",
|
||||
Language::IT => "Non hai ancora abilitato le notifiche!\n\n\
|
||||
You can enable notifications from settings:"
|
||||
}
|
||||
Language::IT => {
|
||||
"Non hai ancora abilitato le notifiche!\n\n\
|
||||
Dopo che le avrai abilitate, questa pagina mostrerà una collezione delle tue notifiche\n\n\
|
||||
Puoi abilitare le notifiche dalle impostazioni:",
|
||||
Language::FR => "Vous n'avez pas activé les notifications!\n\n\
|
||||
Puoi abilitare le notifiche dalle impostazioni:"
|
||||
}
|
||||
Language::FR => {
|
||||
"Vous n'avez pas activé les notifications!\n\n\
|
||||
Une fois activées, cette page affichera le journal des notifications\n\n\
|
||||
Vous pouvez les activer dans les paramètres:",
|
||||
Language::ES => "¡Aún no has activado las notificaciones!\n\n\
|
||||
Vous pouvez les activer dans les paramètres:"
|
||||
}
|
||||
Language::ES => {
|
||||
"¡Aún no has activado las notificaciones!\n\n\
|
||||
Después de activarlas, esta página mostrará un registro de sus notificaciones\n\n\
|
||||
Puedes activar las notificaciones desde los ajustes:",
|
||||
Language::PL => "Nie włączyłeś jeszcze powiadomień!\n\n\
|
||||
Puedes activar las notificaciones desde los ajustes:"
|
||||
}
|
||||
Language::PL => {
|
||||
"Nie włączyłeś jeszcze powiadomień!\n\n\
|
||||
Po ich włączeniu, ta strona wyświetli dziennik twoich powiadomień\n\n\
|
||||
Możesz włączyć powiadomienia w ustawieniach:",
|
||||
Language::DE => "Benachrichtigungen wurden noch nicht aktiviert!\n\n\
|
||||
Możesz włączyć powiadomienia w ustawieniach:"
|
||||
}
|
||||
Language::DE => {
|
||||
"Benachrichtigungen wurden noch nicht aktiviert!\n\n\
|
||||
Nachdem du sie aktiviert hast, wird diese Seite eine Liste deiner Benachrichtigungen anzeigen\n\n\
|
||||
Du kannst die Benachrichtigungen in den Einstellungen aktivieren:",
|
||||
Language::UK => "Повідомлення не активовані!\n\n\
|
||||
Du kannst die Benachrichtigungen in den Einstellungen aktivieren:"
|
||||
}
|
||||
Language::UK => {
|
||||
"Повідомлення не активовані!\n\n\
|
||||
Після їх активації на цій сторінці побачите список своїх повідомлень\n\n\
|
||||
Можете вимкнути повідомлення в налаштуваннях:",
|
||||
Language::ZH => "您还没有设定任何通知!\n\n\
|
||||
Можете вимкнути повідомлення в налаштуваннях:"
|
||||
}
|
||||
Language::ZH => {
|
||||
"您还没有设定任何通知!\n\n\
|
||||
启用它们后,此页面将显示您的通知日志\n\n\
|
||||
您可以从设置中设定:",
|
||||
Language::RO => "Încă nu ați activat notificările!\n\n\
|
||||
您可以从设置中设定:"
|
||||
}
|
||||
Language::RO => {
|
||||
"Încă nu ați activat notificările!\n\n\
|
||||
După ce le veți activa, această pagină va afișa un jurnal al notificărilor dvs\n\n\
|
||||
Puteți activa notificările din setări:",
|
||||
Language::KO => "아직 알림을 활성화하지 않았습니다!\n\n\
|
||||
Puteți activa notificările din setări:"
|
||||
}
|
||||
Language::KO => {
|
||||
"아직 알림을 활성화하지 않았습니다!\n\n\
|
||||
활성화로 설정하면 이 페이지에 알림 로그가 표시됩니다\n\n\
|
||||
설정에서 알림을 활성화할 수 있습니다:",
|
||||
Language::TR => "Henüz bildirimleri etkinleştirmedin!\n\n\
|
||||
설정에서 알림을 활성화할 수 있습니다:"
|
||||
}
|
||||
Language::TR => {
|
||||
"Henüz bildirimleri etkinleştirmedin!\n\n\
|
||||
Etkinleştirdikten sonra bu sayfada bildirimlerine ait kütüğü görebilirsin\n\n\
|
||||
Bildirimleri, ayarlardan etkinleştirebilirsin:",
|
||||
Language::RU => "Уведомления пока не настроены!\n\n\
|
||||
Bildirimleri, ayarlardan etkinleştirebilirsin:"
|
||||
}
|
||||
Language::RU => {
|
||||
"Уведомления пока не настроены!\n\n\
|
||||
После настройки, эта страница будет показывать журнал уведомлений\n\n\
|
||||
Вы можете включить уведомления в настройках:",
|
||||
Language::PT => "Ainda não ativou as notificações!\n\n\
|
||||
Вы можете включить уведомления в настройках:"
|
||||
}
|
||||
Language::PT => {
|
||||
"Ainda não ativou as notificações!\n\n\
|
||||
Depois de ativá-las, esta página irá mostrar um registo das suas notificações\n\n\
|
||||
Pode ativar as notificações nas definições:",
|
||||
Language::EL => "Δεν έχεις ενεργοποιήσει τις ειδοποιήσεις ακόμη!\n\n\
|
||||
Pode ativar as notificações nas definições:"
|
||||
}
|
||||
Language::EL => {
|
||||
"Δεν έχεις ενεργοποιήσει τις ειδοποιήσεις ακόμη!\n\n\
|
||||
Αφότου τις ενεργοποιήσεις, αυτή η σελίδα θα απεικονίσει μια καταγραφή των ειδοποιήσεών σου\n\n\
|
||||
Μπορείς να ενεργοποιήσεις τις ειδοποιήσεις από τις ρυθμίσεις:",
|
||||
Μπορείς να ενεργοποιήσεις τις ειδοποιήσεις από τις ρυθμίσεις:"
|
||||
}
|
||||
// Language::FA => "شما هنوز اعلان ها را فعال نکرده اید!\n\n\
|
||||
// پس از آنکه آن ها را فعال کنید، این صفحه یک کارنامه از اعلان های شما را نمایش خواهد داد\n\n
|
||||
// شما می توانید اعلان ها را از پیکربندی فعال کنید:",
|
||||
Language::SV => "Du har inte aktiverat notifikationer än!\n\n\
|
||||
Language::SV => {
|
||||
"Du har inte aktiverat notifikationer än!\n\n\
|
||||
Efter att du aktiverat dem så kommer denna sida att visa en logg av dina notifikationer\n\n\
|
||||
Du kan aktivera notifikationer i inställingarna",
|
||||
Language::FI => "Et ole vielä ottanut ilmoituksia käyttöön!\n\n\
|
||||
Du kan aktivera notifikationer i inställingarna"
|
||||
}
|
||||
Language::FI => {
|
||||
"Et ole vielä ottanut ilmoituksia käyttöön!\n\n\
|
||||
Kun olet ottanut ne käyttöön, tällä sivulla näkyy loki ilmoituksistasi\n\n\
|
||||
Voit ottaa ilmoitukset käyttöön asetuksista:",
|
||||
Language::JA => "まだ通知を有効にしていません!\n\n\
|
||||
Voit ottaa ilmoitukset käyttöön asetuksista:"
|
||||
}
|
||||
Language::JA => {
|
||||
"まだ通知を有効にしていません!\n\n\
|
||||
有効化後、このページ上で通知のログが確認できます。\n\n\
|
||||
通知設定は設定画面から変更可能です:",
|
||||
Language::UZ => "Siz hali bildirishnomalarni yoqmagansiz!\n\n\
|
||||
通知設定は設定画面から変更可能です:"
|
||||
}
|
||||
Language::UZ => {
|
||||
"Siz hali bildirishnomalarni yoqmagansiz!\n\n\
|
||||
Ularni faollashtirgandan so'ng, bu sahifada bildirishnomalaringiz jurnali ko'rsatiladi\n\n\
|
||||
Sozlamalardan bildirishnomalarni yoqishingiz mumkin:",
|
||||
Language::VI => "Bạn chưa bật tính năng thông báo!\n\n\
|
||||
Sozlamalardan bildirishnomalarni yoqishingiz mumkin:"
|
||||
}
|
||||
Language::VI => {
|
||||
"Bạn chưa bật tính năng thông báo!\n\n\
|
||||
au khi bật, trang này sẽ hiển thị thông báo\n\n\
|
||||
Hãy bật thông báo trong phần cài đặt:",
|
||||
Hãy bật thông báo trong phần cài đặt:"
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -244,24 +244,50 @@ pub fn unsupported_link_type_translation<'a>(
|
||||
adapter: &str,
|
||||
) -> Text<'a, StyleType> {
|
||||
let translation = match language {
|
||||
Language::EN => "The link type associated with this adapter is not supported by Sniffnet yet...",
|
||||
Language::EN => {
|
||||
"The link type associated with this adapter is not supported by Sniffnet yet..."
|
||||
}
|
||||
// Language::FA => "نوع پیوند مرتبط با این مبدل هنوز توسط Sniffnet پشتیبانی نمی شود...",
|
||||
Language::ES => "La conexión asociada con este adaptador aún no esta implementada en Sniffnet...",
|
||||
Language::IT => "Il tipo di collegamento associato a questo adattatore di rete non è ancora supportato da Sniffnet...",
|
||||
Language::FR => "Le type de connexion associé à cet adaptateur n'est pas encore supporté par Sniffnet...",
|
||||
Language::DE => "Die Verbindungsart dieses Adapters wird noch nicht von Sniffnet unterstützt...",
|
||||
Language::PL => "Rodzaj połączenia powiązany z tym adapterem nie jest jeszcze obsługiwany przez Sniffnet...",
|
||||
Language::RU => "Тип соединения, связанный с этим адаптером, пока не поддерживается Sniffnet...",
|
||||
Language::RO => "Tipul conexiunii asociate acestui adaptor de rețea nu este încă suportat de Sniffnet...",
|
||||
Language::JA => "このアダプターのリンク タイプは Sniffnet ではまだサポートされていません...",
|
||||
Language::UZ => "Ushbu adapter bilan bog'langan havola turi hozircha Sniffnet tomonidan qo'llab quvvatlanmaydi...",
|
||||
Language::ES => {
|
||||
"La conexión asociada con este adaptador aún no esta implementada en Sniffnet..."
|
||||
}
|
||||
Language::IT => {
|
||||
"Il tipo di collegamento associato a questo adattatore di rete non è ancora supportato da Sniffnet..."
|
||||
}
|
||||
Language::FR => {
|
||||
"Le type de connexion associé à cet adaptateur n'est pas encore supporté par Sniffnet..."
|
||||
}
|
||||
Language::DE => {
|
||||
"Die Verbindungsart dieses Adapters wird noch nicht von Sniffnet unterstützt..."
|
||||
}
|
||||
Language::PL => {
|
||||
"Rodzaj połączenia powiązany z tym adapterem nie jest jeszcze obsługiwany przez Sniffnet..."
|
||||
}
|
||||
Language::RU => {
|
||||
"Тип соединения, связанный с этим адаптером, пока не поддерживается Sniffnet..."
|
||||
}
|
||||
Language::RO => {
|
||||
"Tipul conexiunii asociate acestui adaptor de rețea nu este încă suportat de Sniffnet..."
|
||||
}
|
||||
Language::JA => {
|
||||
"このアダプターのリンク タイプは Sniffnet ではまだサポートされていません..."
|
||||
}
|
||||
Language::UZ => {
|
||||
"Ushbu adapter bilan bog'langan havola turi hozircha Sniffnet tomonidan qo'llab quvvatlanmaydi..."
|
||||
}
|
||||
Language::SV => "Länktypen associerad med denna adapter stöds inte av Sniffnet än...",
|
||||
Language::VI => "Loại liên kết được gắn với adapter này chưa được Sniffnet hỗ trợ...",
|
||||
Language::ZH => "Sniffnet 尚不支持与此适配器关联的链接类型...",
|
||||
Language::KO => "이 어댑터와 연결된 링크 유형은 Sniffnet에서 아직 지원되지 않습니다...",
|
||||
Language::TR => "Bu adaptör ile ilişkilendirilmiş link türü henüz Sniffnet tarafından desteklenmiyor...",
|
||||
Language::PT => "O tipo de conexão associado com este adaptador não é suportado pelo Sniffnet ainda...",
|
||||
Language::UK => "Різновид зʼєднання, повʼязаний з даним адаптером, ще не підтримується Sniffnet-ом...",
|
||||
Language::TR => {
|
||||
"Bu adaptör ile ilişkilendirilmiş link türü henüz Sniffnet tarafından desteklenmiyor..."
|
||||
}
|
||||
Language::PT => {
|
||||
"O tipo de conexão associado com este adaptador não é suportado pelo Sniffnet ainda..."
|
||||
}
|
||||
Language::UK => {
|
||||
"Різновид зʼєднання, повʼязаний з даним адаптером, ще не підтримується Sniffnet-ом..."
|
||||
}
|
||||
_ => "The link type associated with this adapter is not supported by Sniffnet yet...",
|
||||
};
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
use std::fmt;
|
||||
|
||||
use iced::widget::svg::Handle;
|
||||
use iced::widget::Svg;
|
||||
use iced::widget::svg::Handle;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::StyleType;
|
||||
use crate::countries::flags_pictures::{
|
||||
CN, DE, ES, FI, FLAGS_WIDTH_BIG, FR, GB, GR, IT, JP, KR, PL, PT, RO, RU, SE, TR, UA, UZ, VN,
|
||||
};
|
||||
use crate::StyleType;
|
||||
|
||||
/// This enum defines the available languages.
|
||||
#[derive(PartialEq, Eq, Clone, Copy, Debug, Serialize, Deserialize, Hash)]
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
use std::cmp::min;
|
||||
use std::net::IpAddr;
|
||||
|
||||
use crate::Language;
|
||||
use crate::networking::types::filters::Filters;
|
||||
use crate::translations::translations::{
|
||||
address_translation, ip_version_translation, protocol_translation,
|
||||
};
|
||||
use crate::translations::translations_3::{invalid_filters_translation, port_translation};
|
||||
use crate::Language;
|
||||
|
||||
use std::fmt::Write;
|
||||
/// Application version number (to be displayed in gui footer)
|
||||
pub const APP_VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||
|
||||
@@ -27,16 +27,16 @@
|
||||
pub fn get_invalid_filters_string(filters: &Filters, language: Language) -> String {
|
||||
let mut ret_val = format!("{}:", invalid_filters_translation(language));
|
||||
if !filters.ip_version_valid() {
|
||||
ret_val.push_str(&format!("\n • {}", ip_version_translation(language)));
|
||||
let _ = write!(ret_val, "\n • {}", ip_version_translation(language));
|
||||
}
|
||||
if !filters.protocol_valid() {
|
||||
ret_val.push_str(&format!("\n • {}", protocol_translation(language)));
|
||||
let _ = write!(ret_val, "\n • {}", protocol_translation(language));
|
||||
}
|
||||
if !filters.address_valid() {
|
||||
ret_val.push_str(&format!("\n • {}", address_translation(language)));
|
||||
let _ = write!(ret_val, "\n • {}", address_translation(language));
|
||||
}
|
||||
if !filters.port_valid() {
|
||||
ret_val.push_str(&format!("\n • {}", port_translation(language)));
|
||||
let _ = write!(ret_val, "\n • {}", port_translation(language));
|
||||
}
|
||||
ret_val
|
||||
}
|
||||
@@ -45,32 +45,36 @@ pub fn get_invalid_filters_string(filters: &Filters, language: Language) -> Stri
|
||||
pub fn get_active_filters_string(filters: &Filters, language: Language) -> String {
|
||||
let mut filters_string = String::new();
|
||||
if filters.ip_version_active() {
|
||||
filters_string.push_str(&format!(
|
||||
"• {}: {}\n",
|
||||
let _ = writeln!(
|
||||
filters_string,
|
||||
"• {}: {}",
|
||||
ip_version_translation(language),
|
||||
filters.pretty_print_ip()
|
||||
));
|
||||
);
|
||||
}
|
||||
if filters.protocol_active() {
|
||||
filters_string.push_str(&format!(
|
||||
"• {}: {}\n",
|
||||
let _ = writeln!(
|
||||
filters_string,
|
||||
"• {}: {}",
|
||||
protocol_translation(language),
|
||||
filters.pretty_print_protocol()
|
||||
));
|
||||
);
|
||||
}
|
||||
if filters.address_active() {
|
||||
filters_string.push_str(&format!(
|
||||
"• {}: {}\n",
|
||||
let _ = writeln!(
|
||||
filters_string,
|
||||
"• {}: {}",
|
||||
address_translation(language),
|
||||
filters.address_str
|
||||
));
|
||||
);
|
||||
}
|
||||
if filters.port_active() {
|
||||
filters_string.push_str(&format!(
|
||||
"• {}: {}\n",
|
||||
let _ = writeln!(
|
||||
filters_string,
|
||||
"• {}: {}",
|
||||
port_translation(language),
|
||||
filters.port_str
|
||||
));
|
||||
);
|
||||
}
|
||||
filters_string
|
||||
}
|
||||
@@ -177,8 +181,8 @@ pub fn get_logs_file_path() -> Option<String> {
|
||||
}
|
||||
|
||||
#[cfg(all(windows, not(debug_assertions)))]
|
||||
pub fn redirect_stdout_stderr_to_file(
|
||||
) -> Option<(gag::Redirect<std::fs::File>, gag::Redirect<std::fs::File>)> {
|
||||
pub fn redirect_stdout_stderr_to_file()
|
||||
-> Option<(gag::Redirect<std::fs::File>, gag::Redirect<std::fs::File>)> {
|
||||
if let Ok(logs_file) = std::fs::OpenOptions::new()
|
||||
.create(true)
|
||||
.append(true)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use iced::widget::Text;
|
||||
|
||||
use crate::gui::styles::style_constants::ICONS;
|
||||
use crate::StyleType;
|
||||
use crate::gui::styles::style_constants::ICONS;
|
||||
|
||||
pub enum Icon {
|
||||
ArrowBack,
|
||||
|
||||
Reference in New Issue
Block a user