Track time spent on GitLab issues. This extension is not affiliated, funded, or in any way associated with GitLab. Track time spent on GitLab issues from the GNOME top bar. Select projects and issues, run a persistent timer, submit time directly to GitLab, and generate monthly reports. This is an experimental personal fork of Gecka-Apps/gitlab-time-tracker. It was developed primarily through AI-assisted programming. Updates and support are not guaranteed. Requires a GitLab personal access token with the api scope which will be stored cleartext in GSettings.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-P-007 warning
JavaScript files should be reachable from extension.js or prefs.js
Some JavaScript files are not reachable from `extension.js` or `prefs.js` imports.
Don't include unnecessary files
reportWindow.js
EGO-L-001 warning
extension must not create GObject instances or modify shell before enable()
Resource creation or signal/source setup was found outside `enable()`.
Only use initialization for static resources
selectorWindow.js:528
new Gtk.Application({
application_id: 'com.github.heno_dm.TimelogsExtension.Selector',
flags: Gio.ApplicationFlags.FLAGS_NONE,
})
selectorWindow.js:533
app.connect('activate', application => {
const window = new SelectorWindow(application);
window.present();
})
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`.
selectorWindow.js:41
this._settings = getSettings()
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.
selectorWindow.js:159
this._issueAssigneeEntry.connect('changed', () => {
this._settings.set_string('issue-filter-assignee', this._issueAssigneeEntry.get_text().trim());
this._scheduleIssueReload();
})
selectorWindow.js:170
this._issueLabelsEntry.connect('changed', () => {
this._settings.set_string('issue-filter-labels', this._issueLabelsEntry.get_text().trim());
this._scheduleIssueReload();
})
selectorWindow.js:183
this._issueList.connect('row-selected', (_list, row) => {
this._selectedIssue = row?._issue || null;
this._selectButton.sensitive = Boolean(this._selectedProject && this._selectedIssue);
})
selectorWindow.js:134
this._issueSearchEntry.connect('search-changed', () => {
this._settings.set_string('issue-filter-search', this._issueSearchEntry.get_text());
this._scheduleIssueReload();
})
selectorWindow.js:146
this._issueStateDropdown.connect('notify::selected', widget => {
const selected = widget.get_selected();
const state = this._issueStateValues[selected] || 'opened';
this._settings.set_string('issue-filter-state', state);
this._reloadIssues();
selectorWindow.js:196
this._loadMoreButton.connect('clicked', () => this._loadMoreIssues())
selectorWindow.js:106
this._projectList.connect('row-selected', (_list, row) => {
if (row?._project)
this._selectProject(row._project);
})
selectorWindow.js:96
this._projectSearchEntry.connect('search-changed', () => this._updateProjectList())
selectorWindow.js:216
this._selectButton.connect('clicked', () => this._sendSelection())
EGO-L-008 warning
Soup.Session instances should be aborted during cleanup
Soup.Session instances should be aborted during cleanup.
selectorWindow.js:42
this._httpSession = new Soup.Session()
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.
selectorWindow.js:352
this._issueReloadId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 300, () => {
this._issueReloadId = null;
this._reloadIssues();
return GLib.SOURCE_REMOVE;
})