Add main page
All checks were successful
PikaOS Package Build & Release (amd64-v3) / build (push) Successful in 2m35s
All checks were successful
PikaOS Package Build & Release (amd64-v3) / build (push) Successful in 2m35s
This commit is contained in:
parent
fce2150b6f
commit
97e2ed1dc6
2
.github/release-nest-v3
vendored
2
.github/release-nest-v3
vendored
@ -1 +1 @@
|
|||||||
21
|
22
|
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -1793,7 +1793,7 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pikman-update-manager"
|
name = "pikman-update-manager"
|
||||||
version = "1.1.0"
|
version = "1.1.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-channel",
|
"async-channel",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "pikman-update-manager"
|
name = "pikman-update-manager"
|
||||||
version = "1.1.0"
|
version = "1.1.1"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
7
debian/changelog
vendored
7
debian/changelog
vendored
@ -1,3 +1,10 @@
|
|||||||
|
pikman-update-manager (1.1.1-100pika1) pika; urgency=medium
|
||||||
|
|
||||||
|
* add main page
|
||||||
|
|
||||||
|
-- Pika <root@pika.com> Wed, 11 Jan 2023 11:41:38 +0000
|
||||||
|
|
||||||
|
|
||||||
pikman-update-manager (1.1.0-100pika2) pika; urgency=medium
|
pikman-update-manager (1.1.0-100pika2) pika; urgency=medium
|
||||||
|
|
||||||
* initial release
|
* initial release
|
||||||
|
@ -169,5 +169,11 @@
|
|||||||
"retry_interval_spinrow_title": "Automatic Check Interval",
|
"retry_interval_spinrow_title": "Automatic Check Interval",
|
||||||
"retry_interval_spinrow_subtitle": "In Hours",
|
"retry_interval_spinrow_subtitle": "In Hours",
|
||||||
"progress_bar_circle_center_text": "Percent %",
|
"progress_bar_circle_center_text": "Percent %",
|
||||||
"main_update_page_title": "Main Updates Page"
|
"main_update_page_title": "Main Updates Page",
|
||||||
|
"update_button_main_label": "Commit APT & Flatpak Upgrades",
|
||||||
|
"update_badge_box_total_label": "Total Updates",
|
||||||
|
"update_badge_box_apt_label": "APT Updates",
|
||||||
|
"update_badge_box_flatpak_label": "Flatpak Updates",
|
||||||
|
"main_page_header_label_yes_label": "Updates Available!",
|
||||||
|
"main_page_header_label_no_label": "Up-to-date!"
|
||||||
}
|
}
|
2
main.sh
2
main.sh
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
VERSION="1.1.0"
|
VERSION="1.1.1"
|
||||||
|
|
||||||
source ./pika-build-config.sh
|
source ./pika-build-config.sh
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ use std::rc::Rc;
|
|||||||
use std::thread;
|
use std::thread;
|
||||||
use tokio::runtime::Runtime;
|
use tokio::runtime::Runtime;
|
||||||
|
|
||||||
use crate::build_ui::get_current_font;
|
use crate::build_ui::{create_color_badge, get_current_font};
|
||||||
|
|
||||||
struct AptChangesInfo {
|
struct AptChangesInfo {
|
||||||
package_count_upgrade: u64,
|
package_count_upgrade: u64,
|
||||||
@ -689,95 +689,3 @@ fn apt_full_upgrade_from_socket(
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_color_badge(
|
|
||||||
label0_text: &str,
|
|
||||||
label1_text: &str,
|
|
||||||
css_style: &str,
|
|
||||||
theme_changed_action: &SimpleAction,
|
|
||||||
group_size: &SizeGroup,
|
|
||||||
group_size0: &SizeGroup,
|
|
||||||
group_size1: &SizeGroup,
|
|
||||||
) -> ListBox {
|
|
||||||
let badge_box = Box::builder().build();
|
|
||||||
|
|
||||||
let label0 = Label::builder()
|
|
||||||
.label(label0_text)
|
|
||||||
.margin_start(5)
|
|
||||||
.margin_end(5)
|
|
||||||
.margin_bottom(1)
|
|
||||||
.margin_top(1)
|
|
||||||
.valign(Align::Center)
|
|
||||||
.halign(Align::Center)
|
|
||||||
.hexpand(true)
|
|
||||||
.vexpand(true)
|
|
||||||
.build();
|
|
||||||
group_size0.add_widget(&label0);
|
|
||||||
|
|
||||||
let label_separator = Separator::builder().build();
|
|
||||||
|
|
||||||
let label1 = Label::builder()
|
|
||||||
.label(label1_text)
|
|
||||||
.margin_start(3)
|
|
||||||
.margin_end(0)
|
|
||||||
.margin_bottom(1)
|
|
||||||
.margin_top(1)
|
|
||||||
.valign(Align::Center)
|
|
||||||
.halign(Align::Center)
|
|
||||||
.hexpand(true)
|
|
||||||
.vexpand(true)
|
|
||||||
.build();
|
|
||||||
group_size1.add_widget(&label1);
|
|
||||||
|
|
||||||
label1.add_css_class(css_style);
|
|
||||||
|
|
||||||
#[allow(deprecated)]
|
|
||||||
let color = label1
|
|
||||||
.style_context()
|
|
||||||
.lookup_color("accent_bg_color")
|
|
||||||
.unwrap();
|
|
||||||
if (color.red() * 0.299 + color.green() * 0.587 + color.blue() * 0.114) > 170.0 {
|
|
||||||
label1.remove_css_class("white-color-text");
|
|
||||||
label1.add_css_class("black-color-text");
|
|
||||||
} else {
|
|
||||||
label1.remove_css_class("black-color-text");
|
|
||||||
label1.add_css_class("white-color-text");
|
|
||||||
}
|
|
||||||
|
|
||||||
theme_changed_action.connect_activate(clone!(
|
|
||||||
#[strong]
|
|
||||||
label1,
|
|
||||||
move |_, _| {
|
|
||||||
#[allow(deprecated)]
|
|
||||||
let color = label1
|
|
||||||
.style_context()
|
|
||||||
.lookup_color("accent_bg_color")
|
|
||||||
.unwrap();
|
|
||||||
if (color.red() * 0.299 + color.green() * 0.587 + color.blue() * 0.114) > 170.0 {
|
|
||||||
label1.remove_css_class("white-color-text");
|
|
||||||
label1.add_css_class("black-color-text");
|
|
||||||
} else {
|
|
||||||
label1.remove_css_class("black-color-text");
|
|
||||||
label1.add_css_class("white-color-text");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
));
|
|
||||||
|
|
||||||
badge_box.append(&label0);
|
|
||||||
badge_box.append(&label_separator);
|
|
||||||
badge_box.append(&label1);
|
|
||||||
|
|
||||||
let boxedlist = ListBox::builder()
|
|
||||||
.selection_mode(SelectionMode::None)
|
|
||||||
.halign(Align::Center)
|
|
||||||
.margin_start(10)
|
|
||||||
.margin_end(10)
|
|
||||||
.margin_bottom(10)
|
|
||||||
.margin_top(10)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
boxedlist.add_css_class("boxed-list");
|
|
||||||
boxedlist.append(&badge_box);
|
|
||||||
group_size.add_widget(&boxedlist);
|
|
||||||
boxedlist
|
|
||||||
}
|
|
||||||
|
@ -584,6 +584,7 @@ pub fn build_ui(app: &Application) {
|
|||||||
&apt_update_button,
|
&apt_update_button,
|
||||||
&initiated_by_main,
|
&initiated_by_main,
|
||||||
&theme_changed_action,
|
&theme_changed_action,
|
||||||
|
&update_sys_tray,
|
||||||
),
|
),
|
||||||
Some("main_update_page"),
|
Some("main_update_page"),
|
||||||
&t!("main_update_page_title"),
|
&t!("main_update_page_title"),
|
||||||
@ -849,3 +850,95 @@ fn add_content_button(
|
|||||||
));
|
));
|
||||||
toggle_button
|
toggle_button
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn create_color_badge(
|
||||||
|
label0_text: &str,
|
||||||
|
label1_text: &str,
|
||||||
|
css_style: &str,
|
||||||
|
theme_changed_action: &gio::SimpleAction,
|
||||||
|
group_size: >k::SizeGroup,
|
||||||
|
group_size0: >k::SizeGroup,
|
||||||
|
group_size1: >k::SizeGroup,
|
||||||
|
) -> gtk::ListBox {
|
||||||
|
let badge_box = gtk::Box::builder().build();
|
||||||
|
|
||||||
|
let label0 = gtk::Label::builder()
|
||||||
|
.label(label0_text)
|
||||||
|
.margin_start(5)
|
||||||
|
.margin_end(5)
|
||||||
|
.margin_bottom(1)
|
||||||
|
.margin_top(1)
|
||||||
|
.valign(gtk::Align::Center)
|
||||||
|
.halign(gtk::Align::Center)
|
||||||
|
.hexpand(true)
|
||||||
|
.vexpand(true)
|
||||||
|
.build();
|
||||||
|
group_size0.add_widget(&label0);
|
||||||
|
|
||||||
|
let label_separator = gtk::Separator::builder().build();
|
||||||
|
|
||||||
|
let label1 = gtk::Label::builder()
|
||||||
|
.label(label1_text)
|
||||||
|
.margin_start(3)
|
||||||
|
.margin_end(0)
|
||||||
|
.margin_bottom(1)
|
||||||
|
.margin_top(1)
|
||||||
|
.valign(gtk::Align::Center)
|
||||||
|
.halign(gtk::Align::Center)
|
||||||
|
.hexpand(true)
|
||||||
|
.vexpand(true)
|
||||||
|
.build();
|
||||||
|
group_size1.add_widget(&label1);
|
||||||
|
|
||||||
|
label1.add_css_class(css_style);
|
||||||
|
|
||||||
|
#[allow(deprecated)]
|
||||||
|
let color = label1
|
||||||
|
.style_context()
|
||||||
|
.lookup_color("accent_bg_color")
|
||||||
|
.unwrap();
|
||||||
|
if (color.red() * 0.299 + color.green() * 0.587 + color.blue() * 0.114) > 170.0 {
|
||||||
|
label1.remove_css_class("white-color-text");
|
||||||
|
label1.add_css_class("black-color-text");
|
||||||
|
} else {
|
||||||
|
label1.remove_css_class("black-color-text");
|
||||||
|
label1.add_css_class("white-color-text");
|
||||||
|
}
|
||||||
|
|
||||||
|
theme_changed_action.connect_activate(clone!(
|
||||||
|
#[strong]
|
||||||
|
label1,
|
||||||
|
move |_, _| {
|
||||||
|
#[allow(deprecated)]
|
||||||
|
let color = label1
|
||||||
|
.style_context()
|
||||||
|
.lookup_color("accent_bg_color")
|
||||||
|
.unwrap();
|
||||||
|
if (color.red() * 0.299 + color.green() * 0.587 + color.blue() * 0.114) > 170.0 {
|
||||||
|
label1.remove_css_class("white-color-text");
|
||||||
|
label1.add_css_class("black-color-text");
|
||||||
|
} else {
|
||||||
|
label1.remove_css_class("black-color-text");
|
||||||
|
label1.add_css_class("white-color-text");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
));
|
||||||
|
|
||||||
|
badge_box.append(&label0);
|
||||||
|
badge_box.append(&label_separator);
|
||||||
|
badge_box.append(&label1);
|
||||||
|
|
||||||
|
let boxedlist = gtk::ListBox::builder()
|
||||||
|
.selection_mode(gtk::SelectionMode::None)
|
||||||
|
.halign(gtk::Align::Center)
|
||||||
|
.margin_start(10)
|
||||||
|
.margin_end(10)
|
||||||
|
.margin_bottom(10)
|
||||||
|
.margin_top(10)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
boxedlist.add_css_class("boxed-list");
|
||||||
|
boxedlist.append(&badge_box);
|
||||||
|
group_size.add_widget(&boxedlist);
|
||||||
|
boxedlist
|
||||||
|
}
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
use adw::gio::SimpleAction;
|
|
||||||
use adw::prelude::*;
|
use adw::prelude::*;
|
||||||
use gtk::glib::*;
|
use gtk::glib::*;
|
||||||
use gtk::*;
|
use gtk::*;
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
|
use crate::build_ui::create_color_badge;
|
||||||
|
|
||||||
pub fn main_update_page(
|
pub fn main_update_page(
|
||||||
apt_update_button: &Rc<RefCell<Button>>,
|
apt_update_button: &Rc<RefCell<Button>>,
|
||||||
initiated_by_main: &Rc<RefCell<bool>>,
|
initiated_by_main: &Rc<RefCell<bool>>,
|
||||||
theme_changed_action: &gio::SimpleAction,
|
theme_changed_action: &gio::SimpleAction,
|
||||||
|
update_sys_tray: &gio::SimpleAction,
|
||||||
) -> gtk::Box {
|
) -> gtk::Box {
|
||||||
let main_box = Box::builder()
|
let main_box = Box::builder()
|
||||||
.hexpand(true)
|
.hexpand(true)
|
||||||
@ -16,23 +18,137 @@ pub fn main_update_page(
|
|||||||
.orientation(Orientation::Vertical)
|
.orientation(Orientation::Vertical)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
let bottom_icon = gtk::Image::builder()
|
let header_box = Box::builder()
|
||||||
.pixel_size(128)
|
|
||||||
.halign(Align::Center)
|
|
||||||
.hexpand(true)
|
.hexpand(true)
|
||||||
.icon_name("tux-symbolic")
|
.vexpand(true)
|
||||||
.margin_start(10)
|
.halign(Align::Center)
|
||||||
.margin_end(10)
|
.orientation(Orientation::Horizontal)
|
||||||
.margin_bottom(20)
|
.build();
|
||||||
.margin_top(20)
|
|
||||||
|
let header_label = gtk::Label::builder()
|
||||||
|
.label(t!("main_page_header_label_no_label"))
|
||||||
|
.build();
|
||||||
|
header_label.add_css_class("size-35-bold-text");
|
||||||
|
|
||||||
|
let updater_icon = gtk::Image::builder()
|
||||||
|
.pixel_size(128)
|
||||||
|
.icon_name("update-none")
|
||||||
|
.margin_start(5)
|
||||||
|
.margin_end(5)
|
||||||
|
.margin_bottom(5)
|
||||||
|
.margin_top(5)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
let update_badge_box = gtk::Box::builder()
|
let update_badge_box = gtk::Box::builder()
|
||||||
.hexpand(true)
|
.hexpand(true)
|
||||||
.vexpand(true)
|
.vexpand(true)
|
||||||
|
.halign(Align::Center)
|
||||||
|
.valign(Align::Center)
|
||||||
.orientation(Orientation::Vertical)
|
.orientation(Orientation::Vertical)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
let update_badge_box_size_group = SizeGroup::new(SizeGroupMode::Both);
|
||||||
|
let update_badge_box_size_group0 = SizeGroup::new(SizeGroupMode::Both);
|
||||||
|
let update_badge_box_size_group1 = SizeGroup::new(SizeGroupMode::Both);
|
||||||
|
|
||||||
|
update_badge_box.append(&create_color_badge(
|
||||||
|
&t!("update_badge_box_total_label"),
|
||||||
|
&t!("pikman_indicator_flatpak_item_label_calculating"),
|
||||||
|
"background-accent-bg",
|
||||||
|
&theme_changed_action,
|
||||||
|
&update_badge_box_size_group,
|
||||||
|
&update_badge_box_size_group0,
|
||||||
|
&update_badge_box_size_group1,
|
||||||
|
));
|
||||||
|
//
|
||||||
|
update_badge_box.append(&create_color_badge(
|
||||||
|
&t!("update_badge_box_apt_label"),
|
||||||
|
&t!("pikman_indicator_flatpak_item_label_calculating"),
|
||||||
|
"background-accent-bg",
|
||||||
|
&theme_changed_action,
|
||||||
|
&update_badge_box_size_group,
|
||||||
|
&update_badge_box_size_group0,
|
||||||
|
&update_badge_box_size_group1,
|
||||||
|
));
|
||||||
|
//
|
||||||
|
update_badge_box.append(&create_color_badge(
|
||||||
|
&t!("update_badge_box_flatpak_label"),
|
||||||
|
&t!("pikman_indicator_flatpak_item_label_calculating"),
|
||||||
|
"background-accent-bg",
|
||||||
|
&theme_changed_action,
|
||||||
|
&update_badge_box_size_group,
|
||||||
|
&update_badge_box_size_group0,
|
||||||
|
&update_badge_box_size_group1,
|
||||||
|
));
|
||||||
|
|
||||||
|
update_sys_tray.connect_activate(clone!(
|
||||||
|
#[strong]
|
||||||
|
update_badge_box,
|
||||||
|
#[strong]
|
||||||
|
updater_icon,
|
||||||
|
#[strong]
|
||||||
|
header_label,
|
||||||
|
#[strong]
|
||||||
|
theme_changed_action,
|
||||||
|
move |_, param| {
|
||||||
|
let array: &[i32] = param.unwrap().fixed_array().unwrap();
|
||||||
|
let vec = array.to_vec();
|
||||||
|
let apt_update_count = vec[0];
|
||||||
|
let flatpak_update_count = vec[1];
|
||||||
|
let total_count = apt_update_count + flatpak_update_count;
|
||||||
|
if total_count > 1 {
|
||||||
|
updater_icon.set_icon_name(Some("update-high".into()));
|
||||||
|
header_label.set_label(&t!("main_page_header_label_yes_label"));
|
||||||
|
} else {
|
||||||
|
updater_icon.set_icon_name(Some("update-none".into()));
|
||||||
|
header_label.set_label(&t!("main_page_header_label_no_label"));
|
||||||
|
}
|
||||||
|
//
|
||||||
|
while let Some(widget) = update_badge_box.last_child() {
|
||||||
|
update_badge_box.remove(&widget);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
update_badge_box.append(&create_color_badge(
|
||||||
|
&t!("update_badge_box_total_label"),
|
||||||
|
&match total_count {
|
||||||
|
-2 => t!("pikman_indicator_flatpak_item_label_calculating").into(),
|
||||||
|
_ => total_count.to_string(),
|
||||||
|
},
|
||||||
|
"background-accent-bg",
|
||||||
|
&theme_changed_action,
|
||||||
|
&update_badge_box_size_group,
|
||||||
|
&update_badge_box_size_group0,
|
||||||
|
&update_badge_box_size_group1,
|
||||||
|
));
|
||||||
|
//
|
||||||
|
update_badge_box.append(&create_color_badge(
|
||||||
|
&t!("update_badge_box_apt_label"),
|
||||||
|
&match apt_update_count {
|
||||||
|
-1 => t!("pikman_indicator_flatpak_item_label_calculating").into(),
|
||||||
|
_ => apt_update_count.to_string(),
|
||||||
|
},
|
||||||
|
"background-accent-bg",
|
||||||
|
&theme_changed_action,
|
||||||
|
&update_badge_box_size_group,
|
||||||
|
&update_badge_box_size_group0,
|
||||||
|
&update_badge_box_size_group1,
|
||||||
|
));
|
||||||
|
//
|
||||||
|
update_badge_box.append(&create_color_badge(
|
||||||
|
&t!("update_badge_box_flatpak_label"),
|
||||||
|
&match flatpak_update_count {
|
||||||
|
-1 => t!("pikman_indicator_flatpak_item_label_calculating").into(),
|
||||||
|
_ => flatpak_update_count.to_string(),
|
||||||
|
},
|
||||||
|
"background-accent-bg",
|
||||||
|
&theme_changed_action,
|
||||||
|
&update_badge_box_size_group,
|
||||||
|
&update_badge_box_size_group0,
|
||||||
|
&update_badge_box_size_group1,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
));
|
||||||
|
|
||||||
let bottom_bar = Box::builder().valign(Align::End).build();
|
let bottom_bar = Box::builder().valign(Align::End).build();
|
||||||
|
|
||||||
let update_button = Button::builder()
|
let update_button = Button::builder()
|
||||||
@ -42,7 +158,7 @@ pub fn main_update_page(
|
|||||||
.margin_start(10)
|
.margin_start(10)
|
||||||
.margin_end(30)
|
.margin_end(30)
|
||||||
.margin_bottom(15)
|
.margin_bottom(15)
|
||||||
.label(t!("update_button_label"))
|
.label(t!("update_button_main_label"))
|
||||||
.build();
|
.build();
|
||||||
update_button.add_css_class("destructive-action");
|
update_button.add_css_class("destructive-action");
|
||||||
|
|
||||||
@ -59,8 +175,11 @@ pub fn main_update_page(
|
|||||||
|
|
||||||
bottom_bar.append(&update_button);
|
bottom_bar.append(&update_button);
|
||||||
|
|
||||||
|
header_box.append(&updater_icon);
|
||||||
|
header_box.append(&header_label);
|
||||||
|
|
||||||
|
main_box.append(&header_box);
|
||||||
main_box.append(&update_badge_box);
|
main_box.append(&update_badge_box);
|
||||||
main_box.append(&bottom_icon);
|
|
||||||
main_box.append(&bottom_bar);
|
main_box.append(&bottom_bar);
|
||||||
|
|
||||||
main_box
|
main_box
|
||||||
|
@ -96,6 +96,11 @@
|
|||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.size-35-bold-text {
|
||||||
|
font-weight: 800;
|
||||||
|
font-size: 35px;
|
||||||
|
}
|
||||||
|
|
||||||
.disable-outline {
|
.disable-outline {
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user