Skip to content

Commit

Permalink
wip: reduce errors in gui feature
Browse files Browse the repository at this point in the history
  • Loading branch information
cilki committed Dec 31, 2023
1 parent 86fd80d commit 3bbbd0b
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 21 deletions.
82 changes: 82 additions & 0 deletions goldboot/src/foundry/molds/android/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
use super::{CastImage, DefaultSource};
use crate::cli::prompt::Prompt;
use crate::foundry::options::hostname::Hostname;
use crate::foundry::options::unix_account::RootPassword;
use crate::foundry::qemu::QemuBuilder;
use crate::foundry::Foundry;
use crate::wait;
use crate::{
foundry::{sources::ImageSource, FoundryWorker},
wait_screen_rect,
};
use anyhow::bail;
use anyhow::Result;
use dialoguer::theme::Theme;
use log::{debug, info};
use serde::{Deserialize, Serialize};
use std::io::{BufRead, BufReader};
use validator::Validate;

/// This `Mold` produces an AOSP image.
#[derive(Clone, Serialize, Deserialize, Validate, Debug)]
pub struct Android {}

impl Default for Android {
fn default() -> Self {
Self {}
}
}

// TODO proc macro
impl Prompt for Android {
fn prompt(&mut self, _foundry: &Foundry, _theme: Box<dyn Theme>) -> Result<()> {
todo!()
}
}

impl DefaultSource for Android {
fn default_source(&self) -> ImageSource {
todo!()
}
}

impl CastImage for Android {
fn cast(&self, worker: &FoundryWorker) -> Result<()> {
let mut qemu = QemuBuilder::new(&worker).start()?;

// Send boot command
#[rustfmt::skip]
qemu.vnc.run(vec![
// Initial wait
wait!(30),
// Wait for login
wait_screen_rect!("5b3ca88689e9d671903b3040889c7fa1cb5f244a", 100, 0, 1024, 400),
// Configure root password
// enter!("passwd"), enter!(self.root_password), enter!(self.root_password),
])?;

// Wait for SSH
let mut ssh = qemu.ssh()?;

// Run install script
info!("Running base installation");
match ssh.upload_exec(
include_bytes!("install.sh"),
vec![
// ("GB_MIRRORLIST", &self.format_mirrorlist()),
// ("GB_ROOT_PASSWORD", &self.root_password),
],
) {
Ok(0) => debug!("Installation completed successfully"),
_ => bail!("Installation failed"),
}

// Run provisioners
// self.provisioners.run(&mut ssh)?;

// Shutdown
ssh.shutdown("poweroff")?;
qemu.shutdown_wait()?;
Ok(())
}
}
2 changes: 1 addition & 1 deletion goldboot/src/gui/apply_image.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use glib::clone;
use goldboot::{image::ImageHandle, library::ImageLibrary};
use goldboot_image::ImageHandle;
use gtk::glib;
use gtk4 as gtk;
use gtk4::prelude::*;
Expand Down
6 changes: 4 additions & 2 deletions goldboot/src/gui/confirm.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
use gtk::{prelude::*, *};
use gtk4 as gtk;

use crate::gui::{apply_image, load_png};

