public static void RefreshData(LevelSO song = null) { try { if (queuedSong == null) { if (song == null) { song = SongListUtils.GetInstalledSong(); } Logger.Debug($"Refresh Waiting Menu data - Song is {(song != null ? "not" : "")} loaded"); if (song != null) { level.text = $"Queued: { song.songName} by { song.songAuthorName }"; if (song is CustomLevel) { SongLoader.Instance.LoadAudioClipForLevel((CustomLevel)song, (customLevel) => { Logger.Debug($"Loaded audio Clip for {song.songName}"); ReadyUp(customLevel); }); } else { ReadyUp(song); } } else if (!downloading) { level.text = $"Downloading: { SteamAPI.GetSongName()}"; Logger.Debug($"We do not have the song in our library, lets start downloading it."); downloading = true; Instance.StartCoroutine(Utils.SongDownloader.Instance.DownloadSong(SteamAPI.GetSongId(), LevelDownloadProgress, LevelDownloaded)); } } if (Instance && Instance.isActiveAndEnabled) { Dictionary <string, float> status = Controllers.PlayerController.Instance.GetConnectedPlayerDownloadStatus(); middleViewController.Data.Clear(); foreach (KeyValuePair <string, float> user in status.OrderBy(u => u.Value)) { CustomCellInfo cell = new CustomCellInfo(user.Key, user.Value == -1f ? "FAILED TO DOWNLOAD": user.Value == 1f ? "Ready" : $"Downloading song ${(int) Math.Round(user.Value * 100, 0)}%", user.Value == 1f ? Sprites.checkmarkIcon : Sprites.crossIcon); middleViewController.Data.Add(cell); } middleViewController._customListTableView.ReloadData(); middleViewController._customListTableView.ScrollToRow(0, false); } } catch (Exception e) { Logger.Error(e); } }