add basis for theme change detecttion
This commit is contained in:
parent
d36bda43a5
commit
a5149a990b
@ -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(>k::Adjustment::new((glib_settings.int("update-interval") as f64) / 3600000.0, 1.0, 24.0, 1.0, 0.0, 0.0))
|
.adjustment(>k::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,8 +598,11 @@ 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"),
|
||||||
|
std::sync::atomic::Ordering::Relaxed,
|
||||||
|
);
|
||||||
|
let mut update_interval_arc_gaurd = loop {
|
||||||
if let Ok(guard) = update_interval_arc.lock() {
|
if let Ok(guard) = update_interval_arc.lock() {
|
||||||
break guard;
|
break guard;
|
||||||
}
|
}
|
||||||
@ -605,7 +615,8 @@ pub fn apt_manage_page(
|
|||||||
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,8 +631,11 @@ 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"),
|
||||||
|
std::sync::atomic::Ordering::Relaxed,
|
||||||
|
);
|
||||||
|
let mut update_interval_arc_gaurd = loop {
|
||||||
if let Ok(guard) = update_interval_arc.lock() {
|
if let Ok(guard) = update_interval_arc.lock() {
|
||||||
break guard;
|
break guard;
|
||||||
}
|
}
|
||||||
|
@ -20,14 +20,17 @@ 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!(
|
||||||
|
"pkexec",
|
||||||
|
"/usr/lib/pika/pikman-update-manager/scripts/apt_update"
|
||||||
|
)
|
||||||
.stderr_to_stdout()
|
.stderr_to_stdout()
|
||||||
.stdout_file(pipe_writer)
|
.stdout_file(pipe_writer)
|
||||||
.start()?;
|
.start()?;
|
||||||
@ -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>>,
|
||||||
@ -152,11 +156,15 @@ pub fn apt_update_page(
|
|||||||
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))
|
||||||
|
.expect("The channel needs to be open.");
|
||||||
}
|
}
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
println!("Status: Addon Command Failed");
|
println!("Status: Addon Command Failed");
|
||||||
log_loop_sender_clone1.send_blocking(AddonChannelMsg::LogLoopStatus(false)).expect("The channel needs to be open.");
|
log_loop_sender_clone1
|
||||||
|
.send_blocking(AddonChannelMsg::LogLoopStatus(false))
|
||||||
|
.expect("The channel needs to be open.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -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(
|
||||||
|
&glib::Variant::array_from_fixed_array(&[
|
||||||
*apt_update_count.borrow(),
|
*apt_update_count.borrow(),
|
||||||
*flatpak_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(
|
||||||
|
&glib::Variant::array_from_fixed_array(&[
|
||||||
*apt_update_count.borrow(),
|
*apt_update_count.borrow(),
|
||||||
*flatpak_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),
|
||||||
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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,14 +481,48 @@ 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)
|
||||||
|
@ -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();
|
||||||
@ -273,7 +247,9 @@ pub fn build_ui(app: &Application) {
|
|||||||
local_interval = *update_interval;
|
local_interval = *update_interval;
|
||||||
std::mem::drop(update_interval);
|
std::mem::drop(update_interval);
|
||||||
//println!("Sleeping on auto update check: {}", local_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)) {
|
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");
|
//println!("Sleeping on auto was interrupted was interrupted");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -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"),
|
||||||
);
|
);
|
||||||
|
@ -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,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
@ -71,11 +91,3 @@
|
|||||||
.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;}
|
|
||||||
}
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user