add basis for theme change detecttion

This commit is contained in:
Ward from fusion-voyager-3 2024-10-25 16:17:47 +03:00
parent d36bda43a5
commit a5149a990b
8 changed files with 336 additions and 133 deletions

View File

@ -567,13 +567,20 @@ pub fn apt_manage_page(
.valign(Align::Center) .valign(Align::Center)
.build(); .build();
let retry_interval_spinrow= adw::SpinRow::builder() let retry_interval_spinrow = adw::SpinRow::builder()
.title(t!("retry_interval_spinrow_title")) .title(t!("retry_interval_spinrow_title"))
.subtitle(t!("retry_interval_spinrow_title")) .subtitle(t!("retry_interval_spinrow_title"))
.activatable(false) .activatable(false)
.selectable(false) .selectable(false)
.climb_rate(1.0) .climb_rate(1.0)
.adjustment(&gtk::Adjustment::new((glib_settings.int("update-interval") as f64) / 3600000.0, 1.0, 24.0, 1.0, 0.0, 0.0)) .adjustment(&gtk::Adjustment::new(
(glib_settings.int("update-interval") as f64) / 3600000.0,
1.0,
24.0,
1.0,
0.0,
0.0,
))
.halign(Align::Start) .halign(Align::Start)
.valign(Align::Center) .valign(Align::Center)
.build(); .build();
@ -591,21 +598,25 @@ pub fn apt_manage_page(
match glib_settings.set_int("update-interval", (spinrow.value() * 3600000.0) as i32) { match glib_settings.set_int("update-interval", (spinrow.value() * 3600000.0) as i32) {
Ok(_) => { Ok(_) => {
{ {
automatically_check_for_updates_arc.store(glib_settings.boolean("check-for-updates"), std::sync::atomic::Ordering::Relaxed); automatically_check_for_updates_arc.store(
let mut update_interval_arc_gaurd = loop{ glib_settings.boolean("check-for-updates"),
if let Ok(guard) = update_interval_arc.lock() { std::sync::atomic::Ordering::Relaxed,
break guard; );
} let mut update_interval_arc_gaurd = loop {
}; if let Ok(guard) = update_interval_arc.lock() {
*update_interval_arc_gaurd = glib_settings.int("update-interval"); break guard;
} }
};
*update_interval_arc_gaurd = glib_settings.int("update-interval");
}
thread_sleep_sender.send(()).unwrap(); thread_sleep_sender.send(()).unwrap();
} }
Err(_) => { Err(_) => {
spinrow.set_value(glib_settings.int("update-interval") as f64 / 3600000.0); spinrow.set_value(glib_settings.int("update-interval") as f64 / 3600000.0);
} }
} }
})); }
));
retry_interval_switch.connect_state_set(clone!( retry_interval_switch.connect_state_set(clone!(
#[strong] #[strong]
@ -620,14 +631,17 @@ pub fn apt_manage_page(
match glib_settings.set_boolean("check-for-updates", state) { match glib_settings.set_boolean("check-for-updates", state) {
Ok(_) => { Ok(_) => {
{ {
automatically_check_for_updates_arc.store(glib_settings.boolean("check-for-updates"), std::sync::atomic::Ordering::Relaxed); automatically_check_for_updates_arc.store(
let mut update_interval_arc_gaurd = loop{ glib_settings.boolean("check-for-updates"),
if let Ok(guard) = update_interval_arc.lock() { std::sync::atomic::Ordering::Relaxed,
break guard; );
} let mut update_interval_arc_gaurd = loop {
}; if let Ok(guard) = update_interval_arc.lock() {
*update_interval_arc_gaurd = glib_settings.int("update-interval"); break guard;
} }
};
*update_interval_arc_gaurd = glib_settings.int("update-interval");
}
thread_sleep_sender.send(()).unwrap(); thread_sleep_sender.send(()).unwrap();
} }
Err(_) => { Err(_) => {
@ -648,7 +662,7 @@ pub fn apt_manage_page(
unofficial_sources_box.append(&unofficial_sources_edit_box); unofficial_sources_box.append(&unofficial_sources_edit_box);
// //
retry_interval_box.append(&retry_interval_labal); retry_interval_box.append(&retry_interval_labal);
retry_interval_box.append(&retry_interval_switch); retry_interval_box.append(&retry_interval_switch);
retry_interval_box.append(&retry_interval_spinrow); retry_interval_box.append(&retry_interval_spinrow);
@ -668,4 +682,4 @@ pub fn apt_manage_page(
main_box.append(&retry_interval_box); main_box.append(&retry_interval_box);
main_box main_box
} }

View File

@ -20,17 +20,20 @@ use duct::cmd;
enum AddonChannelMsg { enum AddonChannelMsg {
LogLoopLine(String), LogLoopLine(String),
LogLoopStatus(bool) LogLoopStatus(bool),
} }
fn run_addon_command( fn run_addon_command(
log_loop_sender: async_channel::Sender<AddonChannelMsg>, log_loop_sender: async_channel::Sender<AddonChannelMsg>,
) -> Result<(), std::boxed::Box<dyn std::error::Error + Send + Sync>> { ) -> Result<(), std::boxed::Box<dyn std::error::Error + Send + Sync>> {
let (pipe_reader, pipe_writer) = os_pipe::pipe()?; let (pipe_reader, pipe_writer) = os_pipe::pipe()?;
let child = cmd!("pkexec", "/usr/lib/pika/pikman-update-manager/scripts/apt_update") let child = cmd!(
.stderr_to_stdout() "pkexec",
.stdout_file(pipe_writer) "/usr/lib/pika/pikman-update-manager/scripts/apt_update"
.start()?; )
.stderr_to_stdout()
.stdout_file(pipe_writer)
.start()?;
for line in BufReader::new(pipe_reader).lines() { for line in BufReader::new(pipe_reader).lines() {
let line_clone = line?; let line_clone = line?;
log_loop_sender log_loop_sender
@ -60,6 +63,7 @@ pub fn apt_update_page(
window: adw::ApplicationWindow, window: adw::ApplicationWindow,
retry_signal_action: &SimpleAction, retry_signal_action: &SimpleAction,
flatpak_retry_signal_action: &SimpleAction, flatpak_retry_signal_action: &SimpleAction,
theme_changed_action: &SimpleAction,
flatpak_ran_once: Rc<RefCell<bool>>, flatpak_ran_once: Rc<RefCell<bool>>,
update_sys_tray: &SimpleAction, update_sys_tray: &SimpleAction,
apt_update_count: &Rc<RefCell<i32>>, apt_update_count: &Rc<RefCell<i32>>,
@ -143,22 +147,26 @@ pub fn apt_update_page(
// TEMP APT FIX // TEMP APT FIX
let (log_loop_sender, log_loop_receiver) = async_channel::unbounded(); let (log_loop_sender, log_loop_receiver) = async_channel::unbounded();
let log_loop_sender: async_channel::Sender<AddonChannelMsg> = log_loop_sender.clone(); let log_loop_sender: async_channel::Sender<AddonChannelMsg> = log_loop_sender.clone();
let log_loop_sender_clone0 = log_loop_sender.clone(); let log_loop_sender_clone0 = log_loop_sender.clone();
let log_loop_sender_clone1 = log_loop_sender.clone(); let log_loop_sender_clone1 = log_loop_sender.clone();
std::thread::spawn(move || { std::thread::spawn(move || {
let command = run_addon_command(log_loop_sender_clone0); let command = run_addon_command(log_loop_sender_clone0);
match command { match command {
Ok(_) => { Ok(_) => {
println!("Status: Addon Command Successful"); println!("Status: Addon Command Successful");
log_loop_sender_clone1.send_blocking(AddonChannelMsg::LogLoopStatus(true)).expect("The channel needs to be open."); log_loop_sender_clone1
} .send_blocking(AddonChannelMsg::LogLoopStatus(true))
Err(_) => { .expect("The channel needs to be open.");
println!("Status: Addon Command Failed");
log_loop_sender_clone1.send_blocking(AddonChannelMsg::LogLoopStatus(false)).expect("The channel needs to be open.");
}
} }
Err(_) => {
println!("Status: Addon Command Failed");
log_loop_sender_clone1
.send_blocking(AddonChannelMsg::LogLoopStatus(false))
.expect("The channel needs to be open.");
}
}
}); });
// End of TEMP APT FIX // End of TEMP APT FIX
@ -252,7 +260,7 @@ pub fn apt_update_page(
.margin_top(10) .margin_top(10)
.margin_bottom(10) .margin_bottom(10)
.build(); .build();
apt_update_dialog_child_box.append(&apt_update_dialog_spinner); apt_update_dialog_child_box.append(&apt_update_dialog_spinner);
apt_update_dialog_child_box.append(&apt_speed_label); apt_update_dialog_child_box.append(&apt_speed_label);
apt_update_dialog_child_box.append(&apt_update_dialog_progress_bar); apt_update_dialog_child_box.append(&apt_update_dialog_progress_bar);
@ -359,11 +367,14 @@ pub fn apt_update_page(
retry_signal_action, retry_signal_action,
#[strong] #[strong]
excluded_updates_vec, excluded_updates_vec,
#[strong]
theme_changed_action,
move |_| { move |_| {
process::apt_process_update( process::apt_process_update(
&excluded_updates_vec.borrow(), &excluded_updates_vec.borrow(),
window, window,
&retry_signal_action, &retry_signal_action,
&theme_changed_action,
); );
} }
)); ));
@ -482,17 +493,22 @@ pub fn apt_update_page(
match state { match state {
true => { true => {
get_apt_upgrades(&get_upgradable_sender); get_apt_upgrades(&get_upgradable_sender);
log_terminal_buffer.delete(&mut log_terminal_buffer.start_iter(), &mut log_terminal_buffer.end_iter()); log_terminal_buffer.delete(
&mut log_terminal_buffer.start_iter(),
&mut log_terminal_buffer.end_iter(),
);
apt_update_dialog.close(); apt_update_dialog.close();
let mut flatpak_ran_once_borrow = flatpak_ran_once.borrow_mut(); let mut flatpak_ran_once_borrow = flatpak_ran_once.borrow_mut();
if *flatpak_ran_once_borrow != true { if *flatpak_ran_once_borrow != true {
flatpak_retry_signal_action.activate(None); flatpak_retry_signal_action.activate(None);
*flatpak_ran_once_borrow = true; *flatpak_ran_once_borrow = true;
} }
update_sys_tray.activate(Some(&glib::Variant::array_from_fixed_array(&[ update_sys_tray.activate(Some(
*apt_update_count.borrow(), &glib::Variant::array_from_fixed_array(&[
*flatpak_update_count.borrow(), *apt_update_count.borrow(),
]))); *flatpak_update_count.borrow(),
]),
));
} }
false => { false => {
get_apt_upgrades(&get_upgradable_sender); get_apt_upgrades(&get_upgradable_sender);
@ -504,25 +520,31 @@ pub fn apt_update_page(
.halign(Align::Center) .halign(Align::Center)
.build(), .build(),
)); ));
apt_update_dialog.set_title(Some(
&t!("apt_update_dialog_status_failed").to_string(),
));
apt_update_dialog apt_update_dialog
.set_title(Some(&t!("apt_update_dialog_status_failed").to_string())); .set_response_enabled("apt_update_dialog_retry", true);
apt_update_dialog.set_response_enabled("apt_update_dialog_retry", true); apt_update_dialog
apt_update_dialog.set_response_enabled("apt_update_dialog_ignore", true); .set_response_enabled("apt_update_dialog_ignore", true);
let mut flatpak_ran_once_borrow = flatpak_ran_once.borrow_mut(); let mut flatpak_ran_once_borrow = flatpak_ran_once.borrow_mut();
if *flatpak_ran_once_borrow != true { if *flatpak_ran_once_borrow != true {
flatpak_retry_signal_action.activate(None); flatpak_retry_signal_action.activate(None);
*flatpak_ran_once_borrow = true; *flatpak_ran_once_borrow = true;
} }
update_sys_tray.activate(Some(&glib::Variant::array_from_fixed_array(&[ update_sys_tray.activate(Some(
*apt_update_count.borrow(), &glib::Variant::array_from_fixed_array(&[
*flatpak_update_count.borrow(), *apt_update_count.borrow(),
]))); *flatpak_update_count.borrow(),
]),
));
} }
} }
} }
AddonChannelMsg::LogLoopLine(state) => { AddonChannelMsg::LogLoopLine(state) => log_terminal_buffer.insert(
log_terminal_buffer.insert(&mut log_terminal_buffer.end_iter(), &("\n".to_string() + &state)) &mut log_terminal_buffer.end_iter(),
} &("\n".to_string() + &state),
),
} }
} }
} }

View File

@ -63,6 +63,7 @@ pub fn apt_process_update(
excluded_updates_vec: &Vec<String>, excluded_updates_vec: &Vec<String>,
window: adw::ApplicationWindow, window: adw::ApplicationWindow,
retry_signal_action: &SimpleAction, retry_signal_action: &SimpleAction,
theme_changed_action: &SimpleAction,
) { ) {
let excluded_updates_alert_dialog = adw::MessageDialog::builder() let excluded_updates_alert_dialog = adw::MessageDialog::builder()
.transient_for(&window) .transient_for(&window)
@ -97,7 +98,14 @@ pub fn apt_process_update(
retry_signal_action, retry_signal_action,
#[strong] #[strong]
excluded_updates_vec, excluded_updates_vec,
move |_, _| apt_confirm_window(&excluded_updates_vec, window, &retry_signal_action) #[strong]
theme_changed_action,
move |_, _| apt_confirm_window(
&excluded_updates_vec,
window,
&retry_signal_action,
&theme_changed_action
)
)); ));
if excluded_updates_vec.is_empty() { if excluded_updates_vec.is_empty() {
@ -115,6 +123,7 @@ fn apt_confirm_window(
excluded_updates_vec: &Vec<String>, excluded_updates_vec: &Vec<String>,
window: adw::ApplicationWindow, window: adw::ApplicationWindow,
retry_signal_action: &SimpleAction, retry_signal_action: &SimpleAction,
theme_changed_action: &SimpleAction,
) { ) {
let to_be_removed_packages_vec: Rc<RefCell<Vec<String>>> = Rc::new(RefCell::new(Vec::new())); let to_be_removed_packages_vec: Rc<RefCell<Vec<String>>> = Rc::new(RefCell::new(Vec::new()));
// Emulate Apt Full Upgrade to get transaction info // Emulate Apt Full Upgrade to get transaction info
@ -306,13 +315,20 @@ fn apt_confirm_window(
retry_signal_action, retry_signal_action,
#[strong] #[strong]
apt_confirm_dialog, apt_confirm_dialog,
#[strong]
theme_changed_action,
move |_, _| { move |_, _| {
let retry_signal_action0 = retry_signal_action.clone(); let retry_signal_action0 = retry_signal_action.clone();
let theme_changed_action0 = theme_changed_action.clone();
apt_confirm_dialog apt_confirm_dialog
.clone() .clone()
.choose(None::<&gio::Cancellable>, move |choice| { .choose(None::<&gio::Cancellable>, move |choice| {
if choice == "apt_confirm_dialog_confirm" { if choice == "apt_confirm_dialog_confirm" {
apt_full_upgrade_from_socket(window, &retry_signal_action0); apt_full_upgrade_from_socket(
window,
&retry_signal_action0,
&theme_changed_action0,
);
} }
}); });
} }
@ -384,6 +400,7 @@ fn apt_confirm_window(
fn apt_full_upgrade_from_socket( fn apt_full_upgrade_from_socket(
window: adw::ApplicationWindow, window: adw::ApplicationWindow,
retry_signal_action: &SimpleAction, retry_signal_action: &SimpleAction,
theme_changed_action: &SimpleAction,
) { ) {
let (upgrade_percent_sender, upgrade_percent_receiver) = async_channel::unbounded::<String>(); let (upgrade_percent_sender, upgrade_percent_receiver) = async_channel::unbounded::<String>();
let upgrade_percent_sender = upgrade_percent_sender.clone(); let upgrade_percent_sender = upgrade_percent_sender.clone();
@ -464,15 +481,49 @@ fn apt_full_upgrade_from_socket(
apt_upgrade_dialog_progress_bar.set_width_request(200); apt_upgrade_dialog_progress_bar.set_width_request(200);
apt_upgrade_dialog_progress_bar.set_height_request(200); apt_upgrade_dialog_progress_bar.set_height_request(200);
#[allow(deprecated)] #[allow(deprecated)]
apt_upgrade_dialog_progress_bar.set_progress_fill_color(window.style_context().lookup_color("accent_bg_color").unwrap()); apt_upgrade_dialog_progress_bar.set_progress_fill_color(
window
.style_context()
.lookup_color("accent_bg_color")
.unwrap(),
);
#[allow(deprecated)] #[allow(deprecated)]
apt_upgrade_dialog_progress_bar.set_radius_fill_color(window.style_context().lookup_color("headerbar_bg_color").unwrap()); apt_upgrade_dialog_progress_bar.set_radius_fill_color(
window
.style_context()
.lookup_color("headerbar_bg_color")
.unwrap(),
);
#[warn(deprecated)] #[warn(deprecated)]
apt_upgrade_dialog_progress_bar.set_progress_font(get_current_font()); apt_upgrade_dialog_progress_bar.set_progress_font(get_current_font());
apt_upgrade_dialog_progress_bar.set_center_text(t!("progress_bar_circle_center_text")); apt_upgrade_dialog_progress_bar.set_center_text(t!("progress_bar_circle_center_text"));
apt_upgrade_dialog_progress_bar.set_fraction_font_size(24); apt_upgrade_dialog_progress_bar.set_fraction_font_size(24);
apt_upgrade_dialog_progress_bar.set_center_text_font_size(8); apt_upgrade_dialog_progress_bar.set_center_text_font_size(8);
theme_changed_action.connect_activate(clone!(
#[strong]
window,
#[strong]
apt_upgrade_dialog_progress_bar,
move |_, _| {
#[allow(deprecated)]
apt_upgrade_dialog_progress_bar.set_progress_fill_color(
window
.style_context()
.lookup_color("accent_bg_color")
.unwrap(),
);
#[allow(deprecated)]
apt_upgrade_dialog_progress_bar.set_radius_fill_color(
window
.style_context()
.lookup_color("headerbar_bg_color")
.unwrap(),
);
#[warn(deprecated)]
apt_upgrade_dialog_progress_bar.set_progress_font(get_current_font());
}
));
let apt_speed_label = gtk::Label::builder() let apt_speed_label = gtk::Label::builder()
.halign(Align::Center) .halign(Align::Center)
.margin_top(10) .margin_top(10)

View File

@ -16,39 +16,9 @@ use std::sync::Arc;
use std::sync::Mutex; use std::sync::Mutex;
use std::thread; use std::thread;
fn get_gsettings_font() -> String {
let glib_settings = gio::Settings::new("org.gnome.desktop.interface");
let font = glib_settings.string("font-name").to_string();
let re = regex::Regex::new(r" [^ ]*$").unwrap();
re.replace(&font, "").to_string()
}
pub fn get_current_font() -> String { pub fn get_current_font() -> String {
let mut gtk_config_file = configparser::ini::Ini::new(); let settings = gtk::Settings::default().unwrap();
match std::fs::read_to_string(std::env::var_os("HOME").unwrap().to_string_lossy().to_string() + "/.config/gtk-4.0/settings.ini") { settings.gtk_font_name().unwrap().to_string()
Ok(t) => {
match gtk_config_file.read(t) {
Ok(_) => {
match gtk_config_file.get("Settings", "gtk-font-name") {
Some(s) => {
let re = regex::Regex::new(r",[^,]*$").unwrap();
return re.replace(&s, "").to_string();
},
None => {
return get_gsettings_font();
}
}
}
Err(_) => {
return get_gsettings_font();
}
}
}
Err(_) => {
return get_gsettings_font();
}
}
} }
#[derive(Debug)] #[derive(Debug)]
@ -143,6 +113,9 @@ pub fn build_ui(app: &Application) {
let constant_loop_sender_clone0 = constant_loop_sender.clone(); let constant_loop_sender_clone0 = constant_loop_sender.clone();
let constant_loop_sender_clone1 = constant_loop_sender.clone(); let constant_loop_sender_clone1 = constant_loop_sender.clone();
let (gsettings_change_sender, gsettings_change_receiver) = async_channel::unbounded();
let gsettings_change_sender_clone0 = gsettings_change_sender.clone();
let refresh_button = gtk::Button::builder() let refresh_button = gtk::Button::builder()
.icon_name("view-refresh-symbolic") .icon_name("view-refresh-symbolic")
.tooltip_text(t!("refresh_button_tooltip_text")) .tooltip_text(t!("refresh_button_tooltip_text"))
@ -154,6 +127,7 @@ pub fn build_ui(app: &Application) {
let flatpak_update_count = Rc::new(RefCell::new(0)); let flatpak_update_count = Rc::new(RefCell::new(0));
let update_sys_tray = gio::SimpleAction::new("sys_tray", Some(glib::VariantTy::ARRAY)); let update_sys_tray = gio::SimpleAction::new("sys_tray", Some(glib::VariantTy::ARRAY));
let theme_changed_action = gio::SimpleAction::new("theme_changed", None);
let (tray_service_sender, tray_service_receiver) = async_channel::unbounded(); let (tray_service_sender, tray_service_receiver) = async_channel::unbounded();
let tray_service_sender = tray_service_sender.clone(); let tray_service_sender = tray_service_sender.clone();
@ -254,36 +228,38 @@ pub fn build_ui(app: &Application) {
}); });
{ {
let automatically_check_for_updates_arc = automatically_check_for_updates_arc.clone(); let automatically_check_for_updates_arc = automatically_check_for_updates_arc.clone();
let update_interval_arc = update_interval_arc.clone(); let update_interval_arc = update_interval_arc.clone();
// update interval loop // update interval loop
thread::spawn(move || { thread::spawn(move || {
loop { loop {
let local_interval: i32; let local_interval: i32;
let automatically_check_for_updates = let automatically_check_for_updates =
automatically_check_for_updates_arc.load(std::sync::atomic::Ordering::Relaxed); automatically_check_for_updates_arc.load(std::sync::atomic::Ordering::Relaxed);
if automatically_check_for_updates { if automatically_check_for_updates {
let update_interval = match update_interval_arc.lock() { let update_interval = match update_interval_arc.lock() {
Ok(t) => t, Ok(t) => t,
Err(_) => { Err(_) => {
continue;
}
};
local_interval = *update_interval;
std::mem::drop(update_interval);
//println!("Sleeping on auto update check: {}", local_interval);
if let Ok(_) = thread_sleep_receiver.recv_timeout (std::time::Duration::from_millis(local_interval as u64)) {
//println!("Sleeping on auto was interrupted was interrupted");
continue; continue;
} }
//println!("Starting Refresh Request"); };
constant_loop_sender_clone1 local_interval = *update_interval;
.send_blocking(ConstantLoopMessage::RefreshRequest) std::mem::drop(update_interval);
.expect("The channel needs to be open."); //println!("Sleeping on auto update check: {}", local_interval);
if let Ok(_) = thread_sleep_receiver
.recv_timeout(std::time::Duration::from_millis(local_interval as u64))
{
//println!("Sleeping on auto was interrupted was interrupted");
continue;
}
//println!("Starting Refresh Request");
constant_loop_sender_clone1
.send_blocking(ConstantLoopMessage::RefreshRequest)
.expect("The channel needs to be open.");
}
} }
} });
});
} }
let window_banner = Banner::builder().revealed(false).build(); let window_banner = Banner::builder().revealed(false).build();
@ -445,6 +421,66 @@ pub fn build_ui(app: &Application) {
//window.present(); //window.present();
// Theme update actions
{
let setting = gtk::Settings::default().unwrap();
setting.connect_gtk_application_prefer_dark_theme_notify(clone!(
#[strong]
theme_changed_action,
move |_| {
let theme_changed_action = theme_changed_action.clone();
glib::timeout_add_seconds_local(5, move || {
theme_changed_action.activate(None);
glib::ControlFlow::Continue
});
}
));
setting.connect_gtk_font_name_notify(clone!(
#[strong]
theme_changed_action,
move |_| {
let theme_changed_action = theme_changed_action.clone();
glib::timeout_add_seconds_local(5, move || {
theme_changed_action.activate(None);
glib::ControlFlow::Continue
});
}
));
}
thread::spawn(move || {
let context = glib::MainContext::default();
let main_loop = glib::MainLoop::new(Some(&context), false);
let gsettings = gtk::gio::Settings::new("org.gnome.desktop.interface");
gsettings.connect_changed(
Some("accent-color"),
clone!(
#[strong]
gsettings_change_sender_clone0,
move |_, _| {
let gsettings_change_sender_clone0 = gsettings_change_sender_clone0.clone();
glib::timeout_add_seconds_local(5, move || {
gsettings_change_sender_clone0.send_blocking(()).unwrap();
glib::ControlFlow::Continue
});
}
),
);
main_loop.run()
});
let gsettings_changed_context = MainContext::default();
// The main loop executes the asynchronous block
gsettings_changed_context.spawn_local(clone!(
#[strong]
theme_changed_action,
async move {
while let Ok(()) = gsettings_change_receiver.recv().await {
theme_changed_action.activate(None);
}
}
));
// Flatpak Update Page // Flatpak Update Page
let flatpak_retry_signal_action = gio::SimpleAction::new("retry", None); let flatpak_retry_signal_action = gio::SimpleAction::new("retry", None);
@ -464,11 +500,14 @@ pub fn build_ui(app: &Application) {
apt_update_count, apt_update_count,
#[strong] #[strong]
flatpak_update_count, flatpak_update_count,
#[strong]
theme_changed_action,
move |_, _| { move |_, _| {
flatpak_update_view_stack_bin.set_child(Some( flatpak_update_view_stack_bin.set_child(Some(
&flatpak_update_page::flatpak_update_page( &flatpak_update_page::flatpak_update_page(
window, window,
&flatpak_retry_signal_action, &flatpak_retry_signal_action,
&theme_changed_action,
&update_sys_tray, &update_sys_tray,
&apt_update_count, &apt_update_count,
&flatpak_update_count, &flatpak_update_count,
@ -499,11 +538,14 @@ pub fn build_ui(app: &Application) {
apt_update_count, apt_update_count,
#[strong] #[strong]
flatpak_update_count, flatpak_update_count,
#[strong]
theme_changed_action,
move |action, _| { move |action, _| {
apt_update_view_stack_bin.set_child(Some(&apt_update_page::apt_update_page( apt_update_view_stack_bin.set_child(Some(&apt_update_page::apt_update_page(
window.clone(), window.clone(),
&action, &action,
&flatpak_retry_signal_action, &flatpak_retry_signal_action,
&theme_changed_action,
flatpak_ran_once.clone(), flatpak_ran_once.clone(),
&update_sys_tray, &update_sys_tray,
&apt_update_count, &apt_update_count,
@ -516,6 +558,7 @@ pub fn build_ui(app: &Application) {
window.clone(), window.clone(),
&apt_retry_signal_action, &apt_retry_signal_action,
&flatpak_retry_signal_action, &flatpak_retry_signal_action,
&theme_changed_action,
flatpak_ran_once.clone(), flatpak_ran_once.clone(),
&update_sys_tray, &update_sys_tray,
&apt_update_count, &apt_update_count,
@ -555,7 +598,14 @@ pub fn build_ui(app: &Application) {
window_adw_view_switcher_sidebar_box.append(&flatpak_update_page_toggle_button); window_adw_view_switcher_sidebar_box.append(&flatpak_update_page_toggle_button);
window_adw_stack.add_titled( window_adw_stack.add_titled(
&apt_manage_page(window.clone(), &glib_settings, &apt_retry_signal_action,&thread_sleep_sender, &automatically_check_for_updates_arc, &update_interval_arc), &apt_manage_page(
window.clone(),
&glib_settings,
&apt_retry_signal_action,
&thread_sleep_sender,
&automatically_check_for_updates_arc,
&update_interval_arc,
),
Some("apt_manage_page"), Some("apt_manage_page"),
&t!("apt_manage_page_title"), &t!("apt_manage_page_title"),
); );

View File

@ -28,6 +28,7 @@ pub struct FlatpakRefStruct {
pub fn flatpak_update_page( pub fn flatpak_update_page(
window: adw::ApplicationWindow, window: adw::ApplicationWindow,
retry_signal_action: &SimpleAction, retry_signal_action: &SimpleAction,
theme_changed_action: &SimpleAction,
update_sys_tray: &SimpleAction, update_sys_tray: &SimpleAction,
apt_update_count: &Rc<RefCell<i32>>, apt_update_count: &Rc<RefCell<i32>>,
flatpak_update_count: &Rc<RefCell<i32>>, flatpak_update_count: &Rc<RefCell<i32>>,
@ -214,9 +215,19 @@ pub fn flatpak_update_page(
flatpak_update_dialog_progress_bar.set_width_request(200); flatpak_update_dialog_progress_bar.set_width_request(200);
flatpak_update_dialog_progress_bar.set_height_request(200); flatpak_update_dialog_progress_bar.set_height_request(200);
#[allow(deprecated)] #[allow(deprecated)]
flatpak_update_dialog_progress_bar.set_progress_fill_color(window.style_context().lookup_color("accent_bg_color").unwrap()); flatpak_update_dialog_progress_bar.set_progress_fill_color(
window
.style_context()
.lookup_color("accent_bg_color")
.unwrap(),
);
#[allow(deprecated)] #[allow(deprecated)]
flatpak_update_dialog_progress_bar.set_radius_fill_color(window.style_context().lookup_color("headerbar_bg_color").unwrap()); flatpak_update_dialog_progress_bar.set_radius_fill_color(
window
.style_context()
.lookup_color("headerbar_bg_color")
.unwrap(),
);
#[warn(deprecated)] #[warn(deprecated)]
flatpak_update_dialog_progress_bar.set_progress_font(get_current_font()); flatpak_update_dialog_progress_bar.set_progress_font(get_current_font());
flatpak_update_dialog_progress_bar.set_center_text(t!("progress_bar_circle_center_text")); flatpak_update_dialog_progress_bar.set_center_text(t!("progress_bar_circle_center_text"));
@ -324,6 +335,8 @@ pub fn flatpak_update_page(
#[weak] #[weak]
retry_signal_action, retry_signal_action,
#[strong] #[strong]
theme_changed_action,
#[strong]
system_refs_for_upgrade_vec_all_clone0, system_refs_for_upgrade_vec_all_clone0,
#[strong] #[strong]
user_refs_for_upgrade_vec_all_clone0, user_refs_for_upgrade_vec_all_clone0,
@ -335,6 +348,7 @@ pub fn flatpak_update_page(
&user_refs_for_upgrade_vec_all_clone0.borrow(), &user_refs_for_upgrade_vec_all_clone0.borrow(),
window, window,
&retry_signal_action, &retry_signal_action,
&theme_changed_action,
) )
} }
)); ));

View File

@ -51,6 +51,7 @@ pub fn flatpak_process_update(
user_refs_for_upgrade_vec_all: &Vec<FlatpakRefRow>, user_refs_for_upgrade_vec_all: &Vec<FlatpakRefRow>,
window: adw::ApplicationWindow, window: adw::ApplicationWindow,
retry_signal_action: &SimpleAction, retry_signal_action: &SimpleAction,
theme_changed_action: &SimpleAction,
) { ) {
// Emulate Flatpak Full Upgrade to get transaction info // Emulate Flatpak Full Upgrade to get transaction info
let mut flatpak_changes_struct = FlatpakChangesInfo { let mut flatpak_changes_struct = FlatpakChangesInfo {
@ -207,6 +208,7 @@ pub fn flatpak_process_update(
flatpak_confirm_dialog.set_close_response("flatpak_confirm_dialog_cancel"); flatpak_confirm_dialog.set_close_response("flatpak_confirm_dialog_cancel");
let retry_signal_action0 = retry_signal_action.clone(); let retry_signal_action0 = retry_signal_action.clone();
let theme_changed_action0 = theme_changed_action.clone();
flatpak_confirm_dialog flatpak_confirm_dialog
.clone() .clone()
.choose(None::<&gio::Cancellable>, move |choice| { .choose(None::<&gio::Cancellable>, move |choice| {
@ -216,6 +218,7 @@ pub fn flatpak_process_update(
user_refs_for_upgrade_vec, user_refs_for_upgrade_vec,
window, window,
&retry_signal_action0, &retry_signal_action0,
&theme_changed_action0,
); );
} }
}); });
@ -226,6 +229,7 @@ fn flatpak_run_transactions(
user_refs_for_upgrade_vec: Vec<String>, user_refs_for_upgrade_vec: Vec<String>,
window: adw::ApplicationWindow, window: adw::ApplicationWindow,
retry_signal_action: &SimpleAction, retry_signal_action: &SimpleAction,
theme_changed_action: &SimpleAction,
) { ) {
let (transaction_percent_sender, transaction_percent_receiver) = let (transaction_percent_sender, transaction_percent_receiver) =
async_channel::unbounded::<u32>(); async_channel::unbounded::<u32>();
@ -363,7 +367,8 @@ fn flatpak_run_transactions(
let flatpak_transaction_dialog_child_box = let flatpak_transaction_dialog_child_box =
Box::builder().orientation(Orientation::Vertical).build(); Box::builder().orientation(Orientation::Vertical).build();
let flatpak_transaction_dialog_progress_bar = circularprogressbar_rs::CircularProgressBar::new(); let flatpak_transaction_dialog_progress_bar =
circularprogressbar_rs::CircularProgressBar::new();
flatpak_transaction_dialog_progress_bar.set_line_width(10.0); flatpak_transaction_dialog_progress_bar.set_line_width(10.0);
flatpak_transaction_dialog_progress_bar.set_fill_radius(true); flatpak_transaction_dialog_progress_bar.set_fill_radius(true);
flatpak_transaction_dialog_progress_bar.set_hexpand(true); flatpak_transaction_dialog_progress_bar.set_hexpand(true);
@ -371,14 +376,48 @@ fn flatpak_run_transactions(
flatpak_transaction_dialog_progress_bar.set_width_request(200); flatpak_transaction_dialog_progress_bar.set_width_request(200);
flatpak_transaction_dialog_progress_bar.set_height_request(200); flatpak_transaction_dialog_progress_bar.set_height_request(200);
#[allow(deprecated)] #[allow(deprecated)]
flatpak_transaction_dialog_progress_bar.set_progress_fill_color(window.style_context().lookup_color("accent_bg_color").unwrap()); flatpak_transaction_dialog_progress_bar.set_progress_fill_color(
window
.style_context()
.lookup_color("accent_bg_color")
.unwrap(),
);
#[allow(deprecated)] #[allow(deprecated)]
flatpak_transaction_dialog_progress_bar.set_radius_fill_color(window.style_context().lookup_color("headerbar_bg_color").unwrap()); flatpak_transaction_dialog_progress_bar.set_radius_fill_color(
window
.style_context()
.lookup_color("headerbar_bg_color")
.unwrap(),
);
#[warn(deprecated)] #[warn(deprecated)]
flatpak_transaction_dialog_progress_bar.set_progress_font(get_current_font()); flatpak_transaction_dialog_progress_bar.set_progress_font(get_current_font());
flatpak_transaction_dialog_progress_bar.set_center_text(t!("progress_bar_circle_center_text")); flatpak_transaction_dialog_progress_bar.set_center_text(t!("progress_bar_circle_center_text"));
flatpak_transaction_dialog_progress_bar.set_fraction_font_size(24); flatpak_transaction_dialog_progress_bar.set_fraction_font_size(24);
flatpak_transaction_dialog_progress_bar.set_center_text_font_size(8); flatpak_transaction_dialog_progress_bar.set_center_text_font_size(8);
theme_changed_action.connect_activate(clone!(
#[strong]
window,
#[strong]
flatpak_transaction_dialog_progress_bar,
move |_, _| {
#[allow(deprecated)]
flatpak_transaction_dialog_progress_bar.set_progress_fill_color(
window
.style_context()
.lookup_color("accent_bg_color")
.unwrap(),
);
#[allow(deprecated)]
flatpak_transaction_dialog_progress_bar.set_radius_fill_color(
window
.style_context()
.lookup_color("headerbar_bg_color")
.unwrap(),
);
#[warn(deprecated)]
flatpak_transaction_dialog_progress_bar.set_progress_font(get_current_font());
}
));
flatpak_transaction_dialog_child_box.append(&flatpak_transaction_dialog_progress_bar); flatpak_transaction_dialog_child_box.append(&flatpak_transaction_dialog_progress_bar);

View File

@ -21,10 +21,30 @@
padding-bottom: 3px; padding-bottom: 3px;
} }
.round-all-scroll-no-padding {
border-top-right-radius: 15px;
border-top-left-radius: 15px;
border-bottom-right-radius: 15px;
border-bottom-left-radius: 15px;
padding-top: 0px;
padding-right: 0px;
padding-left: 0px;
padding-bottom: 0px;
}
.no-round-borders {
border-top-right-radius: 0px;
border-top-left-radius: 0px;
border-bottom-right-radius: 0px;
border-bottom-left-radius: 0px;
padding-top: 0px;
padding-right: 0px;
padding-left: 0px;
padding-bottom: 0px;
}
.background-accent-bg { .background-accent-bg {
# background: @accent_bg_color; background: @accent_bg_color;
background: green;
animation:blink 1s linear infinite;
border-radius: 10px; border-radius: 10px;
padding: 5px; padding: 5px;
} }
@ -70,12 +90,4 @@
.disable-outline { .disable-outline {
outline: none; outline: none;
}
@keyframes blink{
0%{opacity: 1;}
25%{opacity: 0.75;}
50%{opacity: 0.5;}
75%{opacity: 0.75;}
100%{opacity: 1;}
} }

View File

@ -162,7 +162,8 @@ impl<'a> DynAcquireProgress for AptUpdateProgressSocket<'a> {
let progress_percent: f32 = let progress_percent: f32 =
(status.current_bytes() as f32 * 100.0) / status.total_bytes() as f32; (status.current_bytes() as f32 * 100.0) / status.total_bytes() as f32;
let speed = if self.pulse_interval != 0 { let speed = if self.pulse_interval != 0 {
(status.current_bytes() as f64 - self.last_pulse_bytes as f64) / (self.pulse_interval as f64 / 1000000.0) (status.current_bytes() as f64 - self.last_pulse_bytes as f64)
/ (self.pulse_interval as f64 / 1000000.0)
} else { } else {
status.current_bytes() as f64 - self.last_pulse_bytes as f64 status.current_bytes() as f64 - self.last_pulse_bytes as f64
}; };