Skip to content

sound150 v16.4.0: Ready for Linux Mint 23#8661

Merged
claudiux merged 67 commits into
linuxmint:masterfrom
claudiux:sound150_v16.4.0_Ready-for-Linux-Mint-23
May 10, 2026
Merged

sound150 v16.4.0: Ready for Linux Mint 23#8661
claudiux merged 67 commits into
linuxmint:masterfrom
claudiux:sound150_v16.4.0_Ready-for-Linux-Mint-23

Conversation

@claudiux
Copy link
Copy Markdown
Member

No description provided.

Copilot AI and others added 30 commits March 8, 2026 23:33
@github-actions
Copy link
Copy Markdown
Contributor

Best-practices scanner

This is a regex-based check for API usage that can pose security, performance or
maintainability issues, or that may already be provided by Cinnamon. Having code flagged
by it doesn't automatically disqualify a pull request.

This check is not perfect will not replace a normal review.


Found 30 potential issue(s):

⚠️ sync_file_enumerate_children

sound150@claudiux/files/sound150@claudiux/6.7/lib/del_song_arts.js:11

let dir_children = dir.enumerate_children("standard::name,standard::type,standard::icon,time::modified", Gio.FileQueryInfoFlags.NONE, null);

Synchronous enumerate_children() blocks the main loop.
Use enumerate_children_async() instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:904

let dir_children = dir.enumerate_children("standard::name,standard::type,standard::icon,time::modified", Gio.FileQueryInfoFlags.NONE, null);

Synchronous enumerate_children() blocks the main loop.
Use enumerate_children_async() instead.

⚠️ sync_file_test

sound150@claudiux/files/sound150@claudiux/6.7/lib/del_song_arts.js:9

