public IEnumerator DownloadSong(string levelId, Action <float> downloadProgress, Action <string> songDownloaded, Action <string> downloadError) { levelId = levelId.Substring(0, 32); Data.Logger.Info($"Starting download for {levelId}"); using (UnityWebRequest www = UnityWebRequest.Get($"https://beatsaver.com/api/songs/search/hash/{levelId}")) { yield return(www.SendWebRequest()); if (www.isNetworkError || www.isHttpError) { Logger.Error(www.error); downloadError?.Invoke(www.error); yield break; } JSONNode result = JSON.Parse(www.downloadHandler.text); Logger.Debug($"Result: {result}"); if (result["total"].AsInt == 0) { downloadError?.Invoke("song not found"); yield break; } foreach (JSONObject song in result["songs"].AsArray) { FileUtils.EmptyDirectory(".mpdownloadcache"); string zipPath = Path.Combine(Environment.CurrentDirectory, ".mpdownloadcache", $"{song["version"].Value}.zip"); string finalPath = Path.Combine(Environment.CurrentDirectory, "CustomSongs", Plugin.instance.Name, song["version"].Value); if (Directory.Exists(finalPath)) { Directory.Delete(finalPath, true); } yield return(FileUtils.DownloadFile(song["downloadUrl"].Value, zipPath, downloadProgress)); yield return(FileUtils.ExtractZip(zipPath, finalPath, ".mpdownloadcache", false)); SongLoader.Instance.RefreshSongs(false); float initTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds(); while (SongLoader.AreSongsLoading) { yield return(null); if (initTime - new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds() > 5) { downloadError?.Invoke("timeout"); yield break; } } FileUtils.EmptyDirectory(".mpdownloadcache", true); songDownloaded?.Invoke(song["hashMd5"]); break; } } }
private void didSelectDifficultyBeatmap(StandardLevelDetailViewController controller, IDifficultyBeatmap difficultyBeatmap) { Logger.Debug($"select difficulty {difficultyBeatmap.level.songName} - {difficultyBeatmap.difficulty} - {difficultyBeatmap.difficultyRank}"); if (!_partyFlowCoordinator || !_partyFlowCoordinator.isActivated) { toggleButtons(true); return; } toggleButtons(false); SteamAPI.SetDifficulty((byte)difficultyBeatmap.difficultyRank); }
protected void didSelectLevel(IDifficultyBeatmap difficultyBeatmap) { IBeatmapLevel level = difficultyBeatmap.level; Logger.Debug($"select level {level.songName} - {difficultyBeatmap.difficulty} - {difficultyBeatmap.difficultyRank}"); if (!_partyFlowCoordinator || !_partyFlowCoordinator.isActivated) { toggleButtons(true); return; } toggleButtons(false); SteamAPI.SetSong(level.levelID, level.songName); SteamAPI.SetDifficulty((byte)difficultyBeatmap.difficultyRank); SongDownloader.Instance.StartCoroutine(SongDownloader.CheckSongExists(level.levelID, doesSongExist)); }
public void didPressPlay(StandardLevelDetailViewController controller) { Logger.Debug("press play"); try { if (!SteamAPI.IsHost() || !Controllers.PlayerController.Instance.AllPlayersInMenu()) { return; } if (!_partyFlowCoordinator || !_partyFlowCoordinator.isActivated) { toggleButtons(true); return; } if (songExists) { toggleButtons(false); SteamAPI.RequestPlay(new GameplayModifiers(_gameplaySetupViewController.gameplayModifiers)); } } catch (Exception e) { Logger.Error(e); } }