130 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			130 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
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// 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.
 | |
|         /// </summary>
 | |
|         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));
 | |
|         }
 | |
|     }
 | |
| } |