if (GLib.file_test(dir_path, GLib.FileTest.EXISTS)) {

file_test() is a synchronous stat call that can block on slow/network filesystems.
Prefer attempting the operation and handling a Gio.IOErrorEnum.NOT_FOUND error instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:386

GLib.file_test(R30MPVSOCKET, GLib.FileTest.EXISTS)) {

file_test() is a synchronous stat call that can block on slow/network filesystems.
Prefer attempting the operation and handling a Gio.IOErrorEnum.NOT_FOUND error instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:398

GLib.file_test(R30MPVSOCKET, GLib.FileTest.EXISTS)) {

file_test() is a synchronous stat call that can block on slow/network filesystems.
Prefer attempting the operation and handling a Gio.IOErrorEnum.NOT_FOUND error instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:408

GLib.file_test(R30MPVSOCKET, GLib.FileTest.EXISTS)) {

file_test() is a synchronous stat call that can block on slow/network filesystems.
Prefer attempting the operation and handling a Gio.IOErrorEnum.NOT_FOUND error instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:505

GLib.file_test(R30MPVSOCKET, GLib.FileTest.EXISTS)) {

file_test() is a synchronous stat call that can block on slow/network filesystems.
Prefer attempting the operation and handling a Gio.IOErrorEnum.NOT_FOUND error instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:888

if (!cover_path || !GLib.file_test(cover_path, GLib.FileTest.EXISTS)) {

file_test() is a synchronous stat call that can block on slow/network filesystems.
Prefer attempting the operation and handling a Gio.IOErrorEnum.NOT_FOUND error instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:906

if (GLib.file_test(cover_path, GLib.FileTest.EXISTS)) {

file_test() is a synchronous stat call that can block on slow/network filesystems.
Prefer attempting the operation and handling a Gio.IOErrorEnum.NOT_FOUND error instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:923

} else if (!GLib.file_test(MPV_RADIO_PID, GLib.FileTest.EXISTS)) { // Radio3.0 is not running.

file_test() is a synchronous stat call that can block on slow/network filesystems.
Prefer attempting the operation and handling a Gio.IOErrorEnum.NOT_FOUND error instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:925

if (GLib.file_test(cover_path, GLib.FileTest.EXISTS)) {

file_test() is a synchronous stat call that can block on slow/network filesystems.
Prefer attempting the operation and handling a Gio.IOErrorEnum.NOT_FOUND error instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:947

if (cover_path != null && GLib.file_test(cover_path, GLib.FileTest.EXISTS))

file_test() is a synchronous stat call that can block on slow/network filesystems.
Prefer attempting the operation and handling a Gio.IOErrorEnum.NOT_FOUND error instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:961

if (GLib.file_test(this._cover_path, GLib.FileTest.EXISTS)) {

file_test() is a synchronous stat call that can block on slow/network filesystems.
Prefer attempting the operation and handling a Gio.IOErrorEnum.NOT_FOUND error instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/volumeSlider.js:33

return GLib.file_test(OSD150_DIR, GLib.FileTest.EXISTS);

file_test() is a synchronous stat call that can block on slow/network filesystems.
Prefer attempting the operation and handling a Gio.IOErrorEnum.NOT_FOUND error instead.

⚠️ sync_file_query_exists

sound150@claudiux/files/sound150@claudiux/6.7/lib/del_song_arts.js:17

if (f.query_exists(null))

query_exists() is a synchronous call that can block on slow/network filesystems.
Prefer attempting the operation and handling a Gio.IOErrorEnum.NOT_FOUND error instead.

⚠️ sync_file_replace_contents

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:794

this._trackCoverFileTmp.replace_contents(

Synchronous replace_contents() blocks the main loop.
Use replace_contents_async() instead.

⚠️ sync_file_query_info

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:729

const fileInfo = file.query_info("standard::*,unix::uid",

Synchronous query_info() blocks the main loop.
Use query_info_async() instead.

⚠️ hardcoded_data_dir

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:11

const APPLET_DIR = HOME_DIR + "/.local/share/cinnamon/applets/" + UUID;

Avoid hardcoding .local/share in paths. Use GLib.get_user_data_dir() instead,
which respects the XDG_DATA_HOME environment variable.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:109

Gettext.bindtextdomain(UUID, HOME_DIR + "/.local/share/locale");

Avoid hardcoding .local/share in paths. Use GLib.get_user_data_dir() instead,
which respects the XDG_DATA_HOME environment variable.

sound150@claudiux/files/sound150@claudiux/6.7/lib/volumeSlider.js:32

const OSD150_DIR = HOME_DIR + "/.local/share/cinnamon/extensions/" + EXTENSION_UUID;

Avoid hardcoding .local/share in paths. Use GLib.get_user_data_dir() instead,
which respects the XDG_DATA_HOME environment variable.

ℹ️ shell_string_spawn

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:62

Util.spawnCommandLineAsync("/usr/bin/env bash -C '" + PATH2SCRIPTS + "/run_playerctld.sh'");

Prefer argument vector spawn functions over shell command strings.
This is especially important when arguments include untrusted input (user data,
filenames, settings values, etc.) as shell strings are vulnerable to injection.
Static command strings are generally fine, but argv is always safer.
Use Util.spawn(["cmd", "arg1", "arg2"]) or Util.trySpawn() instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:66

Util.spawnCommandLineAsync("/usr/bin/env bash -C '" + PATH2SCRIPTS + "/kill_playerctld.sh'");

Prefer argument vector spawn functions over shell command strings.
This is especially important when arguments include untrusted input (user data,
filenames, settings values, etc.) as shell strings are vulnerable to injection.
Static command strings are generally fine, but argv is always safer.
Use Util.spawn(["cmd", "arg1", "arg2"]) or Util.trySpawn() instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:656

Util.spawnCommandLineAsync("/usr/bin/env bash -c %s/get_album_art.sh".format(PATH2SCRIPTS));

Prefer argument vector spawn functions over shell command strings.
This is especially important when arguments include untrusted input (user data,
filenames, settings values, etc.) as shell strings are vulnerable to injection.
Static command strings are generally fine, but argv is always safer.
Use Util.spawn(["cmd", "arg1", "arg2"]) or Util.trySpawn() instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:658

Util.spawnCommandLine("/usr/bin/env bash -c %s/get_album_art.sh".format(PATH2SCRIPTS));

Prefer argument vector spawn functions over shell command strings.
This is especially important when arguments include untrusted input (user data,
filenames, settings values, etc.) as shell strings are vulnerable to injection.
Static command strings are generally fine, but argv is always safer.
Use Util.spawn(["cmd", "arg1", "arg2"]) or Util.trySpawn() instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:714

Util.spawnCommandLineAsync("/usr/bin/env bash -c %s/get_album_art.sh".format(PATH2SCRIPTS));

Prefer argument vector spawn functions over shell command strings.
This is especially important when arguments include untrusted input (user data,
filenames, settings values, etc.) as shell strings are vulnerable to injection.
Static command strings are generally fine, but argv is always safer.
Use Util.spawn(["cmd", "arg1", "arg2"]) or Util.trySpawn() instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:716

Util.spawnCommandLine("/usr/bin/env bash -c %s/get_album_art.sh".format(PATH2SCRIPTS));

Prefer argument vector spawn functions over shell command strings.
This is especially important when arguments include untrusted input (user data,
filenames, settings values, etc.) as shell strings are vulnerable to injection.
Static command strings are generally fine, but argv is always safer.
Use Util.spawn(["cmd", "arg1", "arg2"]) or Util.trySpawn() instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:720

Util.spawnCommandLineAsyncIO("/usr/bin/env bash -c %s/get_album_art.sh".format(PATH2SCRIPTS), (stdout, stderr, exitCode) => {

Prefer argument vector spawn functions over shell command strings.
This is especially important when arguments include untrusted input (user data,
filenames, settings values, etc.) as shell strings are vulnerable to injection.
Static command strings are generally fine, but argv is always safer.
Use Util.spawn(["cmd", "arg1", "arg2"]) or Util.trySpawn() instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:751

Util.spawnCommandLineAsync("/usr/bin/env bash -c %s/get_album_art.sh".format(PATH2SCRIPTS));

Prefer argument vector spawn functions over shell command strings.
This is especially important when arguments include untrusted input (user data,
filenames, settings values, etc.) as shell strings are vulnerable to injection.
Static command strings are generally fine, but argv is always safer.
Use Util.spawn(["cmd", "arg1", "arg2"]) or Util.trySpawn() instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:753

Util.spawnCommandLine("/usr/bin/env bash -c %s/get_album_art.sh".format(PATH2SCRIPTS));

Prefer argument vector spawn functions over shell command strings.
This is especially important when arguments include untrusted input (user data,
filenames, settings values, etc.) as shell strings are vulnerable to injection.
Static command strings are generally fine, but argv is always safer.
Use Util.spawn(["cmd", "arg1", "arg2"]) or Util.trySpawn() instead.

sound150@claudiux/files/sound150@claudiux/6.7/lib/s150PopupMenu.js:910

Util.spawnCommandLineAsync(`cp -a "${cover_path}" ${ALBUMART_PICS_DIR}/R3SongArt${rnd}`);

Prefer argument vector spawn functions over shell command strings.
This is especially important when arguments include untrusted input (user data,
filenames, settings values, etc.) as shell strings are vulnerable to injection.
Static command strings are generally fine, but argv is always safer.
Use Util.spawn(["cmd", "arg1", "arg2"]) or Util.trySpawn() instead.


Automated pattern check.

@claudiux claudiux merged commit 4502125 into linuxmint:master May 10, 2026
4 checks passed
@claudiux claudiux deleted the sound150_v16.4.0_Ready-for-Linux-Mint-23 branch May 10, 2026 19:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants