Review of "Voxtype Waveform" version 1

Details Page Preview

Audio waveform OSD and status indicator for the Voxtype push-to-talk dictation daemon. While you dictate it draws a floating waveform at the bottom of the screen and shows the daemon state (ready / recording / transcribing) in the top bar, with a menu to start, stop or restart the daemon, switches for two Voxtype text options and a shortcut to its configuration file. It targets GNOME on Wayland, where Voxtype's own OSD cannot render because Mutter does not implement the wlr-layer-shell protocol. Requires the voxtype daemon and its voxtype-audio-bridge sidecar to be installed and running (https://github.com/peteonrails/voxtype). The extension does not bundle, download or modify them.

Extension Homepage
https://github.com/Charly9926/voxtype-wave

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 1 warning 5

Shexli found 6 issues that may need reviewer attention.

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

  • extension.js:140
    Gio.File.new_for_path(path).load_contents(null)

EGO-P-003 error

GSettings schema XML must be present in package

Extension appears to use GSettings but no `.gschema.xml` file is included in the package.

GSettings Schemas

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:312
    this._fillersItem = new PopupMenu.PopupSwitchMenuItem('Remove filler words', false)
  • extension.js:284
            this._icon = new St.Icon({
                icon_name: STATE_ICON.stopped,
                style_class: `system-status-icon ${STATE_CLASS.stopped}`,
            })
  • extension.js:320
    this._openConfigItem = new PopupMenu.PopupMenuItem('Open configuration')
  • extension.js:306
    this._punctuationItem = new PopupMenu.PopupSwitchMenuItem('Spoken punctuation', false)
  • extension.js:298
    this._restartItem = new PopupMenu.PopupMenuItem('Restart daemon')
  • extension.js:290
    this._statusItem = new PopupMenu.PopupMenuItem('Voxtype', {reactive: false})
  • extension.js:294
    this._toggleItem = new PopupMenu.PopupMenuItem('Start daemon')

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:312
    this._fillersItem = new PopupMenu.PopupSwitchMenuItem('Remove filler words', false)
  • extension.js:284
            this._icon = new St.Icon({
                icon_name: STATE_ICON.stopped,
                style_class: `system-status-icon ${STATE_CLASS.stopped}`,
            })
  • extension.js:320
    this._openConfigItem = new PopupMenu.PopupMenuItem('Open configuration')
  • extension.js:306
    this._punctuationItem = new PopupMenu.PopupSwitchMenuItem('Spoken punctuation', false)
  • extension.js:298
    this._restartItem = new PopupMenu.PopupMenuItem('Restart daemon')
  • extension.js:290
    this._statusItem = new PopupMenu.PopupMenuItem('Voxtype', {reactive: false})
  • extension.js:294
    this._toggleItem = new PopupMenu.PopupMenuItem('Start daemon')

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

  • extension.js:228
    this._area.connect('repaint', () => this._draw())
  • extension.js:334
            this._indicator.menu.connect('open-state-changed', (_menu, open) => {
                if (!open)
                    return;
                if (this._unitPath)
                    this._refreshService();
                this._refreshSwitches();
            })

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

  • extension.js:485
                GLib.timeout_add(GLib.PRIORITY_DEFAULT, 800, () => {
                    this._refreshService();
                    return GLib.SOURCE_REMOVE;
                })
  • extension.js:494
                GLib.timeout_add(GLib.PRIORITY_DEFAULT, 1200, () => {
                    this._refreshService();
                    return GLib.SOURCE_REMOVE;
                })
  • extension.js:528
                    GLib.timeout_add(GLib.PRIORITY_DEFAULT, 1200, () => {
                        this._refreshService();
                        return GLib.SOURCE_REMOVE;
                    })

All Versions

Version Status
1 Unreviewed