feat: support waydroid (#687)

This commit is contained in:
SteveLauC
2024-02-16 11:57:53 +08:00
committed by GitHub
parent e4085e03eb
commit 7a3f3a8905
3 changed files with 48 additions and 1 deletions

View File

@@ -147,6 +147,7 @@ pub enum Step {
Vcpkg,
Vim,
Vscode,
Waydroid,
Winget,
Wsl,
WslUpdate,

View File

@@ -235,6 +235,7 @@ fn run() -> Result<()> {
unix::run_brew_formula(&ctx, unix::BrewVariant::Path)
})?;
runner.execute(Step::Lure, "LURE", || linux::run_lure_update(&ctx))?;
runner.execute(Step::Waydroid, "Waydroid", || linux::run_waydroid(&ctx))?;
}
#[cfg(target_os = "macos")]

View File

@@ -10,7 +10,7 @@ use crate::error::{SkipStep, TopgradeError};
use crate::execution_context::ExecutionContext;
use crate::steps::generic::is_wsl;
use crate::steps::os::archlinux;
use crate::terminal::print_separator;
use crate::terminal::{print_separator, prompt_yesno};
use crate::utils::{require, require_option, which, PathExt, REQUIRE_SUDO};
use crate::{Step, HOME_DIR};
@@ -1020,6 +1020,51 @@ pub fn run_lure_update(ctx: &ExecutionContext) -> Result<()> {
exe.status_checked()
}
pub fn run_waydroid(ctx: &ExecutionContext) -> Result<()> {
let sudo = require_option(ctx.sudo().as_ref(), REQUIRE_SUDO.to_string())?;
let waydroid = require("waydroid")?;
let status = ctx.run_type().execute(&waydroid).arg("status").output_checked_utf8()?;
// example output of `waydroid status`:
//
// ```sh
// $ waydroid status
// Session: RUNNING
// Container: RUNNING
// Vendor type: MAINLINE
// IP address: 192.168.240.112
// Session user: w568w(1000)
// Wayland display: wayland-0
// ```
//
// ```sh
// $ waydroid status
// Session: STOPPED
// Vendor type: MAINLINE
// ```
let session = status
.stdout
.lines()
.find(|line| line.contains("Session:"))
.expect("the output of `waydroid status` should contain `Session:`");
let is_container_running = session.contains("RUNNING");
let assume_yes = ctx.config().yes(Step::Waydroid);
print_separator("Waydroid");
if is_container_running && !assume_yes {
let update_allowed =
prompt_yesno("Going to execute `waydroid upgrade`, which would STOP the running container, is this ok?")?;
if !update_allowed {
return Err(SkipStep("Skip the Waydroid step because the user don't want to proceed".to_string()).into());
}
}
ctx.run_type()
.execute(sudo)
.arg(&waydroid)
.arg("upgrade")
.status_checked()
}
#[cfg(test)]
mod tests {
use super::*;