| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- 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);
- }
- });
- }
|