Play lofi music and other sounds, locally or online, on your GNOME desktop with just a click! You need MPV for this extension to work. Fedora: sudo dnf install mpv Ubuntu: sudo apt install mpv Arch Linux: sudo pacman -S mpv
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO014 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.
modules/Indicator.js:35
this._icon = new St.Icon({
gicon: Gio.icon_new_for_string(this._extension.path + ICONS.INDICATOR_DEFAULT),
iconSize: 20,
styleClass: 'system-status-icon indicator-icon',
})
EGO027 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`.
modules/Indicator.js:35
this._icon = new St.Icon({
gicon: Gio.icon_new_for_string(this._extension.path + ICONS.INDICATOR_DEFAULT),
iconSize: 20,
styleClass: 'system-status-icon indicator-icon',
})
EGO015 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.
preferences/InterfacePage.js:71
row.connect('notify::selected', () => {
const newActionIndex = row.get_selected();
updateAction({ mouseBtn, actionIndex: newActionIndex });
})
preferences/RadiosPage.js:337
this._window.connect('close-request', () => {
writeLog({ message: '[RadiosPage] Cleaning up on window close', type: 'INFO' });
this._settings = null;
this._radios = null;
})
preferences/RadiosPage.js:147
nameRadioRow.connect('apply', (w) => {
const index = this._radios.findIndex((entry) => entry.endsWith(radioID));
if (w.text.length < 2) {
writeLog({ message: '[RadiosPage] Radio name too short (min 2 characters)', type: 'WARN' });
preferences/RadiosPage.js:159
urlRadioRow.connect('apply', (w) => {
const index = this._radios.findIndex((entry) => entry.endsWith(radioID));
if (this._isPlayable({ uri: w.text }) === false) {
writeLog({ message: `[RadiosPage] Invalid URL or PATH for radio update: $
preferences/RadiosPage.js:117
openButton.connect('clicked', () => {
const uri = radioUrl;
writeLog({ message: `[RadiosPage] Opening radio location: ${uri}`, type: 'INFO' });
if (!isUri(uri)) {
writeLog({ message: `[RadiosPage] Opening file path with
preferences/RadiosPage.js:95
removeButton.connect('clicked', () => {
writeLog({ message: `[RadiosPage] Remove button clicked for radio: ${radioName}`, type: 'INFO' });
const dialog = new Adw.AlertDialog({
heading: gettext(`Are you sure you want to delete ${radioNam
preferences/RadiosPage.js:192
dragSource.connect('drag-begin', (_source, drag) => {
const dragWidget = new Gtk4.ListBox();
dragWidget.set_size_request(radiosExpander.get_width(), radiosExpander.get_height());
dragWidget.add_css_class('boxed-list');
const
preferences/RadiosPage.js:215
dropTarget.connect('drop', (_drop, dragedExpanderRow, _x, y) => {
const targetRow = listBox.get_row_at_y(y);
const targetIndex = targetRow.get_index();
if (!dragedExpanderRow || !targetRow) {
return false;
}
const [m
preferences/RadiosPage.js:207
dropController.connect('enter', () => {
listBox.drag_highlight_row(radiosExpander);
})
preferences/RadiosPage.js:323
nameRadioController.connect('key-pressed', controllerCallback)
preferences/RadiosPage.js:324
urlRadioController.connect('key-pressed', controllerCallback)
preferences/RadiosPage.js:210
dropController.connect('leave', () => {
listBox.drag_unhighlight_row();
})
preferences/RadiosPage.js:183
dragSource.connect('prepare', (_source, x, y) => {
dragX = x;
dragY = y;
const value = new GObject.Value();
value.init(Gtk4.ListBoxRow);
value.set_object(radiosExpander);
dragIndex = radiosExp
preferences/RadiosPage.js:105
dialog.connect('response', (dialog, response) => {
if (response === 'ok') {
writeLog({ message: `[RadiosPage] User confirmed removal of radio: ${radioName}`, type: 'INFO' });
this._removeRadio(i, radioID);
preferences/ShortcutButton.js:32
this._settings.connect(`changed::${this._settingsKey}`, () => {
const newShortcut = this._settings.get_strv(this._settingsKey)[0] ?? '';
writeLog({ message: `[ShortcutButton] Shortcut changed for ${settingsKey}: "${newShortcut}"`, type: 'INFO' });
this._la