/// <summary>
        ///     Gets the index of the current track.
        /// </summary>
        /// <returns>The index of the current track.</returns>
        public int GetCurrentTrackIndex()
        {
            var currentTrack = TrackModels.FirstOrDefault(t => t.IsCurrent);

            if (currentTrack == null)
            {
                return(GetCurrentTrackIndexFromBassPlayer());
            }

            var currentBassTrackDescription = BassPlayer.CurrentTrack == null
                ? ""
                : BassPlayer.CurrentTrack.Description;

            if (currentBassTrackDescription == currentTrack.Description)
            {
                return(TrackModels.IndexOf(currentTrack));
            }

            var currentIndex = TrackModels.IndexOf(currentTrack);
            var match        = TrackModels
                               .FirstOrDefault(t => t.Description == currentBassTrackDescription &&
                                               TrackModels.IndexOf(t) >= currentIndex);

            if (match == null)
            {
                return(GetCurrentTrackIndexFromBassPlayer());
            }

            currentTrack.IsCurrent = false;
            match.IsCurrent        = true;

            return(TrackModels.IndexOf(match));
        }
        private int GetCurrentTrackIndexFromBassPlayer()
        {
            if (BassPlayer.CurrentTrack == null)
            {
                if (TrackModels.Count <= 0)
                {
                    return(-1);
                }
                TrackModels[0].IsCurrent = true;
                return(0);
            }
            var currentTrack = TrackModels.FirstOrDefault(t => t.Description == BassPlayer.CurrentTrack.Description);

            if (currentTrack == null)
            {
                return(-1);
            }
            currentTrack.IsCurrent = true;
            return(TrackModels.IndexOf(currentTrack));
        }