Skip to content

Commit 76d1444

Browse files
committed
introduce self-update as a feature
1 parent 99796a0 commit 76d1444

File tree

4 files changed

+71
-46
lines changed

4 files changed

+71
-46
lines changed

Cargo.toml

+8-4
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,14 @@ regex = "1"
2323
serde = { version = "1.0", features = ["derive"] }
2424
serialport = { version = "4.7", features = ["serde"] }
2525
log = "0.4"
26-
self_update = { git = "https://github.com/hacknus/self_update", features = ["archive-zip", "compression-zip-deflate"] }
27-
tempfile = "3.15"
28-
reqwest = { version = "0.12", default-features = false, features = ["blocking", "json", "rustls-tls", "http2"] }
29-
semver = "1.0.24"
26+
self_update = { git = "https://github.com/hacknus/self_update", features = ["archive-zip", "compression-zip-deflate"], optional = true }
27+
tempfile = { version = "3.15", optional = true }
28+
reqwest = { version = "0.12", default-features = false, features = ["blocking", "json", "rustls-tls", "http2"], optional = true }
29+
semver = { version = "1.0.24", optional = true }
30+
31+
[features]
32+
default = ["self_update"]
33+
self_update = ["dep:self_update", "tempfile", "reqwest", "semver"]
3034

3135
[build-dependencies]
3236
regex = "1.11"

src/gui.rs

+9-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use crate::data::{DataContainer, SerialDirection};
1212
use crate::serial::{clear_serial_settings, save_serial_settings, Device, SerialDevices};
1313
use crate::settings_window::settings_window;
1414
use crate::toggle::toggle;
15+
#[cfg(feature = "self_update")]
1516
use crate::update::check_update;
1617
use crate::FileOptions;
1718
use crate::{APP_INFO, PREFERENCES_KEY};
@@ -25,6 +26,7 @@ use egui_file_dialog::information_panel::InformationPanel;
2526
use egui_file_dialog::FileDialog;
2627
use egui_plot::{log_grid_spacer, GridMark, Legend, Line, Plot, PlotPoint, PlotPoints};
2728
use preferences::Preferences;
29+
#[cfg(feature = "self_update")]
2830
use self_update::update::Release;
2931
use serde::{Deserialize, Serialize};
3032
use serialport::{DataBits, FlowControl, Parity, StopBits};
@@ -146,6 +148,7 @@ pub struct MyApp {
146148
show_warning_window: WindowFeedback,
147149
do_not_show_clear_warning: bool,
148150
init: bool,
151+
#[cfg(feature = "self_update")]
149152
new_release: Option<Release>,
150153
}
151154

