public static bool WindowTitleIsSong(
            string windowTitle,
            SongClassificationInfo songClassificationInfo
            )
        {
            //First check for exempt song names
            if (songClassificationInfo.SongNames.Contains(windowTitle))
            {
                return(true);
            }

            //Then check that the window title was in the correct song format ("artist - name")
            //Ok if there's nothing before or after the separator
            if (!windowTitle.Contains(ArtistAndNameSeparator))
            {
                return(false);
            }

            //Then check for ads that match the correct song format
            if (
                songClassificationInfo.AdNames.Contains(windowTitle) ||
                songClassificationInfo.AdKeywords.Contains(windowTitle)
                )
            {
                return(false);
            }

            //If none of the prior tests matched, it's either a song or the classification info's incomplete
            return(true);
        }
        /// <summary></summary>
        /// <param name="spotifyProcessManager"></param>
        /// <param name="songClassificationInfo"></param>
        /// <param name="refreshInterval"></param>
        /// <param name="logger"></param>
        /// <param name="maxSongs">
        /// Note: -1 == infinite, and numbers between 0 and 10 inclusive are not allowed
        /// (in order to guarantee current and future internal functionality)
        /// </param>
        public SongTracker(SpotifyProcessManager spotifyProcessManager, SongClassificationInfo songClassificationInfo, int refreshInterval, Logger logger, int maxSongs = -1)
        {
            if (maxSongs >= 0 && maxSongs <= 10)
            {
                throw new ArgumentOutOfRangeException(
                          nameof(maxSongs),
                          maxSongs,
                          "To guarantee correctness of current and any future internal functionality, "
                          + nameof(maxSongs) + " cannot be between 0 and 10 inclusive"
                          );
            }

            this.MaxSongs = maxSongs;

            this._songs = new List <SongInfo>();
            this.Songs  = _songs.AsReadOnly();

            this.SpotifyProcessManager  = spotifyProcessManager;
            this.SongClassificationInfo = songClassificationInfo;

            this.RefreshInterval = refreshInterval;

            this._logger = logger;

            this.State = TrackState.Unused;
        }
        public SpotifySongInfo(string windowTitle, SongClassificationInfo songClassificationInfo)
        {
            this.WindowTitle            = windowTitle;
            this.SongClassificationInfo = songClassificationInfo;

            this.IsSong = WindowTitleIsSong(windowTitle, songClassificationInfo);
            (this.Artist, this.SongName) = ParseWindowTitle(windowTitle);
        }