Review of "Todav: Tasks & Calendar" version 2.3.0 (3)

Details Page Preview

Companion extension for Todav, a task list and calendar app for GNOME that keeps your tasks and events in your Nextcloud through CalDAV. Shows a task list, the month with colored dots and the coming agenda in the top bar, or in the clock menu in place of GNOME's calendar and events; clicking an item opens it in Todav. Requires the Todav app (https://github.com/AperteDev/todav), whose Preferences hold the extension's options.

Extension Homepage
https://github.com/AperteDev/todav

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 4

Shexli found 5 issues that may need reviewer attention.

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:592
    this._agendaView = new St.ScrollView({
                style_class: 'todav-agenda',
                hscrollbar_policy: St.PolicyType.NEVER,
                vscrollbar_policy: St.PolicyType.AUTOMATIC,
                overlay_scrollbars: true,
                x_expand: true,
                y_expand: true,
            })
  • extension.js:158
    this._contextManager = new PopupMenu.PopupMenuManager(this)

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:592
    this._agendaView = new St.ScrollView({
                style_class: 'todav-agenda',
                hscrollbar_policy: St.PolicyType.NEVER,
                vscrollbar_policy: St.PolicyType.AUTOMATIC,
                overlay_scrollbars: true,
                x_expand: true,
                y_expand: true,
            })
  • extension.js:185
    this._clockBox = new St.BoxLayout({orientation: VERTICAL, x_expand: true})
  • extension.js:183
    this._clockMonth = new St.BoxLayout({style_class: 'todav-clock-month', orientation: VERTICAL, x_expand: true, visible: false})
  • extension.js:153
    this._context = new PopupMenu.PopupMenu(this, 0.5, St.Side.TOP)
  • extension.js:158
    this._contextManager = new PopupMenu.PopupMenuManager(this)

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:161
            this._context.connect('open-state-changed', (_menu, open) => {
                if (open)
                    this.add_style_pseudo_class('active');
                else
                    this.remove_style_pseudo_class('active');
            })
  • extension.js:470
            item.connect('clicked', () => {
                this._choosing = false;
                this._proxy.SetSettingAsync('ext_list', href)
                    .then(() => (this._dateMenu?.menu.isOpen ? this._clockRebuild() : this._rebuild()))
                    .catch(e => logError(e, 'Todav: cannot pick the li
  • extension.js:537
            item.connect('clicked', () => this._open(p => (this._edit?.tasks
                ? p.EditItemAsync(uid, true, 0).catch(() => p.ShowTaskAsync(uid))
                : p.ShowTaskAsync(uid))))
  • extension.js:619
    item.connect('clicked', () => this._open(p => (edit ? p.EditItemAsync(uid, task, start) : p.ShowDayAsync(day))))
  • extension.js:518
            mark.connect('clicked', () => {
                done = !done;
                show(done);
                this._proxy.SetDoneAsync(uid, done).catch(e => {
                    logError(e, 'Todav: SetDone failed');
                    done = !done;
                    show(done);
                });
            })
  • extension.js:129
            this.menu.connect('open-state-changed', (_menu, open) => {
                if (open) {
                    this._choosing = false;
                    this._month = null;
                    this._selected = null;
                    this._rebuild();
                }
            })
  • extension.js:600
            scroll.connect('destroy', () => {
                if (this._showAgenda === show)
                    this._showAgenda = null;
            })

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:362
            GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 3, () => {
                global.display.disconnect(id);
                return GLib.SOURCE_REMOVE;
            })

All Versions

Version Status
2.5.0 (4) Unreviewed
2.3.0 (3) Rejected
2.0.2 (2) Rejected
1.2.1 (1) Rejected

Previous Reviews on this Version

JustPerfection rejected
Didn't review. Shexli issues need to be fixed first.