Spotify Desktop notifications

Show desktop notifications whenever the track changes

// ==UserScript==
// @name         Spotify Desktop notifications
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Show desktop notifications whenever the track changes
// @author       Ronald Troyer
// @match        https://open.spotify.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    window.currentSong = {};
    function handleDomChanges() {
        var nowPlayingElement = document.querySelectorAll('.Root__top-container .now-playing')[0];
        if (nowPlayingElement) {
            var config = { attributes: true, childList: true, subtree: true };
            var observer = new MutationObserver(getCurrentSong);
            observer.observe(nowPlayingElement, config);
        }
    }

    function getCurrentSong(mutationsList, observer) {
        var imageUrl = document.querySelectorAll('.Root__top-container .now-playing .cover-art-image')[0].getAttribute('style').replace(/.*?http/i,'http').replace(/".*/,'');
        var songName = document.querySelectorAll('.Root__top-container .now-playing .track-info__name')[0];
        songName = songName && songName.textContent;

        if (window.currentSong.songName != songName && imageUrl) {
            window.currentSong = {
                songName: songName,
                artistName: document.querySelectorAll('.Root__top-container .now-playing .track-info__artists')[0].textContent,
                imageUrl: imageUrl
            };
            spawnNotification(window.currentSong.artistName, window.currentSong.imageUrl, window.currentSong.songName);
        }
    };

    function spawnNotification(body, icon, title) {
        var options = {
            body: body,
            icon: icon
        };
        var n = new Notification(title, options);
        setTimeout(timeoutNotification.bind(this, n), 10000);
    }

    function timeoutNotification(notification) {
        notification.close();
    }

    Notification.requestPermission().then(function(result) {
        console.log(result);
    });

    setInterval(handleDomChanges, 1000);
    handleDomChanges();
})();