@@ -243,6 +246,7 @@ impl MyApp {
243246
init: false,
244247
show_color_window: ColorWindow::NoShow,
245248
file_opened: false,
249+
#[cfg(feature = "self_update")]
246250
new_release: None,
247251
settings_window_open: false,
248252
update_text: "".to_string(),
@@ -885,13 +889,17 @@ impl MyApp {
885889
.button(format!("{} Settings", egui_phosphor::regular::GEAR_FINE))
886890
.clicked()
887891
{
888-
self.new_release = check_update();
892+
#[cfg(feature = "self_update")]
893+
{
894+
self.new_release = check_update();
895+
}
889896
self.settings_window_open = true;
890897
}
891898
if self.settings_window_open {
892899
settings_window(
893900
ui.ctx(),
894901
&mut self.gui_conf,
902+
#[cfg(feature = "self_update")]
895903
&mut self.new_release,
896904
&mut self.settings_window_open,
897905
&mut self.update_text,

src/settings_window.rs

+52-41
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
use crate::gui::GuiSettingsContainer;
2+
#[cfg(feature = "self_update")]
23
use crate::update::{check_update, update};
34
use eframe::egui;
45
use eframe::egui::{Align2, InnerResponse, Vec2, Visuals};
56
use egui_theme_switch::ThemeSwitch;
7+
#[cfg(feature = "self_update")]
68
use self_update::restart::restart;
9+
#[cfg(feature = "self_update")]
710
use self_update::update::Release;
11+
#[cfg(feature = "self_update")]
812
use semver::Version;
913

1014
pub fn settings_window(
1115
ctx: &egui::Context,
1216
gui_conf: &mut GuiSettingsContainer,
13-
new_release: &mut Option<Release>,
17+
#[cfg(feature = "self_update")] new_release: &mut Option<Release>,
1418
settings_window_open: &mut bool,
1519
update_text: &mut String,
1620
) -> Option<InnerResponse<Option<()>>> {
@@ -19,53 +23,59 @@ pub fn settings_window(
1923
.anchor(Align2::CENTER_CENTER, Vec2 { x: 0.0, y: 0.0 })
2024
.collapsible(false)
2125
.show(ctx, |ui| {
22-
egui::Grid::new("settings").striped(true).show(ui, |ui| {
23-
if ui
24-
.add(ThemeSwitch::new(&mut gui_conf.theme_preference))
25-
.changed()
26-
{
27-
ui.ctx().set_theme(gui_conf.theme_preference);
28-
};
29-
gui_conf.dark_mode = ui.visuals() == &Visuals::dark();
30-
31-
ui.end_row();
32-
ui.end_row();
33-
34-
if ui.button("Check for Updates").clicked() {
35-
*new_release = check_update();
36-
}
26+
egui::Grid::new("theme settings")
27+
.striped(true)
28+
.show(ui, |ui| {
29+
if ui
30+
.add(ThemeSwitch::new(&mut gui_conf.theme_preference))
31+
.changed()
32+
{
33+
ui.ctx().set_theme(gui_conf.theme_preference);
34+
};
35+
gui_conf.dark_mode = ui.visuals() == &Visuals::dark();
3736

38-
let current_version = Version::parse(env!("CARGO_PKG_VERSION")).unwrap();
39-
ui.label(format!("Current version: {}", current_version));
37+
ui.end_row();
38+
ui.end_row();
39+
});
40+
#[cfg(feature = "self_update")]
41+
egui::Grid::new("update settings")
42+
.striped(true)
43+
.show(ui, |ui| {
44+
if ui.button("Check for Updates").clicked() {
45+
*new_release = check_update();
46+
}
4047

41-
ui.end_row();
48+
let current_version = Version::parse(env!("CARGO_PKG_VERSION")).unwrap();
49+
ui.label(format!("Current version: {}", current_version));
4250

43-
if let Some(r) = &new_release {
44-
ui.label(format!("New release: {}", r.version));
4551
ui.end_row();
46-
if ui.button("Update").clicked() {
47-
match update(r.clone()) {
48-
Ok(_) => {
49-
log::info!("Update done. {} >> {}", current_version, r.version);
50-
*new_release = None;
51-
*update_text =
52-
"Update done. Please Restart Application.".to_string();
53-
}
54-
Err(err) => {
55-
log::error!("{}", err);
52+
53+
if let Some(r) = &new_release {
54+
ui.label(format!("New release: {}", r.version));
55+
ui.end_row();
56+
if ui.button("Update").clicked() {
57+
match update(r.clone()) {
58+
Ok(_) => {
59+
log::info!("Update done. {} >> {}", current_version, r.version);
60+
*new_release = None;
61+
*update_text =
62+
"Update done. Please Restart Application.".to_string();
63+
}
64+
Err(err) => {
65+
log::error!("{}", err);
66+
}
5667
}
5768
}
69+
} else {
70+
ui.label("");
71+
ui.end_row();
72+
ui.horizontal(|ui| {
73+
ui.disable();
74+
let _ = ui.button("Update");
75+
});
76+
ui.label("You have the latest version");
5877
}
59-
} else {
60-
ui.label("");
61-
ui.end_row();
62-
ui.horizontal(|ui| {
63-
ui.disable();
64-
let _ = ui.button("Update");
65-
});
66-
ui.label("You have the latest version");
67-
}
68-
});
78+
});
6979
ui.label(update_text.clone());
7080

7181
ui.horizontal(|ui| {
@@ -79,6 +89,7 @@ pub fn settings_window(
7989
}
8090
});
8191

92+
#[cfg(feature = "self_update")]
8293
if !update_text.is_empty() && ui.button("Restart").clicked() {
8394
restart();
8495
ctx.request_repaint(); // Optional: Request repaint for immediate feedback

src/update.rs

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#![cfg(feature = "self_update")]
2+
13
use self_update::self_replace;
24
use self_update::update::Release;
35
use semver::Version;

0 commit comments

Comments
 (0)