mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-10 18:21:47 +00:00
87 lines
1.9 KiB
JavaScript
87 lines
1.9 KiB
JavaScript
let videoElement = null;
|
|
let image = null;
|
|
|
|
const observer = new MutationObserver((mutations, observer) => {
|
|
if (!videoElement) {
|
|
videoElement = document.querySelector("video");
|
|
}
|
|
|
|
if (!image) {
|
|
image = document.querySelector(".ytmusic-player-bar.image");
|
|
}
|
|
|
|
if (videoElement !== null && image !== null) {
|
|
observer.disconnect();
|
|
let notificationImage = null;
|
|
|
|
videoElement.addEventListener("play", () => {
|
|
notify({
|
|
title: getTitle(),
|
|
artist: getArtist(),
|
|
image: notificationImage,
|
|
});
|
|
});
|
|
|
|
image.addEventListener("load", () => {
|
|
notificationImage = null;
|
|
const imageInBase64 = convertImageToBase64(image);
|
|
if (image && image.complete && image.naturalHeight !== 0) {
|
|
notificationImage = imageInBase64;
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
// Convert an image (DOM element) to base64 string
|
|
const convertImageToBase64 = (image, size = 256) => {
|
|
image.setAttribute("crossorigin", "anonymous");
|
|
|
|
const c = document.createElement("canvas");
|
|
c.height = size;
|
|
c.width = size;
|
|
|
|
const ctx = c.getContext("2d");
|
|
ctx.drawImage(
|
|
image,
|
|
0,
|
|
0,
|
|
image.naturalWidth,
|
|
image.naturalHeight,
|
|
0,
|
|
0,
|
|
c.width,
|
|
c.height
|
|
);
|
|
|
|
const imageInBase64 = c.toDataURL();
|
|
return imageInBase64;
|
|
};
|
|
|
|
const getTitle = () => {
|
|
const title = document.querySelector(".title.ytmusic-player-bar").textContent;
|
|
return title;
|
|
};
|
|
|
|
const getArtist = () => {
|
|
const bar = document.querySelectorAll(".subtitle.ytmusic-player-bar")[0];
|
|
let artist;
|
|
|
|
if (bar.querySelectorAll(".yt-simple-endpoint.yt-formatted-string")[0]) {
|
|
artist = bar.querySelectorAll(".yt-simple-endpoint.yt-formatted-string")[0]
|
|
.textContent;
|
|
} else if (bar.querySelectorAll(".byline.ytmusic-player-bar")[0]) {
|
|
artist = bar.querySelectorAll(".byline.ytmusic-player-bar")[0].textContent;
|
|
}
|
|
|
|
return artist;
|
|
};
|
|
|
|
const observeVideoAndThumbnail = () => {
|
|
observer.observe(document, {
|
|
childList: true,
|
|
subtree: true,
|
|
});
|
|
};
|
|
|
|
module.exports = observeVideoAndThumbnail;
|