Control your system using a gamepad - navigate desktop, launch apps, control volume, and more
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-A-001 manual_review
extension code must not be minified or obfuscated
File appears obfuscated: 75% of identifiers are 1–2 characters (avg length 4.8).
actionsCatalog.js
short identifier ratio: 75%, identifiers scored: 59
EGO-A-004 warning
extension files should not contain excessive ungated console logging
File contains 6 ungated console.log/warn/error calls (threshold: 5).
logger.js:64
console.error(`${formattedMessage}\n Error: ${error.message}\n Stack: ${error.stack}`)
logger.js:66
console.error(`${formattedMessage}\n Details: ${JSON.stringify(error)}`)
logger.js:68
console.error(formattedMessage)
logger.js:42
console.log(this._formatMessage(LogLevel.DEBUG, message, context))
logger.js:48
console.log(this._formatMessage(LogLevel.INFO, message, context))
logger.js:54
console.warn(this._formatMessage(LogLevel.WARN, message, context))
EGO-L-002 warning
objects created by extension should be destroyed in disable()
Objects assigned in `enable()` are missing matching `.destroy()` calls in `disable()` or its helper methods.
extension.js:202
this._devicesSection = new PopupMenu.PopupMenuSection()
extension.js:205
this._noDevicesMenuItem = new PopupMenu.PopupMenuItem(_('No gamepads connected'), {
reactive: false,
can_focus: false,
})
extension.js:189
this._panelIcon = new St.Icon({
gicon: this._icons.getCustomIcon('icon', true),
style_class: 'system-status-icon gamepad-panel-icon',
})
| Version | Status |
|---|---|
| 1.2.0 (3) | Unreviewed |
| 1.1.0 (2) | Rejected |
| 1.0 (1) | Rejected |
1. You cannot use old `imports` for the 45+ extensions. 2. Please use `connectObject()` and `disconnectObject()` so it is easier to track for cleanup (`extension.js` only). 3. You cannot create instance of objects in global scope: - line 158 `gamecontrollerdb.js` - line 115 `logger.js` - [EGO Review Guidelines: Initialization](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#only-use-initialization-for-static-resources) - [EGO Review Guidelines: Destroy](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#destroy-all-objects) 4. Please use aysnc for reading file content since you are in shell process (line 8 `mappings.js`): [Gio.File.load_contents_async](https://gjs-docs.gnome.org/gio20~2.0/gio.file#method-load_contents_async) 5. No need to use `this.initTranslations()` (line 25 `extension.js`): > Consider this method deprecated. > Only specify gettext-domain in metadata.json. > GNOME Shell can automatically initiate the translation for you > when it sees the gettext-domain key in metadata.json. [Port Guide 45: Extension Utils](https://gjs.guide/extensions/upgrading/gnome-shell-45.html#extensionutils) 6. You cannot ship binary files with GNOME Shell extensions (`gamecontrollerdb`).
Thank you. Two objections. 4. The call on mappings.js:8 is load_contents_async() — the exact method you mentioned. 6. gamecontrollerdb is not a binary file, it's a CSV file.
For 6, the file should be `gamecontrollerdb.csv` so the file format is obvious.