131 lines
3.7 KiB
C#
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");
|
|||
|
}
|
|||
|
}
|