From d0e1212700910e6e5ca069157774228ec4e01095 Mon Sep 17 00:00:00 2001 From: Roey Darwish Dror Date: Mon, 11 Apr 2022 20:15:18 +0300 Subject: [PATCH] Don't run gnome shell extensions if unneeded (fix #835) (#893) * Don't call gnome shell extensions if it's not registered in dbus (fix #835) * fix * Execute-elevated (#892) * Introduce the execute elevated method (fix #885) * fmt * Fix nix with doas * Bad import * No gnome in macOS * Unused imports --- src/main.rs | 1 + src/steps/os/unix.rs | 27 +++++++++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 70da0c4e..455268af 100644 --- a/src/main.rs +++ b/src/main.rs @@ -280,6 +280,7 @@ fn run() -> Result<()> { runner.execute(Step::Tmux, "tmux", || tmux::run_tpm(&base_dirs, run_type))?; runner.execute(Step::Tldr, "TLDR", || unix::run_tldr(run_type))?; runner.execute(Step::Pearl, "pearl", || unix::run_pearl(run_type))?; + #[cfg(not(target_os = "macos"))] runner.execute(Step::GnomeShellExtensions, "Gnome Shell Extensions", || { unix::upgrade_gnome_extensions(&ctx) })?; diff --git a/src/steps/os/unix.rs b/src/steps/os/unix.rs index a8bc9d01..52df0935 100644 --- a/src/steps/os/unix.rs +++ b/src/steps/os/unix.rs @@ -2,11 +2,11 @@ use crate::error::SkipStep; use crate::error::TopgradeError; use crate::execution_context::ExecutionContext; -#[cfg(target_os = "macos")] -use crate::executor::CommandExt; -use crate::executor::{Executor, ExecutorExitStatus, RunType}; +use crate::executor::{CommandExt, Executor, ExecutorExitStatus, RunType}; use crate::terminal::print_separator; -use crate::utils::{require, require_option, PathExt}; +#[cfg(not(target_os = "macos"))] +use crate::utils::require_option; +use crate::utils::{require, PathExt}; use crate::Step; use anyhow::Result; use directories::BaseDirs; @@ -135,12 +135,31 @@ pub fn run_fish_plug(ctx: &ExecutionContext) -> Result<()> { ctx.run_type().execute(&fish).args(&["-c", "plug update"]).check_run() } +#[cfg(not(target_os = "macos"))] pub fn upgrade_gnome_extensions(ctx: &ExecutionContext) -> Result<()> { let gdbus = require("gdbus")?; require_option( env::var("XDG_CURRENT_DESKTOP").ok().filter(|p| p.contains("GNOME")), "Desktop doest not appear to be gnome".to_string(), )?; + let output = Command::new("gdbus") + .args(&[ + "call", + "--session", + "--dest", + "org.freedesktop.DBus", + "--object-path", + "/org/freedesktop/DBus", + "--method", + "org.freedesktop.DBus.ListActivatableNames", + ]) + .check_output()?; + + debug!("Checking for gnome extensions: {}", output); + if !output.contains("org.gnome.Shell.Extensions") { + return Err(SkipStep(String::from("Gnome shell extensions are unregistered in DBus")).into()); + } + print_separator("Gnome Shell extensions"); ctx.run_type()