pub fn init(window: &'static ApplicationWindow, image_id: String, device_id: String) {
let container = gtk::Box::new(gtk::Orientation::Vertical, 5);

{
let logo = crate::load_png(include_bytes!("../res/logo-512.png").to_vec(), 1603, 512);
let logo = load_png(include_bytes!("../res/logo-512.png").to_vec(), 1603, 512);
container.append(&logo);
}
{
Expand All @@ -27,7 +29,7 @@ pub fn init(window: &'static ApplicationWindow, image_id: String, device_id: Str
progress.set_fraction(progress.fraction() + 0.01);
if progress.fraction() >= 1.0 {
window.remove_controller(controller);
crate::apply_image::init(window, image_id.clone(), device_id.clone());
apply_image::init(window, image_id.clone(), device_id.clone());
}
}
gdk::Key::Escape => std::process::exit(0),
Expand Down
2 changes: 1 addition & 1 deletion goldboot/src/gui/main.rs → goldboot/src/gui/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ pub mod confirm;
pub mod select_device;
pub mod select_image;

fn main() {
fn load_gui() {
// Configure logging
env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));

Expand Down
17 changes: 7 additions & 10 deletions goldboot/src/gui/select_device.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use crate::gui::load_png;
use glib::clone;
use gtk::glib;
use gtk4 as gtk;
Expand All @@ -6,15 +7,11 @@ use log::info;
use std::error::Error;
use ubyte::ToByteUnit;

#[derive(rust_embed::RustEmbed)]
#[folder = "res/select_device/"]
struct Resources;

pub fn init(window: &'static gtk::ApplicationWindow, image_id: String) {
let container = gtk::Box::new(gtk::Orientation::Vertical, 5);

{
let logo = crate::load_png(include_bytes!("../res/logo-512.png").to_vec(), 1603, 512);
let logo = load_png(include_bytes!("../res/logo-512.png").to_vec(), 1603, 512);
container.append(&logo);
}
{
Expand All @@ -37,7 +34,7 @@ pub fn init(window: &'static gtk::ApplicationWindow, image_id: String) {
}

device_box.connect_row_activated(move |_, row| {
crate::confirm::init(
crate::gui::confirm::init(
&window,
image_id.clone(),
devices[row.index() as usize].clone(),
Expand Down Expand Up @@ -67,16 +64,16 @@ fn create_device_row(device: &block_utils::Device) -> gtk::Box {
// Device icon
let device_image = match device.media_type {
block_utils::MediaType::SolidState => {
crate::load_png(Resources::get("ssd.png").unwrap().data.to_vec(), 32, 32)
load_png(Resources::get("ssd.png").unwrap().data.to_vec(), 32, 32)
}
block_utils::MediaType::Rotational => {
crate::load_png(Resources::get("hdd.png").unwrap().data.to_vec(), 32, 32)
load_png(Resources::get("hdd.png").unwrap().data.to_vec(), 32, 32)
}
block_utils::MediaType::NVME => {
crate::load_png(Resources::get("nvme.png").unwrap().data.to_vec(), 32, 32)
load_png(Resources::get("nvme.png").unwrap().data.to_vec(), 32, 32)
}
block_utils::MediaType::Ram => {
crate::load_png(Resources::get("ram.png").unwrap().data.to_vec(), 32, 32)
load_png(Resources::get("ram.png").unwrap().data.to_vec(), 32, 32)
}
_ => panic!(),
};
Expand Down
11 changes: 4 additions & 7 deletions goldboot/src/gui/select_image.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use crate::gui::load_png;
use gdk4 as gdk;
use gdk_pixbuf::PixbufLoader;
use glib::clone;
Expand All @@ -8,15 +9,11 @@ use gtk4::{prelude::*, EventControllerKey};
use log::info;
use ubyte::ToByteUnit;

#[derive(rust_embed::RustEmbed)]
#[folder = "res/select_image/"]
struct Resources;

pub fn init(window: &'static gtk::ApplicationWindow) {
let container = gtk::Box::new(gtk::Orientation::Vertical, 5);

{
let logo = crate::load_png(include_bytes!("../res/logo-512.png").to_vec(), 1603, 512);
let logo = load_png(include_bytes!("../res/logo-512.png").to_vec(), 1603, 512);
container.append(&logo);
}
{
Expand All @@ -39,7 +36,7 @@ pub fn init(window: &'static gtk::ApplicationWindow) {
image_box.connect_row_activated(move |_, row| {
let image_id = images[row.index() as usize].clone();
info!("Selected image: {}", image_id);
crate::select_device::init(&window, image_id);
crate::gui::select_device::init(&window, image_id);
});
}
{
Expand Down Expand Up @@ -101,7 +98,7 @@ fn create_image_row(image: &ImageHandle) -> gtk::Box {
if let Some(resource) =
Resources::get(&format!("{}.png", config.get_template_bases().unwrap()[0]))
{
let image = crate::load_png(resource.data.to_vec(), 32, 32);
let image = load_png(resource.data.to_vec(), 32, 32);
image.add_css_class("listIcon");
row.append(&image);
}
Expand Down

0 comments on commit 3bbbd0b

Please sign in to comment.