Adding tray icon
Some checks failed
gitea/Frida/pipeline/head There was a failure building this commit
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:
parent
c6ced0b92e
commit
52da55009c
71
Cargo.lock
generated
71
Cargo.lock
generated
@ -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"
|
||||
|
@ -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
5
build.rs
Normal 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
BIN
icons/off.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.2 KiB |
BIN
icons/on.ico
Normal file
BIN
icons/on.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.3 KiB |
57
src/gui.rs
57
src/gui.rs
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user