dbusErrors: Add utility module for handling remote errors
We sometimes return custom D-Bus errors. Right now those errors are ad-hoc, which means receivers don't have a proper way of checking whether a thrown GLib.Error corresponds to a particular remote error. In order to change that, we should define proper error enums and domains, and register them with GDBus, so that there is an automatic mapping between D-Bus errors and GLib.Errors. The new module doesn't export any domains or enums yet, but provides internal tooling to make these exports more convenient. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3159>
This commit is contained in:
parent
a5d33026f0
commit
ca0ee2ae90
@ -17,6 +17,7 @@
|
||||
<file>misc/animationUtils.js</file>
|
||||
<file>misc/config.js</file>
|
||||
<file>misc/dateUtils.js</file>
|
||||
<file>misc/dbusErrors.js</file>
|
||||
<file>misc/dbusUtils.js</file>
|
||||
<file>misc/dependencies.js</file>
|
||||
<file>misc/errorUtils.js</file>
|
||||
|
29
js/misc/dbusErrors.js
Normal file
29
js/misc/dbusErrors.js
Normal file
@ -0,0 +1,29 @@
|
||||
/* eslint-disable no-unused-vars */
|
||||
import GLib from 'gi://GLib';
|
||||
import Gio from 'gi://Gio';
|
||||
|
||||
function decamelcase(str, sep) {
|
||||
return str.replace(/(.)([A-Z])/g, `$1${sep}$2`);
|
||||
}
|
||||
|
||||
function registerErrorDomain(domain, errorNames, prefix = 'org.gnome.Shell') {
|
||||
const domainName =
|
||||
`shell-${decamelcase(domain, '-').toLowerCase()}-error`;
|
||||
const quark = GLib.quark_from_string(domainName);
|
||||
|
||||
for (const [code, name] of errorNames.entries()) {
|
||||
Gio.dbus_error_register_error(quark,
|
||||
code, `${prefix}.${domain}.Error.${name}`);
|
||||
}
|
||||
return quark;
|
||||
}
|
||||
|
||||
function createErrorEnum(errorNames) {
|
||||
const obj = {};
|
||||
|
||||
for (const [code, name] of errorNames.entries()) {
|
||||
const propName = decamelcase(name, '_').toUpperCase();
|
||||
obj[propName] = code;
|
||||
}
|
||||
return obj;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user