Review of "Custom Command Toggle" version 14

Details Page Preview

Create fully customizable quick toggle buttons to run user defined commands and launch custom scripts.

Extension Homepage
https://github.com/StorageB/custom-command-toggle

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) error 1 warning 2

Shexli found 3 issues that may need reviewer attention.

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

  • backup.js:105
    console.log(`[Custom Command Toggle] Toggle button settings exported to ${filePath}`)
  • backup.js:136
    console.log(`[Custom Command Toggle] Failed to export settings\n${e}`)
  • backup.js:181
    console.log(`[Custom Command Toggle] Failed to import settings. File not found.`)
  • backup.js:188
    console.log('[Custom Command Toggle] Failed to import configuration\n%s'.format(e))
  • backup.js:280
    console.log('[Custom Command Toggle] Configuration imported from %s'.format(filePath))
  • backup.js:307
    console.log('[Custom Command Toggle] All settings successfully reset to defaults')
  • backup.js:309
    console.log('[Custom Command Toggle] Failed to reset settings:', e)

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:496
                this._settings.connect(`changed::enabled${i}-setting`, () => {
                    if (debug) console.log(`[Custom Command Toggle] Toggle ${i} | ${this._settings.get_boolean(`enabled${i}-setting`) ? 'ENABLED' : 'DISABLED'}`);
                    if (this._settings.get_boolean(`enabled${i}-settin
  • extension.js:647
    this._settings.connect(`changed::initialtogglestate${i}-setting`,   () => debounce(i, () => setupCheckSync.call(this, i)))
  • extension.js:648
    this._settings.connect(`changed::checkregex${i}-setting`,           () => debounce(i, () => setupCheckSync.call(this, i)))
  • extension.js:649
    this._settings.connect(`changed::checkcommand${i}-setting`,         () => debounce(i, () => setupCheckSync.call(this, i)))
  • extension.js:650
    this._settings.connect(`changed::checkcommandinterval${i}-setting`, () => debounce(i, () => setupCheckSync.call(this, i)))
  • extension.js:651
    this._settings.connect(`changed::checkcommandsync${i}-setting`,     () => debounce(i, () => setupCheckSync.call(this, i)))
  • extension.js:652
    this._settings.connect(`changed::showindicator${i}-setting`,        () => refreshIndicator.call(this))
  • extension.js:598
            this._settings.connect('changed::buttonclick1-setting', (settings, key) => {
                buttonClick1 = this._settings.get_int('buttonclick1-setting');
                if (buttonClick1 === 0) { toggleStates[0] = true;  settings.set_boolean('togglestate1-setting', toggleStates[0]); }
                
  • extension.js:604
            this._settings.connect('changed::buttonclick2-setting', (settings, key) => {
                buttonClick2 = this._settings.get_int('buttonclick2-setting');
                if (buttonClick2 === 0) { toggleStates[1] = true;  settings.set_boolean('togglestate2-setting', toggleStates[1]); }
                
  • extension.js:610
            this._settings.connect('changed::buttonclick3-setting', (settings, key) => {
                buttonClick3 = this._settings.get_int('buttonclick3-setting');
                if (buttonClick3 === 0) { toggleStates[2] = true;  settings.set_boolean('togglestate3-setting', toggleStates[2]); }
                
  • extension.js:616
            this._settings.connect('changed::buttonclick4-setting', (settings, key) => {
                buttonClick4 = this._settings.get_int('buttonclick4-setting');
                if (buttonClick4 === 0) { toggleStates[3] = true;  settings.set_boolean('togglestate4-setting', toggleStates[3]); }
                
  • extension.js:622
            this._settings.connect('changed::buttonclick5-setting', (settings, key) => {
                buttonClick5 = this._settings.get_int('buttonclick5-setting');
                if (buttonClick5 === 0) { toggleStates[4] = true;  settings.set_boolean('togglestate5-setting', toggleStates[4]); }
                
  • extension.js:628
            this._settings.connect('changed::buttonclick6-setting', (settings, key) => {
                buttonClick6 = this._settings.get_int('buttonclick6-setting');
                if (buttonClick6 === 0) { toggleStates[5] = true;  settings.set_boolean('togglestate6-setting', toggleStates[5]); }
                
  • extension.js:655
            this._settings.connect('changed::debug-setting', () => {
                debug = this._settings.get_boolean('debug-setting');
            })
  • extension.js:520
            this._settings.connect('changed::entryrow1-setting', (settings, key) => {
                entryRow1 = this._settings.get_string('entryrow1-setting');
            })
  • extension.js:533
            this._settings.connect('changed::entryrow12-setting', (settings, key) => {
                entryRow12 = this._settings.get_string('entryrow12-setting');
            })
  • extension.js:546
            this._settings.connect('changed::entryrow13-setting', (settings, key) => {
                entryRow13 = this._settings.get_string('entryrow13-setting');
            })
  • extension.js:559
            this._settings.connect('changed::entryrow14-setting', (settings, key) => {
                entryRow14 = this._settings.get_string('entryrow14-setting');
            })
  • extension.js:572
            this._settings.connect('changed::entryrow15-setting', (settings, key) => {
                entryRow15 = this._settings.get_string('entryrow15-setting');
            })
  • extension.js:585
            this._settings.connect('changed::entryrow16-setting', (settings, key) => {
                entryRow16 = this._settings.get_string('entryrow16-setting');
            })
  • extension.js:523
            this._settings.connect('changed::entryrow2-setting', (settings, key) => {
                entryRow2 = this._settings.get_string('entryrow2-setting');
            })
  • extension.js:536
            this._settings.connect('changed::entryrow22-setting', (settings, key) => {
                entryRow22 = this._settings.get_string('entryrow22-setting');
            })
  • extension.js:549
            this._settings.connect('changed::entryrow23-setting', (settings, key) => {
                entryRow23 = this._settings.get_string('entryrow23-setting');
            })
  • extension.js:562
            this._settings.connect('changed::entryrow24-setting', (settings, key) => {
                entryRow24 = this._settings.get_string('entryrow24-setting');
            })
  • extension.js:575
            this._settings.connect('changed::entryrow25-setting', (settings, key) => {
                entryRow25 = this._settings.get_string('entryrow25-setting');
            })
  • extension.js:588
            this._settings.connect('changed::entryrow26-setting', (settings, key) => {
                entryRow26 = this._settings.get_string('entryrow26-setting');
            })
  • extension.js:526
            this._settings.connect('changed::entryrow3-setting', (settings, key) => {
                refreshIndicator.call(this);
            })
  • extension.js:539
            this._settings.connect('changed::entryrow32-setting', (settings, key) => {
                refreshIndicator.call(this);
            })
  • extension.js:552
            this._settings.connect('changed::entryrow33-setting', (settings, key) => {
                refreshIndicator.call(this);
            })
  • extension.js:565
            this._settings.connect('changed::entryrow34-setting', (settings, key) => {
                refreshIndicator.call(this);
            })
  • extension.js:578
            this._settings.connect('changed::entryrow35-setting', (settings, key) => {
                refreshIndicator.call(this);
            })
  • extension.js:591
            this._settings.connect('changed::entryrow36-setting', (settings, key) => {
                refreshIndicator.call(this);
            })
  • extension.js:529
            this._settings.connect('changed::entryrow4-setting', (settings, key) => {
                refreshIndicator.call(this);
            })
  • extension.js:542
            this._settings.connect('changed::entryrow42-setting', (settings, key) => {
                refreshIndicator.call(this);
            })
  • extension.js:555
            this._settings.connect('changed::entryrow43-setting', (settings, key) => {
                refreshIndicator.call(this);
            })
  • extension.js:568
            this._settings.connect('changed::entryrow44-setting', (settings, key) => {
                refreshIndicator.call(this);
            })
  • extension.js:581
            this._settings.connect('changed::entryrow45-setting', (settings, key) => {
                refreshIndicator.call(this);
            })
  • extension.js:594
            this._settings.connect('changed::entryrow46-setting', (settings, key) => {
                refreshIndicator.call(this);
            })
  • extension.js:471
            this._settings.connect('changed::force-refresh', () => {
                if (debug) console.log(`[Custom Command Toggle] `);
                if (debug) console.log(`[Custom Command Toggle] Rebuilding and reinitializing all toggles`);
    
    
                // Remove old intervals
                checkIntervals.f
  • extension.js:91
            this.toggle1ConnectSignal = this.toggle1.connect('notify::checked', () => {
                if (settings.get_boolean('closemenu1-setting')) {Main.panel.closeQuickSettings();}
                if (settings.get_int('buttonclick1-setting') === 2 && settings.get_boolean('checkexitcode1-setting')) {
         
  • extension.js:143
            this.toggle2ConnectSignal = this.toggle2.connect('notify::checked', () => {
                if (settings.get_boolean('closemenu2-setting')) {Main.panel.closeQuickSettings();}
                if (settings.get_int('buttonclick2-setting') === 2 && settings.get_boolean('checkexitcode2-setting')) {
         
  • extension.js:195
            this.toggle3ConnectSignal = this.toggle3.connect('notify::checked', () => {
                if (settings.get_boolean('closemenu3-setting')) {Main.panel.closeQuickSettings();}
                if (settings.get_int('buttonclick3-setting') === 2 && settings.get_boolean('checkexitcode3-setting')) {
         
  • extension.js:247
            this.toggle4ConnectSignal = this.toggle4.connect('notify::checked', () => {
                if (settings.get_boolean('closemenu4-setting')) {Main.panel.closeQuickSettings();}
                if (settings.get_int('buttonclick4-setting') === 2 && settings.get_boolean('checkexitcode4-setting')) {
         
  • extension.js:299
            this.toggle5ConnectSignal = this.toggle5.connect('notify::checked', () => {
                if (settings.get_boolean('closemenu5-setting')) {Main.panel.closeQuickSettings();}
                if (settings.get_int('buttonclick5-setting') === 2 && settings.get_boolean('checkexitcode5-setting')) {
         
  • extension.js:351
            this.toggle6ConnectSignal = this.toggle6.connect('notify::checked', () => {
                if (settings.get_boolean('closemenu6-setting')) {Main.panel.closeQuickSettings();}
                if (settings.get_int('buttonclick6-setting') === 2 && settings.get_boolean('checkexitcode6-setting')) {
         

EGO-M-004 error

metadata shell-version must only include plausible stable releases and at most one development release

Field `shell-version` contains invalid values, more than one development release, or implausible future releases.

metadata.json must be well-formed

  • metadata.json
    shell-version=['45', '46', '47', '48', '49', '50', '51']

All Versions

Version Status
14 Active
13 Active
12 Inactive
11 Inactive
10 Rejected
9 Inactive
8 Inactive
7 Inactive
6 Inactive
5 Rejected
4 Inactive
3 Inactive
2 Inactive
1 Rejected

Previous Reviews on this Version

JustPerfection active