From f2601e68885b859e257868ef848722e3eb6ee990 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 17 Nov 2023 18:31:32 +0100 Subject: [PATCH] shellDBus: Await Eval() result The Eval() method currently evaluates the provided string, and returns the result immediately. This isn't useful when a promise is returned, which has become much more likely now that accessing any module requires import(). Simply await the result, to handle both sync and async code. Part-of: --- js/ui/shellDBus.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/js/ui/shellDBus.js b/js/ui/shellDBus.js index 12ca261c8..3b99224ce 100644 --- a/js/ui/shellDBus.js +++ b/js/ui/shellDBus.js @@ -56,17 +56,22 @@ export class GnomeShell { * If evaluation fails, then the return value will be * [false, JSON.stringify(exception)]; * - * @param {string} code A string containing JavaScript code - * @returns {Array} + * @async + * @param {...any} params - method parameters + * @param {Gio.DBusMethodInvocation} invocation - the invocation + * @returns {void} */ - Eval(code) { - if (!global.context.unsafe_mode) - return [false, '']; + async EvalAsync(params, invocation) { + if (!global.context.unsafe_mode) { + invocation.return_value(new GLib.Variant('(bs)', [false, ''])); + return; + } + const [code] = params; let returnValue; let success; try { - returnValue = JSON.stringify(eval(code)); + returnValue = JSON.stringify(await eval(code)); // A hack; DBus doesn't have null/undefined if (returnValue === undefined) returnValue = ''; @@ -75,7 +80,8 @@ export class GnomeShell { returnValue = `${e}`; success = false; } - return [success, returnValue]; + invocation.return_value( + new GLib.Variant('(bs)', [success, returnValue])); } /**