Пример #1
0
 public void ToggleFavorite(string levelId)
 {
     if (BeatSaverDownloaderHelper.favoriteSongs.Any(x => x == levelId))
     {
         BeatSaverDownloaderHelper.favoriteSongs.Remove(levelId);
         _favButton.SetButtonIcon(Sprites.addToFavorites);
     }
     else
     {
         BeatSaverDownloaderHelper.favoriteSongs.Add(levelId);
         _favButton.SetButtonIcon(Sprites.removeFromFavorites);
     }
     BeatSaverDownloaderHelper.SaveDownloaderConfig();
 }
Пример #2
0
        public void SetSongInfo(IDifficultyBeatmap songInfo, LevelCompletionResults results)
        {
            if (lastSong != songInfo)
            {
                Misc.Logger.Info("Updating song info on results screen!");
                lastSong = songInfo;

                _songNameText.text   = $"{songInfo.level.songName} <size=80%>{songInfo.level.songSubName}</size>";
                _scoreText.text      = ScoreFormatter.Format(results.score);
                _difficultyText.text = songInfo.difficulty.Name();
                _rankText.text       = RankModel.GetRankName(results.rank);
                _goodCutsText.text   = $"{results.goodCutsCount}<size=50%> / {songInfo.beatmapData.notesCount}";
                _fullComboText.gameObject.SetActive(results.fullCombo);

                if (IllusionInjector.PluginManager.Plugins.Any(x => x.Name == "BeatSaver Downloader"))
                {
                    _firstVote = true;

                    _favButton.onClick.RemoveAllListeners();
                    _favButton.onClick.AddListener(() => ToggleFavorite(songInfo.level.levelID));

                    BeatSaverDownloaderHelper.LoadDownloaderConfig();
                    _favButton.interactable = true;
                    _favButton.SetButtonIcon(BeatSaverDownloaderHelper.favoriteSongs.Any(x => x == songInfo.level.levelID) ? Sprites.removeFromFavorites : Sprites.addToFavorites);

                    VoteType vote = BeatSaverDownloaderHelper.GetVoteForSong(songInfo.level.levelID);

                    _upvoteButton.interactable   = false;
                    _downvoteButton.interactable = false;
                    _ratingText.text             = "LOADING...";

                    SongDownloader.Instance.RequestSongByLevelID(songInfo.level.levelID.Substring(0, 32), (song) =>
                    {
                        _ratingText.text = (int.Parse(song.upvotes) - int.Parse(song.downvotes)).ToString();

                        _upvoteButton.interactable   = (vote != VoteType.Upvote && BeatSaverDownloaderHelper.apiAccessToken != BeatSaverDownloaderHelper.apiTokenPlaceholder);
                        _downvoteButton.interactable = (vote != VoteType.Downvote && BeatSaverDownloaderHelper.apiAccessToken != BeatSaverDownloaderHelper.apiTokenPlaceholder);

                        _upvoteButton.onClick.RemoveAllListeners();
                        _downvoteButton.onClick.RemoveAllListeners();
                        _upvoteButton.onClick.AddListener(() => StartCoroutine(VoteForSong(song.id, songInfo.level.levelID, true)));
                        _downvoteButton.onClick.AddListener(() => StartCoroutine(VoteForSong(song.id, songInfo.level.levelID, false)));
                    });
                }
            }
        }
Пример #3
0
        public IEnumerator VoteForSong(string key, string levelId, bool upvote)
        {
            Misc.Logger.Info($"Voting for song... key: {key}, levelId: {levelId}, voteType: {(upvote ? "Upvote" : "Downvote")}");

            _upvoteButton.interactable   = false;
            _downvoteButton.interactable = false;

            UnityWebRequest voteWWW = UnityWebRequest.Get($"{Config.Instance.BeatSaverURL}/api/songs/vote/{key}/{(upvote ? 1 : 0)}/{BeatSaverDownloaderHelper.apiAccessToken}");

            voteWWW.timeout = 30;
            yield return(voteWWW.SendWebRequest());

            if (voteWWW.isNetworkError || voteWWW.isHttpError)
            {
                Misc.Logger.Error(voteWWW.error);
                _ratingText.text = voteWWW.error;
            }
            else
            {
                if (!_firstVote)
                {
                    yield return(new WaitForSecondsRealtime(3f));
                }

                _firstVote = false;

                switch (voteWWW.responseCode)
                {
                case 200:
                {
                    JSONNode node = JSON.Parse(voteWWW.downloadHandler.text);
                    _ratingText.text = (int.Parse(node["upVotes"]) - int.Parse(node["downVotes"])).ToString();

                    if (upvote)
                    {
                        _upvoteButton.interactable   = false;
                        _downvoteButton.interactable = true;
                    }
                    else
                    {
                        _downvoteButton.interactable = false;
                        _upvoteButton.interactable   = true;
                    }

                    if (!BeatSaverDownloaderHelper.votedSongs.ContainsKey(levelId.Substring(0, 32)))
                    {
                        BeatSaverDownloaderHelper.votedSongs.Add(levelId.Substring(0, 32), new SongVote(key, upvote ? VoteType.Upvote : VoteType.Downvote));
                        BeatSaverDownloaderHelper.SaveDownloaderConfig();
                    }
                    else if (BeatSaverDownloaderHelper.votedSongs[levelId.Substring(0, 32)].voteType != (upvote ? VoteType.Upvote : VoteType.Downvote))
                    {
                        BeatSaverDownloaderHelper.votedSongs[levelId.Substring(0, 32)] = new SongVote(key, upvote ? VoteType.Upvote : VoteType.Downvote);
                        BeatSaverDownloaderHelper.SaveDownloaderConfig();
                    }
                }; break;

                case 403:
                {
                    _upvoteButton.interactable   = false;
                    _downvoteButton.interactable = false;
                    _ratingText.text             = "Read-only token";
                }; break;

                case 401:
                {
                    _upvoteButton.interactable   = false;
                    _downvoteButton.interactable = false;
                    _ratingText.text             = "Token not found";
                }; break;

                case 400:
                {
                    _upvoteButton.interactable   = false;
                    _downvoteButton.interactable = false;
                    _ratingText.text             = "Bad token";
                }; break;

                default:
                {
                    _upvoteButton.interactable   = true;
                    _downvoteButton.interactable = true;
                    _ratingText.text             = "Error " + voteWWW.responseCode;
                }; break;
                }
            }
        }