UnityGame/Library/PackageCache/com.unity.collab-proxy/Editor/PlasticSCM/UnityConfigurationChecker.cs
2024-10-27 10:53:47 +03:00

127 lines
4.3 KiB
C#

using System.IO;
using UnityEditor;
using Codice.Client.Common;
using Codice.Utils;
using Unity.PlasticSCM.Editor.Tool;
using Unity.PlasticSCM.Editor.Views;
namespace Unity.PlasticSCM.Editor
{
internal static class UnityConfigurationChecker
{
internal static void SynchronizeUnityEditionToken()
{
string plasticClientBinDir = PlasticInstallPath.GetClientBinDir();
if (!string.IsNullOrEmpty(plasticClientBinDir) && !IsPlasticInstalling())
SetupUnityEditionToken.FromPlasticInstallation(plasticClientBinDir);
}
internal static bool NeedsConfiguration()
{
SynchronizeUnityEditionToken();
if (ConfigurationChecker.NeedConfiguration())
return true;
if (ClientConfig.Get().GetClientConfigData().WorkingMode == "SSOWorkingMode" &&
!CmConnection.Get().IsAnyTokenConfigured())
return true;
return false;
}
static bool IsPlasticInstalling()
{
if (!EditorWindow.HasOpenInstances<DownloadPlasticExeDialog>())
return false;
DownloadPlasticExeDialog window = EditorWindow.
GetWindow<DownloadPlasticExeDialog>(null,false);
if (window == null)
return false;
return window.IsPlasticInstalling;
}
}
// The plugin rely on the "cloudedition.token" to be created in the "plastic4e config folder, instead of checking
// the one in the UVCS installation directory, since it can run without an existing installation.
internal static class SetupUnityEditionToken
{
// When called from the Hub; if the UVCS installation directory is found, synchronize the token file from it.
// Else, create the "cloudedition.token" file unconditionally so it's treated as a Cloud Edition going forward.
internal static void CreateCloudEditionTokenIfNeeded()
{
string plasticClientBinDir = PlasticInstallPath.GetClientBinDir();
if (!string.IsNullOrEmpty(plasticClientBinDir))
{
FromPlasticInstallation(plasticClientBinDir);
return;
}
string tokenFilePath = UserConfigFolder.GetConfigFile(EditionToken.CLOUD_EDITION_FILE_NAME);
if (!File.Exists(tokenFilePath))
File.Create(tokenFilePath).Dispose();
}
// Synchronize the "cloudedition.token" file between the installation directory and the "plastic4" config folder
internal static void FromPlasticInstallation(string plasticClientBinDir)
{
bool isCloudPlasticInstall = IsPlasticInstallOfEdition(
plasticClientBinDir,
EditionToken.CLOUD_EDITION_FILE_NAME);
bool isDvcsPlasticInstall = IsPlasticInstallOfEdition(
plasticClientBinDir,
EditionToken.DVCS_EDITION_FILE_NAME);
SetupTokenFiles(
isCloudPlasticInstall,
isDvcsPlasticInstall);
}
static void SetupTokenFiles(
bool isCloudPlasticInstall,
bool isDvcsPlasticInstall)
{
string unityCloudEditionTokenFile = UserConfigFolder.GetConfigFile(
EditionToken.CLOUD_EDITION_FILE_NAME);
string unityDvcsEditionTokenFile = UserConfigFolder.GetConfigFile(
EditionToken.DVCS_EDITION_FILE_NAME);
CreateOrDeleteTokenFile(isCloudPlasticInstall, unityCloudEditionTokenFile);
CreateOrDeleteTokenFile(isDvcsPlasticInstall, unityDvcsEditionTokenFile);
}
static void CreateOrDeleteTokenFile(bool isEdition, string editionTokenFile)
{
if (isEdition && !File.Exists(editionTokenFile))
{
File.Create(editionTokenFile).Dispose();
return;
}
if (!isEdition && File.Exists(editionTokenFile))
{
File.Delete(editionTokenFile);
return;
}
}
static bool IsPlasticInstallOfEdition(
string plasticClientBinDir,
string editionFileName)
{
return File.Exists(Path.Combine(
plasticClientBinDir,
editionFileName));
}
}
}