CalculateUserBetaProgramSetting.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. using System;
  2. using UnityEditor;
  3. using Codice.Client.Common.Threading;
  4. using Codice.LogWrapper;
  5. using Unity.PlasticSCM.Editor.WebApi;
  6. namespace Unity.PlasticSCM.Editor.Beta
  7. {
  8. [InitializeOnLoad]
  9. internal static class CalculateUserBetaProgramSetting
  10. {
  11. static CalculateUserBetaProgramSetting()
  12. {
  13. EditorApplication.update += RunOnceWhenAccessTokenIsInitialized;
  14. }
  15. static void RunOnceWhenAccessTokenIsInitialized()
  16. {
  17. if (string.IsNullOrEmpty(CloudProjectSettings.accessToken))
  18. return;
  19. if (CollabPlugin.IsEnabled())
  20. return;
  21. Execute(CloudProjectSettings.accessToken);
  22. EditorApplication.update -= RunOnceWhenAccessTokenIsInitialized;
  23. }
  24. static void Execute(string unityAccessToken)
  25. {
  26. if (SessionState.GetInt(
  27. IS_USER_BETA_PROGRAM_ALREADY_CALCULATED_KEY,
  28. BETA_PROGRAM_NOT_CALCULATED) == BETA_PROGRAM_ENABLED)
  29. {
  30. PlasticMenuItem.Add();
  31. return;
  32. }
  33. PlasticApp.InitializeIfNeeded();
  34. EnableUserBetaProgramIfNeeded(unityAccessToken);
  35. }
  36. static void EnableUserBetaProgramIfNeeded(string unityAccessToken)
  37. {
  38. int ini = Environment.TickCount;
  39. UnityPackageBetaEnrollResponse response = null;
  40. IThreadWaiter waiter = ThreadWaiter.GetWaiter(10);
  41. waiter.Execute(
  42. /*threadOperationDelegate*/ delegate
  43. {
  44. response = PlasticScmRestApiClient.IsBetaEnabled(unityAccessToken);
  45. },
  46. /*afterOperationDelegate*/ delegate
  47. {
  48. mLog.DebugFormat(
  49. "IsBetaEnabled time {0} ms",
  50. Environment.TickCount - ini);
  51. if (waiter.Exception != null)
  52. {
  53. ExceptionsHandler.LogException(
  54. "CalculateUserBetaProgramSetting",
  55. waiter.Exception);
  56. SetBetaProgramNotEnabled();
  57. return;
  58. }
  59. if (response == null)
  60. {
  61. SetBetaProgramNotEnabled();
  62. return;
  63. }
  64. if (response.Error != null)
  65. {
  66. mLog.ErrorFormat(
  67. "Unable to retrieve is beta enabled: {0} [code {1}]",
  68. response.Error.Message,
  69. response.Error.ErrorCode);
  70. SetBetaProgramNotEnabled();
  71. return;
  72. }
  73. if (!response.IsBetaEnabled)
  74. {
  75. mLog.InfoFormat(
  76. "Beta is disabled for accessToken: {0}",
  77. unityAccessToken);
  78. SetBetaProgramNotEnabled();
  79. return;
  80. }
  81. SessionState.SetInt(
  82. IS_USER_BETA_PROGRAM_ALREADY_CALCULATED_KEY,
  83. BETA_PROGRAM_ENABLED);
  84. PlasticMenuItem.Add();
  85. });
  86. }
  87. static void SetBetaProgramNotEnabled()
  88. {
  89. SessionState.SetInt(
  90. IS_USER_BETA_PROGRAM_ALREADY_CALCULATED_KEY,
  91. BETA_PROGRAM_NOT_ENABLED);
  92. }
  93. const string IS_USER_BETA_PROGRAM_ALREADY_CALCULATED_KEY =
  94. "PlasticSCM.UserBetaProgram.IsAlreadyCalculated";
  95. const int BETA_PROGRAM_NOT_CALCULATED = 0;
  96. const int BETA_PROGRAM_NOT_ENABLED = 1;
  97. const int BETA_PROGRAM_ENABLED = 2;
  98. static readonly ILog mLog = LogManager.GetLogger("CalculateUserBetaProgramSetting");
  99. }
  100. }