Review of "Fetelabs Task Bar" version 4.2.5 (9)

Details Page Preview

A single floating taskbar with rounded corners, big icons and grouped apps, for GNOME. Your app launcher, open windows, tray and clock sit in one bar at the bottom of the screen, and everything is adjustable in its settings. Water Panel is built in: the bar becomes a liquid audio visualizer that moves with whatever is playing and takes its colours from your wallpaper, and while Spotify plays the Fetelabs wordmark (a word of your own, JOLA by default, the live test tube and FETELABS) splashes through the water, its glossy paint drips filling with the music and falling into the waves, and every kick of the bass makes it throb, bounce and fling paint across the bar. Turn it off or tune it on the Water tab of the settings. It needs python3 with NumPy and parec (sudo apt install python3-numpy pulseaudio-utils); without them the bar still works, just without the water. A media player is built in too: back, play and next at the start of the bar, and a click away a mini player with the cover art, the controls floating on a tank of water that moves with the music in the cover's colours, while the bar's controls turn into a paint splash that plays to the vocals. Choose which media apps it follows in the Player tab; it can start your music at login (Spotify Liked Songs on shuffle) without the app's window getting in the way. The Show Desktop button is a live Dragon Ball whose liquid sloshes with the music (or any icon you like). A fork of Zorin Taskbar (v70), itself based on Dash to Panel, with the Fetelabs setup built in as the defaults. Turn off Dash to Panel, Dash to Dock or Zorin Taskbar before enabling it. By Fetelabs: fetelabs.ai · X @mostlyjola · Instagram @fetelabs Tips: USDC on Solana ONLY to Dox9t9toz7BwwHJaqqsTpt9J74DWkXidP921FJQgWGE5 (SOL, other tokens or other networks will be lost).

Extension Homepage
https://fetelabs.ai/#lab

No comments.

Diff Against

Files

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

Shexli (experimental) warning 4 manual_review 1

Shexli found 5 issues that may need reviewer attention.

EGO-A-001 manual_review

extension code must not be minified or obfuscated

File appears obfuscated: 57% of identifiers are 1–2 characters (avg length 3.1).

Code must not be obfuscated

  • logoDraw.js
    short identifier ratio: 57%, identifiers scored: 295

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

  • player.js:1184
    GLib.file_get_contents(file)
  • water/water.js:446
    GLib.file_get_contents(json)
  • water/wordText.js:21
    file.load_contents(null)

EGO-A-004 warning

extension files should not contain excessive ungated console logging

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

No excessive logging

  • water/water.js:78
    console.error(`Water Panel: cannot offer the power-up on D-Bus: ${e}`)
  • water/water.js:459
    console.error(`Water Panel: cannot play ${sound}: ${e}`)
  • water/water.js:531
    console.error(`Water Panel: cannot read the wordmark font: ${e}`)
  • water/water.js:656
    console.error(`Water Panel: cannot work out colours: ${e}\n${e?.stack}`)
  • water/water.js:869
    console.error(`Water Panel: cannot start analyzer: ${e}`)
  • water/water.js:448
    console.warn(`Water Panel: no aura envelope for ${sound} (run aura-envelope.py): ${e}`)
  • water/water.js:884
            console.warn('Water Panel: the audio analyzer keeps exiting. ' +
              'Check that python3, python3-numpy and parec (pulseaudio-utils) are installed.')

EGO-L-003 warning

signals connected by extension should be disconnected in disable()

Signals assigned in `enable()` are missing matching disconnect calls in `disable()` or its helper methods.

Disconnect all signals

  • player.js:339
    p.connect('changed', () => this.emit('changed'))
  • player.js:502
    this._timeline.connect('new-frame', () => this._frame())
  • player.js:783
        this.menu.connect('open-state-changed', (_m, open) => {
          if (open) this._tick()
          else this._stopTick()
          this._morph(open)
        })

EGO-L-004 warning

main loop sources should be removed in disable()

Main loop sources assigned in `enable()` are missing matching removals in `disable()` or its helper methods.

Remove main loop sources

  • player.js:916
        this._tickId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 1, () => {
          this._tick(true)
          return GLib.SOURCE_CONTINUE
        })

All Versions

Version Status
4.2.5 (9) Unreviewed
8 Rejected
7 Rejected
6 Rejected
5 Rejected
4 Rejected
3 Rejected
2 Rejected
1 Rejected