Review of "DualShell" version 1.0 (1)

Details Page Preview

Control your system using a gamepad - navigate desktop, launch apps, control volume, and more

Extension Homepage
https://codeberg.org/inbalboa/gnome-dualshell

No comments.

FAQ

Files

Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.

Shexli (experimental) error 2 warning 5 manual_review 1

Shexli found 8 issues that may need reviewer attention.

EGO-C49-003 error

extensions targeting GNOME 49 must not call maximize or unmaximize with Meta.MaximizeFlags

This extension explicitly targets GNOME Shell 49 but still passes `Meta.MaximizeFlags` to `maximize()` or `unmaximize()`.

Meta.Window

  • actions.js:253
    win.maximize(Meta.MaximizeFlags.BOTH)
  • actions.js:250
    win.unmaximize(Meta.MaximizeFlags.BOTH)

EGO-C49-004 error

extensions targeting GNOME 49 must not call Meta.Window.get_maximized

This extension explicitly targets GNOME Shell 49 but still calls removed `Meta.Window.get_maximized()`.

Meta.Window

  • actions.js:249
    win.get_maximized()

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).

Code must not be obfuscated

  • actionsCatalog.js
    short identifier ratio: 75%, identifiers scored: 59

EGO-X-004 warning

extensions should avoid synchronous file IO in shell code

Shell code should avoid synchronous file IO APIs like `GLib.file_get_contents()` and `Gio.File.load_contents()`.

File Operations

  • gamecontrollerdb.js:32
    DB_FILE.load_contents(null)
  • mappings.js:101
    GLib.file_get_contents('/proc/bus/input/devices')

EGO-A-004 warning

extension files should not contain excessive ungated console logging

File contains 6 ungated console.log/warn/error calls (threshold: 5).

No excessive logging

  • logger.js:42
    console.log(this._formatMessage(LogLevel.DEBUG, message, context))
  • logger.js:48
    console.log(this._formatMessage(LogLevel.INFO, message, context))
  • 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: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.

Destroy all objects

  • extension.js:200
    this._devicesSection = new PopupMenu.PopupMenuSection()
  • extension.js:203
            this._noDevicesMenuItem = new PopupMenu.PopupMenuItem(_('No gamepads connected'), {
                reactive: false,
                can_focus: false,
            })
  • extension.js:187
            this._panelIcon = new St.Icon({
                gicon: this._icons.getCustomIcon('icon', true),
                style_class: 'system-status-icon gamepad-panel-icon',
            })

EGO-L-005 warning

owned object references should be released in disable()

Owned references that are cleaned up in `disable()` should also be released with `null` or `undefined`.

Destroy all objects

  • extension.js:200
    this._devicesSection = new PopupMenu.PopupMenuSection()
  • extension.js:203
            this._noDevicesMenuItem = new PopupMenu.PopupMenuItem(_('No gamepads connected'), {
                reactive: false,
                can_focus: false,
            })

EGO-L-006 warning

preferences classes should not retain window-scoped objects on instance fields without close-request cleanup

Preferences code stores window-scoped objects on the exported prefs class without `close-request` cleanup.

Destroy all objects

  • prefs.js:35
    this._settings = this.getSettings()
  • prefs.js:37
    this._applicationChooser = new ApplicationChooser(Array.from(this._appCache.values()))
  • prefs.js:38
    this._available_actions = translatedActions()
  • prefs.js:39
    this._button_display_names = configurableButtonNames()

All Versions

Version Status
1.2.0 (3) Unreviewed
1.1.0 (2) Rejected
1.0 (1) Rejected

Previous Reviews on this Version

JustPerfection waiting for author
404 URL. Where is the git URL? Is this code generated by AI? If so, we have a rule for that: [EGO Review Guidelines: AI](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#extensions-must-not-be-ai-generated)
inbalboa posted a review
Sorry, the actual URL is https://codeberg.org/inbalboa/gnome-dualshell No, it's not AI-generated. It took me over a year to develop this. I'm currently fixing the errors and warning I saw from Shexli. You can reject this version. I'll upload the version with fixes later. Thank you.
JustPerfection rejected
Newer version reviewed.