PO/Library/PackageCache/com.unity.collab-proxy@1.9.0/Editor/PlasticSCM/Beta/CalculateUserBetaProgramSet...

131 lines
3.7 KiB
C#

using System;
using UnityEditor;
using Codice.Client.Common.Threading;
using Codice.LogWrapper;
using Unity.PlasticSCM.Editor.WebApi;
namespace Unity.PlasticSCM.Editor.Beta
{
[InitializeOnLoad]
internal static class CalculateUserBetaProgramSetting
{
static CalculateUserBetaProgramSetting()
{
EditorApplication.update += RunOnceWhenAccessTokenIsInitialized;
}
static void RunOnceWhenAccessTokenIsInitialized()
{
if (string.IsNullOrEmpty(CloudProjectSettings.accessToken))
return;
if (CollabPlugin.IsEnabled())
return;
Execute(CloudProjectSettings.accessToken);
EditorApplication.update -= RunOnceWhenAccessTokenIsInitialized;
}
static void Execute(string unityAccessToken)
{
if (SessionState.GetInt(
IS_USER_BETA_PROGRAM_ALREADY_CALCULATED_KEY,
BETA_PROGRAM_NOT_CALCULATED) == BETA_PROGRAM_ENABLED)
{
PlasticMenuItem.Add();
return;
}
PlasticApp.InitializeIfNeeded();
EnableUserBetaProgramIfNeeded(unityAccessToken);
}
static void EnableUserBetaProgramIfNeeded(string unityAccessToken)
{
int ini = Environment.TickCount;
UnityPackageBetaEnrollResponse response = null;
IThreadWaiter waiter = ThreadWaiter.GetWaiter(10);
waiter.Execute(
/*threadOperationDelegate*/ delegate
{
response = PlasticScmRestApiClient.IsBetaEnabled(unityAccessToken);
},
/*afterOperationDelegate*/ delegate
{
mLog.DebugFormat(
"IsBetaEnabled time {0} ms",
Environment.TickCount - ini);
if (waiter.Exception != null)
{
ExceptionsHandler.LogException(
"CalculateUserBetaProgramSetting",
waiter.Exception);
SetBetaProgramNotEnabled();
return;
}
if (response == null)
{
SetBetaProgramNotEnabled();
return;
}
if (response.Error != null)
{
mLog.ErrorFormat(
"Unable to retrieve is beta enabled: {0} [code {1}]",
response.Error.Message,
response.Error.ErrorCode);
SetBetaProgramNotEnabled();
return;
}
if (!response.IsBetaEnabled)
{
mLog.InfoFormat(
"Beta is disabled for accessToken: {0}",
unityAccessToken);
SetBetaProgramNotEnabled();
return;
}
SessionState.SetInt(
IS_USER_BETA_PROGRAM_ALREADY_CALCULATED_KEY,
BETA_PROGRAM_ENABLED);
PlasticMenuItem.Add();
});
}
static void SetBetaProgramNotEnabled()
{
SessionState.SetInt(
IS_USER_BETA_PROGRAM_ALREADY_CALCULATED_KEY,
BETA_PROGRAM_NOT_ENABLED);
}
const string IS_USER_BETA_PROGRAM_ALREADY_CALCULATED_KEY =
"PlasticSCM.UserBetaProgram.IsAlreadyCalculated";
const int BETA_PROGRAM_NOT_CALCULATED = 0;
const int BETA_PROGRAM_NOT_ENABLED = 1;
const int BETA_PROGRAM_ENABLED = 2;
static readonly ILog mLog = LogManager.GetLogger("CalculateUserBetaProgramSetting");
}
}