[gnome] Move to Grimble tiling manager
This commit is contained in:
@ -0,0 +1,76 @@
|
||||
import Gio from 'gi://Gio';
|
||||
import GLib from 'gi://GLib';
|
||||
/** Launch the given app
|
||||
*
|
||||
* @param {string[]} command
|
||||
* @returns
|
||||
*/
|
||||
export function launchApp(command) {
|
||||
try {
|
||||
Gio.Subprocess.new(command, Gio.SubprocessFlags.NONE);
|
||||
return true;
|
||||
} catch (e) {
|
||||
console.warn(`Failed launch : ${e}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/** Load the configuration stored at `name`.
|
||||
*
|
||||
* @param {string} name configuration file path
|
||||
* @param {(a: any) => void} callback a function called when the result is returned
|
||||
* @param {() => void} errorCallback function called to handle errors
|
||||
* @returns
|
||||
*/
|
||||
export function loadConfiguration(name, callback, errorCallback) {
|
||||
const f = Gio.File.new_for_path(name);
|
||||
f.load_contents_async(null, (file, res) => {
|
||||
try {
|
||||
let r = file?.load_contents_finish(res);
|
||||
if (!r || !r[0] || !r[1].length) {
|
||||
errorCallback();
|
||||
return;
|
||||
}
|
||||
const conf = JSON.parse(new TextDecoder().decode(r[1]));
|
||||
callback(conf);
|
||||
} catch (e) {
|
||||
if (e instanceof Gio.IOErrorEnum ||
|
||||
e.matches?.(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
|
||||
errorCallback?.();
|
||||
|
||||
else
|
||||
logError(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
/** Save the keybinding configuration stored in `obj` in the file `name`.
|
||||
*
|
||||
* @param {string} name configuration file name
|
||||
* @param {object} obj Object to save
|
||||
*/
|
||||
export function saveConfiguration(name, obj) {
|
||||
const userPath = GLib.get_user_config_dir();
|
||||
const parentPath = GLib.build_filenamev([userPath, '/grimble/config']);
|
||||
const parent = Gio.File.new_for_path(parentPath);
|
||||
try {
|
||||
parent.make_directory_with_parents(null);
|
||||
} catch (e) {
|
||||
if (e.code !== Gio.IOErrorEnum.EXISTS)
|
||||
throw e;
|
||||
}
|
||||
const path = GLib.build_filenamev([parentPath, `/${name}`]);
|
||||
const f = Gio.File.new_for_path(path);
|
||||
try {
|
||||
f.create(Gio.FileCreateFlags.NONE, null);
|
||||
} catch (e) {
|
||||
if (e.code !== Gio.IOErrorEnum.EXISTS)
|
||||
throw e;
|
||||
}
|
||||
const data = new TextEncoder().encode(JSON.stringify(obj));
|
||||
f.replace_contents_async(data, null, false, Gio.FileCreateFlags.REPLACE_DESTINATION, null, (file, res) => {
|
||||
try {
|
||||
file?.replace_contents_finish(res);
|
||||
} catch (e) {
|
||||
logError(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user