Lightweight internet radio for GNOME Shell, controlled entirely from the top bar. Supports editable stations, M3U/XSPF streams, track metadata, and media keys. The Copy stream URL action writes a station URL to the clipboard. It does not read clipboard contents.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
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()`.
radio-a082f085a885.js:233
xmlFile.load_contents(null)
EGO-A-005 manual_review
extensions should not access the clipboard directly
Direct clipboard access via `St.Clipboard.get_default()` requires reviewer scrutiny.
radio-a082f085a885.js:287
St.Clipboard.get_default()
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
src/core/errors.js
src/core/playlists.js
src/core/stations.js
src/core/validation/config.js
src/core/validation/media.js
src/core/validation/text.js
src/core/validation/urls.js
src/service/build-config.js
src/service/decoder.js
src/service/http.js
src/service/main.js
src/service/player.js
src/service/resource-policy.js
src/service/source.js
src/service/store.js
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.
radio-a082f085a885.js:295
this._cancel.connect('clicked', () => this._closeForm())
radio-a082f085a885.js:287
this._copySource.connect('clicked', () => St.Clipboard.get_default().set_text(
St.ClipboardType.CLIPBOARD, this._urlEntry.get_text()))
radio-a082f085a885.js:303
this._nameEntry.clutter_text.connect('key-press-event', (_actor, event) => {
if (event.get_key_symbol() === Clutter.KEY_Return) {
this._urlEntry.grab_key_focus();
return Clutter.EVENT_STOP;
}
return Clutter.EVENT_PROPAGATE;
radio-a082f085a885.js:207
this._recentLess.connect('clicked', () => this._call('SetRecentLimit',
new GLibVariant('(u)', [(this._state.recentLimit ?? 3) - 1])))
radio-a082f085a885.js:209
this._recentMore.connect('clicked', () => this._call('SetRecentLimit',
new GLibVariant('(u)', [(this._state.recentLimit ?? 3) + 1])))
radio-a082f085a885.js:297
this._remove.connect('clicked', () => {
if (this._editingId)
this._call('RemoveStation', new GLibVariant('(s)', [this._editingId]), () => this._closeForm());
})
radio-a082f085a885.js:292
this._save.connect('clicked', () => this._saveStation())
radio-a082f085a885.js:302
this._urlEntry.clutter_text.connect('activate', () => this._saveStation())
radio-a082f085a885.js:220
entry.connect('style-changed', () => entry.get_hint_actor()?.ensure_style())
radio-a082f085a885.js:224
this.menu.actor.connect('captured-event', (_actor, event) => this._searchKey(event))
radio-a082f085a885.js:225
this.menu.connect('open-state-changed', (_menu, open) => {
if (!open && this._alive) {
this._showView(null);
}
})
| Version | Status |
|---|---|
| 0.6.0 (2) | Unreviewed |
| 0.5.0 (1) | Rejected |