private void updateAvailability()
        {
            if (downloadTracker == null)
            {
                return;
            }

            // will be repopulated below if still valid.
            matchingHash = null;

            switch (downloadTracker.State.Value)
            {
            case DownloadState.NotDownloaded:
                availability.Value = BeatmapAvailability.NotDownloaded();
                break;

            case DownloadState.Downloading:
                availability.Value = BeatmapAvailability.Downloading((float)downloadTracker.Progress.Value);
                break;

            case DownloadState.Importing:
                availability.Value = BeatmapAvailability.Importing();
                break;

            case DownloadState.LocallyAvailable:
                matchingHash = findMatchingHash();

                bool hashMatches = matchingHash != null;

                availability.Value = hashMatches ? BeatmapAvailability.LocallyAvailable() : BeatmapAvailability.NotDownloaded();

                // only display a message to the user if a download seems to have just completed.
                if (!hashMatches && downloadTracker.Progress.Value == 1)
                {
                    Logger.Log("The imported beatmap set does not match the online version.", LoggingTarget.Runtime, LogLevel.Important);
                }

                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
        private void updateAvailability()
        {
            if (downloadTracker == null || selectedBeatmap == null)
            {
                return;
            }

            switch (downloadTracker.State.Value)
            {
            case DownloadState.NotDownloaded:
                availability.Value = BeatmapAvailability.NotDownloaded();
                break;

            case DownloadState.Downloading:
                availability.Value = BeatmapAvailability.Downloading((float)downloadTracker.Progress.Value);
                break;

            case DownloadState.Importing:
                availability.Value = BeatmapAvailability.Importing();
                break;

            case DownloadState.LocallyAvailable:
                bool available = filteredBeatmaps().Any();

                availability.Value = available ? BeatmapAvailability.LocallyAvailable() : BeatmapAvailability.NotDownloaded();

                // only display a message to the user if a download seems to have just completed.
                if (!available && downloadTracker.Progress.Value == 1)
                {
                    Logger.Log("The imported beatmap set does not match the online version.", LoggingTarget.Runtime, LogLevel.Important);
                }

                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
        private void updateAvailability()
        {
            switch (State.Value)
            {
            case DownloadState.NotDownloaded:
                availability.Value = BeatmapAvailability.NotDownloaded();
                break;

            case DownloadState.Downloading:
                availability.Value = BeatmapAvailability.Downloading((float)Progress.Value);
                break;

            case DownloadState.Importing:
                availability.Value = BeatmapAvailability.Importing();
                break;

            case DownloadState.LocallyAvailable:
                availability.Value = BeatmapAvailability.LocallyAvailable();
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(State));
            }
        }