Adding tray icon
Some checks failed
gitea/Frida/pipeline/head There was a failure building this commit

modified:   Cargo.lock
	modified:   Cargo.toml
	new file:   build.rs
	new file:   icons/off.ico
	new file:   icons/on.ico
	modified:   src/gui.rs
	new file:   tray.rc
This commit is contained in:
Michael Wain 2024-10-24 15:58:15 +03:00
parent c6ced0b92e
commit 52da55009c
7 changed files with 135 additions and 4 deletions

71
Cargo.lock generated
View File

@ -1462,6 +1462,20 @@ dependencies = [
"bytemuck",
]
[[package]]
name = "embed-resource"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4e24052d7be71f0efb50c201557f6fe7d237cfd5a64fd5bcd7fd8fe32dbbffa"
dependencies = [
"cc",
"memchr",
"rustc_version",
"toml",
"vswhom",
"winreg",
]
[[package]]
name = "endi"
version = "1.1.0"
@ -1691,6 +1705,7 @@ dependencies = [
"egui_extras",
"egui_file",
"egui_logger",
"embed-resource",
"env_logger",
"futures",
"generic-array",
@ -3772,6 +3787,15 @@ dependencies = [
"syn 2.0.79",
]
[[package]]
name = "serde_spanned"
version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1"
dependencies = [
"serde",
]
[[package]]
name = "serde_yaml"
version = "0.9.34+deprecated"
@ -4188,11 +4212,26 @@ dependencies = [
"tokio",
]
[[package]]
name = "toml"
version = "0.8.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
"toml_edit",
]
[[package]]
name = "toml_datetime"
version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41"
dependencies = [
"serde",
]
[[package]]
name = "toml_edit"
@ -4201,6 +4240,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5"
dependencies = [
"indexmap 2.6.0",
"serde",
"serde_spanned",
"toml_datetime",
"winnow",
]
@ -4578,6 +4619,26 @@ version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
[[package]]
name = "vswhom"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b"
dependencies = [
"libc",
"vswhom-sys",
]
[[package]]
name = "vswhom-sys"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18"
dependencies = [
"cc",
"libc",
]
[[package]]
name = "walkdir"
version = "2.5.0"
@ -5330,6 +5391,16 @@ dependencies = [
"memchr",
]
[[package]]
name = "winreg"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5"
dependencies = [
"cfg-if",
"windows-sys 0.48.0",
]
[[package]]
name = "wintun-bindings"
version = "0.6.4"

View File

@ -57,6 +57,9 @@ dirs = "5.0.1"
egui_logger = "0.6.1"
tray-item = "0.10.0"
[target.'cfg(target_os="windows")'.build-dependencies]
embed-resource = "2.3"
[target.'cfg(target_os="android")'.dependencies]
jni = "^0.20"
robusta_jni = "0.2.2"

5
build.rs Normal file
View File

@ -0,0 +1,5 @@
extern crate embed_resource;
fn main() {
embed_resource::compile("tray.rc", embed_resource::NONE);
}

BIN
icons/off.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
icons/on.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -4,13 +4,15 @@ use eframe::egui::{self, Context, Frame, Label, ScrollArea, Spacing, Vec2};
use egui_file::FileDialog;
use std::{
ffi::OsStr,
path::{Path, PathBuf},
path::{Path, PathBuf}, sync::mpsc::SyncSender,
};
use std::sync::mpsc;
use egui_extras::{Column, TableBuilder};
use log::{info, error};
use crate::config::ClientConfiguration;
use log::LevelFilter;
use env_logger::Builder;
use tray_item::{IconSource, TrayItem};
mod toggle_switch;
mod config;
@ -21,11 +23,42 @@ fn get_configs_dir() -> PathBuf {
p
}
fn main() -> eframe::Result {
enum Message {
Open,
Buzz
}
fn main() {
egui_logger::builder().max_level(LevelFilter::Error).init().unwrap();
let mut tray = TrayItem::new(
"Frida VPN",
IconSource::Resource("tray-default"),
)
.unwrap();
let (tx, rx) = mpsc::sync_channel(1);
let tx_m = tx.clone();
tray.add_menu_item("Open", move || {
tx_m.send(Message::Open).unwrap();
})
.unwrap();
loop {
match rx.recv() {
Ok(Message::Open) => {
main_gui();
}
_ => {}
}
}
}
fn main_gui() {
let options = eframe::NativeOptions {
viewport: egui::ViewportBuilder::default().with_inner_size([640.0, 480.0]),
run_and_return: false,
..Default::default()
};
let cfgs = std::fs::read_dir(get_configs_dir()).unwrap();
@ -33,13 +66,15 @@ fn main() -> eframe::Result {
for path in cfgs {
cv.push(path.unwrap().path());
}
eframe::run_native(
"Frida",
options,
Box::new(|cc| {
Ok(Box::new(App::new(cv)))
}),
)
);
}
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
@ -53,6 +88,7 @@ struct App {
screen: AppScreens,
configs: Configs,
logs: Logs,
close: bool
}
impl App {
@ -60,13 +96,22 @@ impl App {
Self {
screen: AppScreens::Configs,
configs: Configs::new(cfgs),
logs: Logs::default()
logs: Logs::default(),
close: false
}
}
}
impl eframe::App for App {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
if self.close {
let ctx = ctx.clone();
std::thread::spawn(move || {
ctx.send_viewport_cmd(egui::ViewportCommand::Close);
});
}
egui::CentralPanel::default().show(ctx, |ui| {
ui.horizontal(|ui| {
ui.selectable_value(&mut self.screen, AppScreens::Configs, "Configs");
@ -83,6 +128,10 @@ impl eframe::App for App {
}
});
}
fn on_exit(&mut self, _gl: Option<&eframe::glow::Context>) {
self.close = true;
}
}
struct Logs {

3
tray.rc Normal file
View File

@ -0,0 +1,3 @@
cfg-active ICON "icons/on.ico"
cfg-inactive ICON "icons/off.ico"
tray-default ICON "icons/off.ico"