Skip to content

Commit

Permalink
use getenv to check if flatpak
Browse files Browse the repository at this point in the history
  • Loading branch information
takotori committed Jun 11, 2024
1 parent 165e9ed commit a44ec94
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 41 deletions.
62 changes: 28 additions & 34 deletions keyboard_plugin/src/backend/gnome.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
use std::process::Command;

use glib::{Variant, VariantTy};
use gtk::prelude::SettingsExtManual;
use glib::{getenv, Variant, VariantTy};
#[cfg(debug_assertions)]
use re_set_lib::{utils::macros::ErrorLevel, write_log_to_file};
use re_set_lib::ERROR;
Expand All @@ -11,31 +10,32 @@ use crate::keyboard_layout::KeyboardLayout;
pub fn get_saved_layouts_gnome(all_keyboards: &[KeyboardLayout]) -> Vec<KeyboardLayout> {
let mut kb = vec![];

let mut result = Command::new("dconf")
.args(&["read", "/org/gnome/desktop/input-sources/sources"])
.output();
if result.is_err() {
return kb;
}
let mut output = result.unwrap();
let mut layout_variant = String::from_utf8(output.stdout).unwrap();

if layout_variant.contains("@a(ss)") {
let result;
if getenv("container").is_none() {
dbg!("not flatpak");
result = Command::new("dconf")
.args(&["read", "/org/gnome/desktop/input-sources/sources"])
.output();
} else {
dbg!("flatpak");
result = Command::new("flatpak-spawn")
.args(&["--host", "dconf", "read", "/org/gnome/desktop/input-sources/sources"])
.output();
if result.is_err() {
return kb;
}
output = result.unwrap();
layout_variant = String::from_utf8(output.stdout).unwrap();
}
if result.is_err() {
dbg!("result error");
return kb;
}
let output = result.unwrap();
let layout_variant = String::from_utf8(output.stdout).unwrap();

let layout_variant = Variant::parse(Some(&VariantTy::new("a(ss)").unwrap()), &layout_variant);
if layout_variant.is_err() {
dbg!("couldnt parse layout variant");
return kb;
}
let layout_variant = layout_variant.unwrap();
dbg!(&layout_variant);
let layouts = layout_variant.get::<Vec<(String, String)>>().unwrap();
for layout in layouts {
let kb_layout: Vec<&KeyboardLayout> = if layout.1.contains("+") {
Expand All @@ -59,11 +59,11 @@ pub fn get_saved_layouts_gnome(all_keyboards: &[KeyboardLayout]) -> Vec<Keyboard
kb
}

pub fn write_to_config_gnome(layouts: Vec<KeyboardLayout>) {
pub fn write_to_config_gnome(layouts: &Vec<KeyboardLayout>) {
let mut all_layouts = vec![];
for x in layouts {
let mut layout_string = format!("('xkb', '{}", x.name.clone());
if let Some(var) = x.variant {
if let Some(var) = &x.variant {
layout_string += &format!("+{}", var);
}
layout_string += "')";
Expand All @@ -74,27 +74,21 @@ pub fn write_to_config_gnome(layouts: Vec<KeyboardLayout>) {
all_layouts.insert_str(0, "[");
all_layouts.push_str("]");

let result = Command::new("dconf")
.args(&["read", "/org/gnome/desktop/input-sources/sources"])
.output();
if result.is_err() {
return;
}
let output = result.unwrap();
let layout_variant = String::from_utf8(output.stdout).unwrap();

if layout_variant.contains("@a(ss)") {
let result = Command::new("flatpak-spawn")
.args(&["--host", "dconf", "write", "/org/gnome/desktop/input-sources/sources", all_layouts.as_str()])
if getenv("container").is_none() {
dbg!("not flatpak");
let result = Command::new("dconf")
.args(&["write", "/org/gnome/desktop/input-sources/sources", all_layouts.as_str()])
.output();
if result.is_err() {
ERROR!("Failed to write layouts", ErrorLevel::PartialBreakage);
}
} else {
let result = Command::new("dconf")
.args(&["write", "/org/gnome/desktop/input-sources/sources", all_layouts.as_str()])
} else {
dbg!("flatpak");
let result = Command::new("flatpak-spawn")
.args(&["--host", "dconf", "write", "/org/gnome/desktop/input-sources/sources", all_layouts.as_str()])
.output();
if result.is_err() {
dbg!("Failed to write with flatpak");
ERROR!("Failed to write layouts", ErrorLevel::PartialBreakage);
}
}
Expand Down
2 changes: 1 addition & 1 deletion keyboard_plugin/src/backend/hyprland.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ pub fn get_saved_layouts_hyprland(all_keyboards: &[KeyboardLayout]) -> Vec<Keybo
kb
}

pub fn write_to_config_hyprland(layouts: Vec<KeyboardLayout>) {
pub fn write_to_config_hyprland(layouts: &Vec<KeyboardLayout>) {
let path;
#[allow(clippy::borrow_interior_mutable_const)]
if let Some(test) = CONFIG.get("Keyboard").unwrap().get("path") {
Expand Down
2 changes: 1 addition & 1 deletion keyboard_plugin/src/backend/kde.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ pub fn get_saved_layouts_kde(all_keyboards: &[KeyboardLayout]) -> Vec<KeyboardLa
kb
}

pub fn write_to_config_kde(layouts: Vec<KeyboardLayout>) {
pub fn write_to_config_kde(layouts: &Vec<KeyboardLayout>) {
let mut layout_string = String::new();
let mut variant_string = String::new();
for x in layouts.iter() {
Expand Down
20 changes: 15 additions & 5 deletions keyboard_plugin/src/backend/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,12 @@ pub extern "C" fn dbus_interface(cross: Arc<RwLock<CrossWrapper>>) {
pub fn get_saved_layouts() -> Vec<KeyboardLayout> {
let all_keyboards = get_keyboard_list_backend();

match get_environment().as_str() {
let env = get_environment();
if env.contains(GNOME) {
return get_saved_layouts_gnome(&all_keyboards);
}

match env.as_str() {
HYPRLAND => {
get_saved_layouts_hyprland(&all_keyboards)
}
Expand All @@ -45,15 +50,20 @@ pub fn get_saved_layouts() -> Vec<KeyboardLayout> {
}

fn write_to_config(layouts: Vec<KeyboardLayout>) {
match get_environment().as_str() {
let env = get_environment();
if env.contains(GNOME) {
return write_to_config_gnome(&layouts);
}

match env.as_str() {
HYPRLAND => {
write_to_config_hyprland(layouts);
write_to_config_hyprland(&layouts);
}
GNOME => {
write_to_config_gnome(layouts);
write_to_config_gnome(&layouts);
}
KDE => {
write_to_config_kde(layouts);
write_to_config_kde(&layouts);
}
_ => {}
}
Expand Down

0 comments on commit a44ec94

Please sign in to comment.