ScoreSaberDatabaseDownloader.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using Mobcast.Coffee.AssetSystem;
  2. using SongBrowser.DataAccess;
  3. using SongBrowser.DataAccess.Network;
  4. using System;
  5. using System.Collections;
  6. using UnityEngine;
  7. using UnityEngine.Networking;
  8. using Logger = SongBrowser.Logging.Logger;
  9. namespace SongBrowser.UI
  10. {
  11. public class ScoreSaberDatabaseDownloader : MonoBehaviour
  12. {
  13. public const String SCRAPED_SCORE_SABER_JSON_URL = "https://wes.ams3.digitaloceanspaces.com/beatstar/bssb.json";
  14. public static ScoreSaberDatabaseDownloader Instance;
  15. public static ScoreSaberDataFile ScoreSaberDataFile = null;
  16. public Action onScoreSaberDataDownloaded;
  17. private readonly byte[] _buffer = new byte[4 * 1048576];
  18. /// <summary>
  19. /// Awake.
  20. /// </summary>
  21. private void Awake()
  22. {
  23. Logger.Trace("Awake-ScoreSaberDatabaseDownloader()");
  24. if (Instance == null)
  25. {
  26. Instance = this;
  27. }
  28. }
  29. /// <summary>
  30. /// Acquire any UI elements from Beat saber that we need. Wait for the song list to be loaded.
  31. /// </summary>
  32. public void Start()
  33. {
  34. Logger.Trace("Start()");
  35. StartCoroutine(WaitForDownload());
  36. }
  37. private void DownloadScoreSaberData()
  38. {
  39. }
  40. /// <summary>
  41. /// Wait for score saber related files to download.
  42. /// </summary>
  43. /// <returns></returns>
  44. private IEnumerator WaitForDownload()
  45. {
  46. if (ScoreSaberDatabaseDownloader.ScoreSaberDataFile != null)
  47. {
  48. Logger.Info("Using cached copy of ScoreSaberData...");
  49. }
  50. else
  51. {
  52. SongBrowserApplication.MainProgressBar.ShowMessage("Downloading BeatStar data...", 5.0f);
  53. Logger.Info("Attempting to download: {0}", ScoreSaberDatabaseDownloader.SCRAPED_SCORE_SABER_JSON_URL);
  54. using (UnityWebRequest www = UnityWebRequest.Get(ScoreSaberDatabaseDownloader.SCRAPED_SCORE_SABER_JSON_URL))
  55. {
  56. // Use 4MB cache, large enough for this file to grow for awhile.
  57. www.SetCacheable(new CacheableDownloadHandlerScoreSaberData(www, _buffer));
  58. yield return www.SendWebRequest();
  59. Logger.Debug("Returned from web request!...");
  60. try
  61. {
  62. ScoreSaberDatabaseDownloader.ScoreSaberDataFile = (www.downloadHandler as CacheableDownloadHandlerScoreSaberData).ScoreSaberDataFile;
  63. Logger.Info("Success downloading ScoreSaber data!");
  64. SongBrowserApplication.MainProgressBar.ShowMessage("Success downloading BeatStar data...", 5.0f);
  65. onScoreSaberDataDownloaded?.Invoke();
  66. }
  67. catch (System.InvalidOperationException)
  68. {
  69. Logger.Error("Failed to download ScoreSaber data file...");
  70. }
  71. catch (Exception e)
  72. {
  73. Logger.Exception("Exception trying to download ScoreSaber data file...", e);
  74. }
  75. }
  76. }
  77. }
  78. }
  79. }