fix: get multiple artists

- in mrpis multiple names are showing
- also at title
- skipping from settings any artist that is present in current artists at Tidal
This commit is contained in:
Thanasis Trispiotis 2023-04-23 22:24:04 +03:00
parent 05b422e045
commit cde7408cc4
No known key found for this signature in database
GPG Key ID: F2CB994F68ED0802

View File

@ -65,16 +65,29 @@ const elements = {
return "";
},
getArtists: function () {
/**
* returns an array of all artists in the current song
* @returns {Array} artists
*/
getArtistsArray: function () {
const footer = this.get("footer");
if (footer) {
const artists = footer.querySelector(this["artists"]);
if (artists) {
return artists.innerText;
}
const artists = footer.querySelectorAll(this.artists);
if (artists)
return Array.from(artists).map((artist) => artist.textContent);
}
return [];
},
/**
* unify the artists array into a string separated by commas
* @param {Array} artistsArray
* @returns {String} artists
*/
getArtistsString: function (artistsArray) {
if (artistsArray.length > 0)
return artistsArray.join(", ");
return "unknown artist(s)";
},
@ -332,17 +345,18 @@ function getTrackID() {
*/
setInterval(function () {
const title = elements.getText("title");
const artists = elements.getArtists();
skipArtistsIfFoundInSkippedArtistsList(artists);
const artistsArray = elements.getArtistsArray();
const artistsString = elements.getArtistsString(artistsArray);
skipArtistsIfFoundInSkippedArtistsList(artistsArray);
const album = elements.getAlbumName();
const current = elements.getText("current");
const duration = elements.getText("duration");
const songDashArtistTitle = `${title} - ${artists}`;
const songDashArtistTitle = `${title} - ${artistsString}`;
const currentStatus = getCurrentlyPlayingStatus();
const options = {
title,
message: artists,
message: artistsString,
album: album,
status: currentStatus,
url: getTrackURL(),
@ -387,16 +401,21 @@ setInterval(function () {
/**
* automatically skip a song if the artists are found in the list of artists to skip
* @param {*} artists list of artists to skip
* @param {*} artists array of artists
*/
function skipArtistsIfFoundInSkippedArtistsList(artists) {
if (store.get(skipArtists)) {
const skippedArtists = store.get(settings.skippedArtists);
if (skippedArtists.find((artist) => artist === artists) !== undefined) {
if (skippedArtists.length > 0) {
const artistsToSkip = skippedArtists.map((artist) => artist);
const artistNames = Object.values(artists).map((artist) => artist);
const foundArtist = artistNames.some((artist) => artistsToSkip.includes(artist));
if (foundArtist) {
elements.click("next");
}
}
}
}
}, 100);
if (process.platform === "linux" && store.get(settings.mpris)) {