public static void OnGUI()
 {
     GUILayout.Space(10f);
     if (!InternalEditorUtility.HasPro())
     {
         GUILayout.Label(EditorGUIUtility.TempContent("You need to have a Pro license to use the cache server.", EditorGUIUtility.GetHelpIcon(MessageType.Warning)), EditorStyles.helpBox, new GUILayoutOption[0]);
     }
     EditorGUI.BeginDisabledGroup(!InternalEditorUtility.HasPro());
     if (!CacheServerPreferences.s_PrefsLoaded)
     {
         CacheServerPreferences.ReadPreferences();
         CacheServerPreferences.s_PrefsLoaded = true;
     }
     EditorGUI.BeginChangeCheck();
     CacheServerPreferences.s_CacheServerEnabled = EditorGUILayout.Toggle("Use Cache Server", CacheServerPreferences.s_CacheServerEnabled, new GUILayoutOption[0]);
     EditorGUI.BeginDisabledGroup(!CacheServerPreferences.s_CacheServerEnabled);
     CacheServerPreferences.s_CacheServerIPAddress = EditorGUILayout.TextField("IP Address", CacheServerPreferences.s_CacheServerIPAddress, new GUILayoutOption[0]);
     if (GUI.changed)
     {
         CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Unknown;
     }
     GUILayout.Space(5f);
     if (GUILayout.Button("Check Connection", new GUILayoutOption[]
     {
         GUILayout.Width(150f)
     }))
     {
         if (InternalEditorUtility.CanConnectToCacheServer())
         {
             CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Success;
         }
         else
         {
             CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Failure;
         }
     }
     GUILayout.Space(-25f);
     CacheServerPreferences.ConnectionState connectionState = CacheServerPreferences.s_ConnectionState;
     if (connectionState != CacheServerPreferences.ConnectionState.Success)
     {
         if (connectionState == CacheServerPreferences.ConnectionState.Failure)
         {
             EditorGUILayout.HelpBox("Connection failed.", MessageType.Warning, false);
         }
     }
     else
     {
         EditorGUILayout.HelpBox("Connection successful.", MessageType.Info, false);
     }
     EditorGUI.EndDisabledGroup();
     if (EditorGUI.EndChangeCheck())
     {
         CacheServerPreferences.WritePreferences();
         CacheServerPreferences.ReadPreferences();
     }
     EditorGUI.EndDisabledGroup();
 }
 public static void ReadPreferences()
 {
     CacheServerPreferences.s_CacheServerIPAddress = EditorPrefs.GetString("CacheServerIPAddress", CacheServerPreferences.s_CacheServerIPAddress);
     CacheServerPreferences.s_CacheServerMode      = (CacheServerPreferences.CacheServerMode)EditorPrefs.GetInt("CacheServerMode", (!EditorPrefs.GetBool("CacheServerEnabled")) ? 2 : 1);
     CacheServerPreferences.s_LocalCacheServerSize = EditorPrefs.GetInt("LocalCacheServerSize", 10);
     CacheServerPreferences.s_CachePath            = EditorPrefs.GetString("LocalCacheServerPath");
     CacheServerPreferences.s_EnableCustomPath     = EditorPrefs.GetBool("LocalCacheServerCustomPath");
     if (CacheServerPreferences.IsCollabCacheEnabled())
     {
         CacheServerPreferences.s_CollabCacheIPAddress = EditorPrefs.GetString("CollabCacheIPAddress", CacheServerPreferences.s_CollabCacheIPAddress);
         CacheServerPreferences.s_CollabCacheEnabled   = EditorPrefs.GetBool("CollabCacheEnabled");
     }
 }
 private static string GetForcedAssetPipelineWarning()
 {
     if (s_ForcedAssetPipelineWarning == null)
     {
         if (CacheServerPreferences.GetEnvironmentAssetPipelineOverride())
             s_ForcedAssetPipelineWarning = "Asset pipeline mode was forced via the UNITY_ASSETS_V2_KATANA_TESTS environment variable. The above setting is not in effect before restarting without the environment variable set.";
         else if (CacheServerPreferences.GetCommandLineAssetPipelineOverride() != 0)
             s_ForcedAssetPipelineWarning = "Asset pipeline mode was forced via command line argument using the -adb1 or -adb2 command line argument. The above setting is not in effect before restarting without the command line argument.";
         else if (CacheServerPreferences.GetMagicFileAssetPipelineOverride())
             s_ForcedAssetPipelineWarning = "Asset pipeline mode was forced via via magic adb2.txt file in project root. The above setting is not in effect before restarting without the magic file.";
         else
             s_ForcedAssetPipelineWarning = "";
     }
     return s_ForcedAssetPipelineWarning;
 }
 public static void WritePreferences()
 {
     if (CacheServerPreferences.GetCommandLineRemoteAddressOverride() == null)
     {
         CacheServerPreferences.CacheServerMode @int = (CacheServerPreferences.CacheServerMode)EditorPrefs.GetInt("CacheServerMode");
         string @string = EditorPrefs.GetString("LocalCacheServerPath");
         bool   @bool   = EditorPrefs.GetBool("LocalCacheServerCustomPath");
         bool   flag    = false;
         if (@int != CacheServerPreferences.s_CacheServerMode && @int == CacheServerPreferences.CacheServerMode.Local)
         {
             flag = true;
         }
         if (CacheServerPreferences.s_EnableCustomPath && @string != CacheServerPreferences.s_CachePath)
         {
             flag = true;
         }
         if (CacheServerPreferences.s_EnableCustomPath != @bool && CacheServerPreferences.s_CachePath != LocalCacheServer.GetCacheLocation() && CacheServerPreferences.s_CachePath != "")
         {
             flag = true;
         }
         if (flag)
         {
             CacheServerPreferences.s_LocalCacheServerUsedSize = -1L;
             string text = (CacheServerPreferences.s_CacheServerMode != CacheServerPreferences.CacheServerMode.Local) ? "You have disabled the local cache." : "You have changed the location of the local cache storage.";
             text = text + " Do you want to delete the old locally cached data at " + LocalCacheServer.GetCacheLocation() + "?";
             if (EditorUtility.DisplayDialog("Delete old Cache", text, "Delete", "Don't Delete"))
             {
                 LocalCacheServer.Clear();
                 CacheServerPreferences.s_LocalCacheServerUsedSize = -1L;
             }
         }
         EditorPrefs.SetString("CacheServerIPAddress", CacheServerPreferences.s_CacheServerIPAddress);
         EditorPrefs.SetInt("CacheServerMode", (int)CacheServerPreferences.s_CacheServerMode);
         EditorPrefs.SetInt("LocalCacheServerSize", CacheServerPreferences.s_LocalCacheServerSize);
         EditorPrefs.SetString("LocalCacheServerPath", CacheServerPreferences.s_CachePath);
         EditorPrefs.SetBool("LocalCacheServerCustomPath", CacheServerPreferences.s_EnableCustomPath);
         LocalCacheServer.Setup();
         if (flag)
         {
             GUIUtility.ExitGUI();
         }
     }
 }
		public static void OnGUI()
		{
			EventType type = Event.current.type;
			if (CacheServerPreferences.s_Constants == null)
			{
				CacheServerPreferences.s_Constants = new CacheServerPreferences.Constants();
			}
			if (!InternalEditorUtility.HasTeamLicense())
			{
				GUILayout.Label(EditorGUIUtility.TempContent("You need to have a Pro or Team license to use the cache server.", EditorGUIUtility.GetHelpIcon(MessageType.Warning)), EditorStyles.helpBox, new GUILayoutOption[0]);
			}
			using (new EditorGUI.DisabledScope(!InternalEditorUtility.HasTeamLicense()))
			{
				if (!CacheServerPreferences.s_PrefsLoaded)
				{
					CacheServerPreferences.ReadPreferences();
					if (CacheServerPreferences.s_CacheServerMode != CacheServerPreferences.CacheServerMode.Disabled && CacheServerPreferences.s_ConnectionState == CacheServerPreferences.ConnectionState.Unknown)
					{
						if (InternalEditorUtility.CanConnectToCacheServer())
						{
							CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Success;
						}
						else
						{
							CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Failure;
						}
					}
					CacheServerPreferences.s_PrefsLoaded = true;
				}
				EditorGUI.BeginChangeCheck();
				CacheServerPreferences.s_CacheServerMode = (CacheServerPreferences.CacheServerMode)EditorGUILayout.EnumPopup("Cache Server Mode", CacheServerPreferences.s_CacheServerMode, new GUILayoutOption[0]);
				if (CacheServerPreferences.s_CacheServerMode == CacheServerPreferences.CacheServerMode.Remote)
				{
					CacheServerPreferences.s_CacheServerIPAddress = EditorGUILayout.DelayedTextField("IP Address", CacheServerPreferences.s_CacheServerIPAddress, new GUILayoutOption[0]);
					if (GUI.changed)
					{
						CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Unknown;
					}
					GUILayout.Space(5f);
					if (GUILayout.Button("Check Connection", new GUILayoutOption[]
					{
						GUILayout.Width(150f)
					}))
					{
						if (InternalEditorUtility.CanConnectToCacheServer())
						{
							CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Success;
						}
						else
						{
							CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Failure;
						}
					}
					GUILayout.Space(-25f);
					CacheServerPreferences.ConnectionState connectionState = CacheServerPreferences.s_ConnectionState;
					if (connectionState != CacheServerPreferences.ConnectionState.Success)
					{
						if (connectionState != CacheServerPreferences.ConnectionState.Failure)
						{
							if (connectionState == CacheServerPreferences.ConnectionState.Unknown)
							{
								GUILayout.Space(44f);
							}
						}
						else
						{
							EditorGUILayout.HelpBox("Connection failed.", MessageType.Warning, false);
						}
					}
					else
					{
						EditorGUILayout.HelpBox("Connection successful.", MessageType.Info, false);
					}
				}
				else if (CacheServerPreferences.s_CacheServerMode == CacheServerPreferences.CacheServerMode.Local)
				{
					CacheServerPreferences.s_LocalCacheServerSize = EditorGUILayout.IntSlider(CacheServerPreferences.Styles.maxCacheSize, CacheServerPreferences.s_LocalCacheServerSize, 1, 200, new GUILayoutOption[0]);
					CacheServerPreferences.s_EnableCustomPath = EditorGUILayout.Toggle(CacheServerPreferences.Styles.customCacheLocation, CacheServerPreferences.s_EnableCustomPath, new GUILayoutOption[0]);
					if (CacheServerPreferences.s_EnableCustomPath)
					{
						GUIStyle miniButton = EditorStyles.miniButton;
						GUILayout.BeginHorizontal(new GUILayoutOption[0]);
						EditorGUILayout.PrefixLabel(CacheServerPreferences.Styles.cacheFolderLocation, miniButton);
						Rect rect = GUILayoutUtility.GetRect(GUIContent.none, miniButton);
						GUIContent content = (!string.IsNullOrEmpty(CacheServerPreferences.s_CachePath)) ? new GUIContent(CacheServerPreferences.s_CachePath) : CacheServerPreferences.Styles.browse;
						if (EditorGUI.DropdownButton(rect, content, FocusType.Passive, miniButton))
						{
							string folder = CacheServerPreferences.s_CachePath;
							string text = EditorUtility.OpenFolderPanel(CacheServerPreferences.Styles.browseCacheLocation.text, folder, "");
							if (!string.IsNullOrEmpty(text))
							{
								if (LocalCacheServer.CheckValidCacheLocation(text))
								{
									CacheServerPreferences.s_CachePath = text;
									CacheServerPreferences.WritePreferences();
								}
								else
								{
									EditorUtility.DisplayDialog("Invalid Cache Location", "The directory " + text + " contains some files which don't look like Unity Cache server files. Please delete the directory contents or choose another directory.", "OK");
								}
								GUIUtility.ExitGUI();
							}
						}
						GUILayout.EndHorizontal();
					}
					else
					{
						CacheServerPreferences.s_CachePath = "";
					}
					bool flag = LocalCacheServer.CheckCacheLocationExists();
					if (flag)
					{
						GUIContent label = EditorGUIUtility.TextContent("Cache size is unknown");
						if (CacheServerPreferences.s_LocalCacheServerUsedSize != -1L)
						{
							label = EditorGUIUtility.TextContent("Cache size is " + EditorUtility.FormatBytes(CacheServerPreferences.s_LocalCacheServerUsedSize));
						}
						GUILayout.BeginHorizontal(new GUILayoutOption[0]);
						GUIStyle miniButton2 = EditorStyles.miniButton;
						EditorGUILayout.PrefixLabel(label, miniButton2);
						Rect rect2 = GUILayoutUtility.GetRect(GUIContent.none, miniButton2);
						if (EditorGUI.Button(rect2, CacheServerPreferences.Styles.enumerateCache, miniButton2))
						{
							CacheServerPreferences.s_LocalCacheServerUsedSize = ((!LocalCacheServer.CheckCacheLocationExists()) ? 0L : FileUtil.GetDirectorySize(LocalCacheServer.GetCacheLocation()));
						}
						GUILayout.EndHorizontal();
						GUILayout.BeginHorizontal(new GUILayoutOption[0]);
						GUIContent blankContent = EditorGUIUtility.blankContent;
						EditorGUILayout.PrefixLabel(blankContent, miniButton2);
						Rect rect3 = GUILayoutUtility.GetRect(GUIContent.none, miniButton2);
						if (EditorGUI.Button(rect3, CacheServerPreferences.Styles.cleanCache, miniButton2))
						{
							LocalCacheServer.Clear();
							CacheServerPreferences.s_LocalCacheServerUsedSize = 0L;
						}
						GUILayout.EndHorizontal();
					}
					else
					{
						EditorGUILayout.HelpBox("Local cache directory does not exist - please check that you can access the cache folder and are able to write to it", MessageType.Warning, false);
						CacheServerPreferences.s_LocalCacheServerUsedSize = -1L;
					}
					GUILayout.Label(CacheServerPreferences.Styles.cacheFolderLocation.text + ":", new GUILayoutOption[0]);
					GUILayout.Label(LocalCacheServer.GetCacheLocation(), CacheServerPreferences.s_Constants.cacheFolderLocation, new GUILayoutOption[0]);
				}
				if (EditorGUI.EndChangeCheck())
				{
					CacheServerPreferences.s_HasPendingChanges = true;
				}
				if (CacheServerPreferences.s_HasPendingChanges && GUIUtility.hotControl == 0)
				{
					CacheServerPreferences.s_HasPendingChanges = false;
					CacheServerPreferences.WritePreferences();
					CacheServerPreferences.ReadPreferences();
				}
			}
		}
        private void DoCacheServerSettings()
        {
            GUILayout.Space(10);
            GUILayout.Label(Content.cacheServer, EditorStyles.boldLabel);

            var overrideAddress = CacheServerPreferences.GetCommandLineRemoteAddressOverride();

            if (overrideAddress != null)
            {
                EditorGUILayout.HelpBox("Cache Server remote address forced via command line argument. To use the cache server address specified here please restart Unity without the -CacheServerIPAddress command line argument.", MessageType.Info, true);
            }

            int index = Mathf.Clamp((int)EditorSettings.cacheServerMode, 0, cacheServerModePopupList.Length - 1);

            CreatePopupMenu(Content.mode.text, cacheServerModePopupList, index, SetCacheServerMode);

            if (index != (int)CacheServerMode.Disabled)
            {
                bool isCacheServerEnabled = true;

                if (index == (int)CacheServerMode.AsPreferences)
                {
                    if (CacheServerPreferences.IsCacheServerV2Enabled)
                    {
                        var cacheServerIP = CacheServerPreferences.CachesServerV2Address;
                        cacheServerIP = string.IsNullOrEmpty(cacheServerIP) ? "Not set in preferences" : cacheServerIP;
                        EditorGUILayout.HelpBox(cacheServerIP, MessageType.None, false);
                    }
                    else
                    {
                        isCacheServerEnabled = false;
                        EditorGUILayout.HelpBox("Disabled", MessageType.None, false);
                    }
                }

                if (isCacheServerEnabled)
                {
                    var oldEndpoint = EditorSettings.cacheServerEndpoint;
                    var newEndpoint = EditorGUILayout.TextField(Content.cacheServerIPLabel, oldEndpoint);
                    if (newEndpoint != oldEndpoint)
                    {
                        EditorSettings.cacheServerEndpoint = newEndpoint;
                    }

                    EditorGUILayout.BeginHorizontal();

                    if (GUILayout.Button("Check Connection", GUILayout.Width(150)))
                    {
                        if (AssetDatabase.IsV2Enabled())
                        {
                            var    address = EditorSettings.cacheServerEndpoint.Split(':');
                            var    ip      = address[0];
                            UInt16 port    = 0; // If 0, will use the default set port
                            if (address.Length == 2)
                            {
                                port = Convert.ToUInt16(address[1]);
                            }

                            if (AssetDatabaseExperimental.CanConnectToCacheServer(ip, port))
                            {
                                m_CacheServerConnectionState = CacheServerConnectionState.Success;
                            }
                            else
                            {
                                m_CacheServerConnectionState = CacheServerConnectionState.Failure;
                            }
                        }
                        else
                        {
                            if (InternalEditorUtility.CanConnectToCacheServer())
                            {
                                m_CacheServerConnectionState = CacheServerConnectionState.Success;
                            }
                            else
                            {
                                m_CacheServerConnectionState = CacheServerConnectionState.Failure;
                            }
                        }
                    }

                    GUILayout.Space(25);

                    switch (m_CacheServerConnectionState)
                    {
                    case CacheServerConnectionState.Success:
                        EditorGUILayout.HelpBox("Connection successful.", MessageType.Info, true);
                        break;

                    case CacheServerConnectionState.Failure:
                        EditorGUILayout.HelpBox("Connection failed.", MessageType.Warning, true);
                        break;

                    case CacheServerConnectionState.Unknown:
                        GUILayout.Space(44);
                        break;
                    }

                    EditorGUILayout.EndHorizontal();

                    var old      = EditorSettings.cacheServerNamespacePrefix;
                    var newvalue = EditorGUILayout.TextField(Content.cacheServerNamespacePrefixLabel, old);
                    if (newvalue != old)
                    {
                        EditorSettings.cacheServerNamespacePrefix = newvalue;
                    }

                    EditorGUI.BeginChangeCheck();
                    bool enableDownload = EditorSettings.cacheServerEnableDownload;
                    enableDownload = EditorGUILayout.Toggle(Content.cacheServerEnableDownloadLabel, enableDownload);
                    if (EditorGUI.EndChangeCheck())
                    {
                        EditorSettings.cacheServerEnableDownload = enableDownload;
                    }

                    EditorGUI.BeginChangeCheck();
                    bool enableUpload = EditorSettings.cacheServerEnableUpload;
                    enableUpload = EditorGUILayout.Toggle(Content.cacheServerEnableUploadLabel, enableUpload);
                    if (EditorGUI.EndChangeCheck())
                    {
                        EditorSettings.cacheServerEnableUpload = enableUpload;
                    }

                    bool enableAuth = EditorSettings.cacheServerEnableAuth;
                    using (new EditorGUI.DisabledScope(enableAuth))
                    {
                        EditorGUI.BeginChangeCheck();
                        bool enableTls = EditorSettings.cacheServerEnableTls;
                        enableTls = EditorGUILayout.Toggle(Content.cacheServerEnableTlsLabel, enableTls);
                        if (EditorGUI.EndChangeCheck())
                        {
                            EditorSettings.cacheServerEnableTls = enableTls;
                        }
                    }

                    EditorGUI.BeginChangeCheck();
                    enableAuth = EditorGUILayout.Toggle(Content.cacheServerEnableAuthLabel, enableAuth);
                    if (EditorGUI.EndChangeCheck())
                    {
                        EditorSettings.cacheServerEnableAuth = enableAuth;
                        if (enableAuth)
                        {
                            EditorSettings.cacheServerEnableTls = true;
                        }
                    }

                    EditorGUI.indentLevel++;
                    using (new EditorGUI.DisabledScope(!enableAuth))
                    {
                        int authModeIndex = Convert.ToInt32(EditorUserSettings.GetConfigValue("cacheServerAuthMode"));
                        CreatePopupMenu(Content.mode.text, cacheServerAuthMode, authModeIndex, SetCacheServerAuthMode);

                        string oldUserVal = EditorUserSettings.GetConfigValue("cacheServerAuthUser");
                        var    newUserVal = EditorGUILayout.TextField(Content.cacheServerAuthUserLabel, oldUserVal);
                        if (newUserVal != oldUserVal)
                        {
                            EditorUserSettings.SetConfigValue("cacheServerAuthUser", newUserVal);
                        }

                        var oldPasswordVal = EditorUserSettings.GetConfigValue("cacheServerAuthPassword");
                        var newPasswordVal = EditorGUILayout.PasswordField(Content.cacheServerAuthPasswordLabel, oldPasswordVal);
                        if (newPasswordVal != oldPasswordVal)
                        {
                            EditorUserSettings.SetPrivateConfigValue("cacheServerAuthPassword", newPasswordVal);
                        }
                    }
                    EditorGUI.indentLevel--;
                }
            }
        }
        public static void OnGUI()
        {
            EventType type = Event.current.type;

            if (CacheServerPreferences.s_Constants == null)
            {
                CacheServerPreferences.s_Constants = new CacheServerPreferences.Constants();
            }
            GUILayout.Space(10f);
            if (!InternalEditorUtility.HasTeamLicense())
            {
                GUILayout.Label(EditorGUIUtility.TempContent("You need to have a Pro or Team license to use the cache server.", EditorGUIUtility.GetHelpIcon(MessageType.Warning)), EditorStyles.helpBox, new GUILayoutOption[0]);
            }
            using (new EditorGUI.DisabledScope(!InternalEditorUtility.HasTeamLicense()))
            {
                if (!CacheServerPreferences.s_PrefsLoaded)
                {
                    CacheServerPreferences.ReadPreferences();
                    if (CacheServerPreferences.s_CacheServerMode != CacheServerPreferences.CacheServerMode.Disabled && CacheServerPreferences.s_ConnectionState == CacheServerPreferences.ConnectionState.Unknown)
                    {
                        if (InternalEditorUtility.CanConnectToCacheServer())
                        {
                            CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Success;
                        }
                        else
                        {
                            CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Failure;
                        }
                    }
                    CacheServerPreferences.s_PrefsLoaded = true;
                }
                EditorGUI.BeginChangeCheck();
                if (Collab.instance.collabInfo.whitelisted && CacheServerPreferences.IsCollabCacheEnabled())
                {
                    CacheServerPreferences.s_CollabCacheEnabled = EditorGUILayout.Toggle("Use Collab Cache", CacheServerPreferences.s_CollabCacheEnabled, new GUILayoutOption[0]);
                    using (new EditorGUI.DisabledScope(!CacheServerPreferences.s_CollabCacheEnabled))
                    {
                        CacheServerPreferences.s_CollabCacheIPAddress = EditorGUILayout.TextField("Collab Cache IP Address", CacheServerPreferences.s_CollabCacheIPAddress, new GUILayoutOption[0]);
                    }
                }
                CacheServerPreferences.s_CacheServerMode = (CacheServerPreferences.CacheServerMode)EditorGUILayout.EnumPopup("Cache Server Mode", CacheServerPreferences.s_CacheServerMode, new GUILayoutOption[0]);
                if (CacheServerPreferences.s_CacheServerMode == CacheServerPreferences.CacheServerMode.Remote)
                {
                    CacheServerPreferences.s_CacheServerIPAddress = EditorGUILayout.DelayedTextField("IP Address", CacheServerPreferences.s_CacheServerIPAddress, new GUILayoutOption[0]);
                    if (GUI.changed)
                    {
                        CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Unknown;
                    }
                    GUILayout.Space(5f);
                    if (GUILayout.Button("Check Connection", new GUILayoutOption[]
                    {
                        GUILayout.Width(150f)
                    }))
                    {
                        if (InternalEditorUtility.CanConnectToCacheServer())
                        {
                            CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Success;
                        }
                        else
                        {
                            CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Failure;
                        }
                    }
                    GUILayout.Space(-25f);
                    CacheServerPreferences.ConnectionState connectionState = CacheServerPreferences.s_ConnectionState;
                    if (connectionState != CacheServerPreferences.ConnectionState.Success)
                    {
                        if (connectionState != CacheServerPreferences.ConnectionState.Failure)
                        {
                            if (connectionState == CacheServerPreferences.ConnectionState.Unknown)
                            {
                                GUILayout.Space(44f);
                            }
                        }
                        else
                        {
                            EditorGUILayout.HelpBox("Connection failed.", MessageType.Warning, false);
                        }
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("Connection successful.", MessageType.Info, false);
                    }
                }
                else if (CacheServerPreferences.s_CacheServerMode == CacheServerPreferences.CacheServerMode.Local)
                {
                    CacheServerPreferences.s_LocalCacheServerSize = EditorGUILayout.IntSlider(CacheServerPreferences.Styles.maxCacheSize, CacheServerPreferences.s_LocalCacheServerSize, 1, 200, new GUILayoutOption[0]);
                    CacheServerPreferences.s_EnableCustomPath     = EditorGUILayout.Toggle(CacheServerPreferences.Styles.customCacheLocation, CacheServerPreferences.s_EnableCustomPath, new GUILayoutOption[0]);
                    if (CacheServerPreferences.s_EnableCustomPath)
                    {
                        GUIStyle popup = EditorStyles.popup;
                        GUILayout.BeginHorizontal(new GUILayoutOption[0]);
                        EditorGUILayout.PrefixLabel(CacheServerPreferences.Styles.cacheFolderLocation, popup);
                        Rect       rect    = GUILayoutUtility.GetRect(GUIContent.none, popup);
                        GUIContent content = (!string.IsNullOrEmpty(CacheServerPreferences.s_CachePath)) ? new GUIContent(CacheServerPreferences.s_CachePath) : CacheServerPreferences.Styles.browse;
                        if (EditorGUI.ButtonMouseDown(rect, content, FocusType.Passive, popup))
                        {
                            string folder = CacheServerPreferences.s_CachePath;
                            string text   = EditorUtility.OpenFolderPanel(CacheServerPreferences.Styles.browseCacheLocation.text, folder, "");
                            if (!string.IsNullOrEmpty(text))
                            {
                                if (LocalCacheServer.CheckValidCacheLocation(text))
                                {
                                    CacheServerPreferences.s_CachePath = text;
                                    CacheServerPreferences.WritePreferences();
                                }
                                else
                                {
                                    EditorUtility.DisplayDialog("Invalid Cache Location", "The directory " + text + " contains some files which don't look like Unity Cache server files. Please delete the directory contents or choose another directory.", "OK");
                                }
                            }
                        }
                        GUILayout.EndHorizontal();
                    }
                    else
                    {
                        CacheServerPreferences.s_CachePath = "";
                    }
                    if (GUILayout.Button(CacheServerPreferences.Styles.cleanCache, new GUILayoutOption[]
                    {
                        GUILayout.Width(120f)
                    }))
                    {
                        LocalCacheServer.Clear();
                        CacheServerPreferences.s_LocalCacheServerUsedSize = 0L;
                    }
                    if (CacheServerPreferences.s_LocalCacheServerUsedSize == -1L)
                    {
                        CacheServerPreferences.s_LocalCacheServerUsedSize = FileUtil.GetDirectorySize(LocalCacheServer.GetCacheLocation());
                    }
                    GUILayout.Label(CacheServerPreferences.Styles.cacheSizeIs.text + " " + EditorUtility.FormatBytes(CacheServerPreferences.s_LocalCacheServerUsedSize), new GUILayoutOption[0]);
                    GUILayout.Label(CacheServerPreferences.Styles.cacheFolderLocation.text + ":", new GUILayoutOption[0]);
                    GUILayout.Label(LocalCacheServer.GetCacheLocation(), CacheServerPreferences.s_Constants.cacheFolderLocation, new GUILayoutOption[0]);
                }
                if (EditorGUI.EndChangeCheck())
                {
                    CacheServerPreferences.s_HasPendingChanges = true;
                }
                if ((CacheServerPreferences.s_HasPendingChanges && type == EventType.MouseUp) || type == EventType.KeyDown)
                {
                    CacheServerPreferences.WritePreferences();
                    CacheServerPreferences.ReadPreferences();
                    CacheServerPreferences.s_HasPendingChanges = false;
                }
            }
        }
        private void DoCacheServerSettings()
        {
            GUILayout.Space(10);
            GUILayout.Label(Content.cacheServer, EditorStyles.boldLabel);

            var overrideAddress = CacheServerPreferences.GetCommandLineRemoteAddressOverride();

            if (overrideAddress != null)
            {
                EditorGUILayout.HelpBox("Cache Server remote address forced via command line argument. To use the cache server address specified here please restart Unity without the -CacheServerIPAddress command line argument.", MessageType.Info, true);
            }

            int index = Mathf.Clamp((int)m_CacheServerMode.intValue, 0, cacheServerModePopupList.Length - 1);

            CreatePopupMenu(Content.mode.text, cacheServerModePopupList, index, SetCacheServerMode);

            if (index != (int)CacheServerMode.Disabled)
            {
                bool isCacheServerEnabled = true;

                if (index == (int)CacheServerMode.AsPreferences)
                {
                    if (CacheServerPreferences.IsCacheServerV2Enabled)
                    {
                        var cacheServerIP = CacheServerPreferences.CachesServerV2Address;
                        cacheServerIP = string.IsNullOrEmpty(cacheServerIP) ? "Not set in preferences" : cacheServerIP;
                        EditorGUILayout.HelpBox(cacheServerIP, MessageType.None, false);
                    }
                    else
                    {
                        isCacheServerEnabled = false;
                        EditorGUILayout.HelpBox("Disabled", MessageType.None, false);
                    }
                }

                if (isCacheServerEnabled)
                {
                    m_CacheServerList.DoLayoutList();

                    EditorGUILayout.BeginHorizontal();

                    if (GUILayout.Button("Check Connection", GUILayout.Width(150)))
                    {
                        if (InternalEditorUtility.CanConnectToCacheServer())
                        {
                            m_CacheServerConnectionState = CacheServerConnectionState.Success;
                        }
                        else
                        {
                            m_CacheServerConnectionState = CacheServerConnectionState.Failure;
                        }
                    }

                    GUILayout.Space(25);

                    switch (m_CacheServerConnectionState)
                    {
                    case CacheServerConnectionState.Success:
                        EditorGUILayout.HelpBox("Connection successful.", MessageType.Info, true);
                        break;

                    case CacheServerConnectionState.Failure:
                        EditorGUILayout.HelpBox("Connection failed.", MessageType.Warning, true);
                        break;

                    case CacheServerConnectionState.Unknown:
                        GUILayout.Space(44);
                        break;
                    }

                    EditorGUILayout.EndHorizontal();
                }
            }
        }
        public static void OnGUI()
        {
            GUILayout.Space(10f);
            if (!InternalEditorUtility.HasTeamLicense())
            {
                GUILayout.Label(EditorGUIUtility.TempContent("You need to have a Pro or Team license to use the cache server.", EditorGUIUtility.GetHelpIcon(MessageType.Warning)), EditorStyles.helpBox, new GUILayoutOption[0]);
            }
            using (new EditorGUI.DisabledScope(!InternalEditorUtility.HasTeamLicense()))
            {
                if (!CacheServerPreferences.s_PrefsLoaded)
                {
                    CacheServerPreferences.ReadPreferences();
                    if (CacheServerPreferences.s_CacheServerEnabled && CacheServerPreferences.s_ConnectionState == CacheServerPreferences.ConnectionState.Unknown)
                    {
                        if (InternalEditorUtility.CanConnectToCacheServer())
                        {
                            CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Success;
                        }
                        else
                        {
                            CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Failure;
                        }
                    }
                    CacheServerPreferences.s_PrefsLoaded = true;
                }
                EditorGUI.BeginChangeCheck();
                if (Collab.instance.collabInfo.whitelisted)
                {
                    CacheServerPreferences.s_CollabCacheEnabled = EditorGUILayout.Toggle("Use Collab Cache", CacheServerPreferences.s_CollabCacheEnabled, new GUILayoutOption[0]);
                    using (new EditorGUI.DisabledScope(!CacheServerPreferences.s_CollabCacheEnabled))
                    {
                        CacheServerPreferences.s_CollabCacheIPAddress = EditorGUILayout.TextField("Collab Cache IP Address", CacheServerPreferences.s_CollabCacheIPAddress, new GUILayoutOption[0]);
                    }
                }
                CacheServerPreferences.s_CacheServerEnabled = EditorGUILayout.Toggle("Use Cache Server", CacheServerPreferences.s_CacheServerEnabled, new GUILayoutOption[0]);
                using (new EditorGUI.DisabledScope(!CacheServerPreferences.s_CacheServerEnabled))
                {
                    Rect controlRect = EditorGUILayout.GetControlRect(true, new GUILayoutOption[0]);
                    int  controlID   = GUIUtility.GetControlID(FocusType.Keyboard, controlRect);
                    CacheServerPreferences.s_CacheServerIPAddress = EditorGUI.DelayedTextFieldInternal(controlRect, controlID, GUIContent.Temp("IP Address"), CacheServerPreferences.s_CacheServerIPAddress, null, EditorStyles.textField);
                    if (GUI.changed)
                    {
                        CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Unknown;
                        CacheServerPreferences.WritePreferences();
                    }
                    GUILayout.Space(5f);
                    if (GUILayout.Button("Check Connection", new GUILayoutOption[]
                    {
                        GUILayout.Width(150f)
                    }))
                    {
                        if (EditorGUI.s_DelayedTextEditor.IsEditingControl(controlID))
                        {
                            string text = EditorGUI.s_DelayedTextEditor.text;
                            EditorGUI.s_DelayedTextEditor.EndEditing();
                            if (text != CacheServerPreferences.s_CacheServerIPAddress)
                            {
                                CacheServerPreferences.s_CacheServerIPAddress = text;
                                CacheServerPreferences.WritePreferences();
                            }
                        }
                        if (InternalEditorUtility.CanConnectToCacheServer())
                        {
                            CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Success;
                        }
                        else
                        {
                            CacheServerPreferences.s_ConnectionState = CacheServerPreferences.ConnectionState.Failure;
                        }
                    }
                    GUILayout.Space(-25f);
                    switch (CacheServerPreferences.s_ConnectionState)
                    {
                    case CacheServerPreferences.ConnectionState.Unknown:
                        GUILayout.Space(44f);
                        break;

                    case CacheServerPreferences.ConnectionState.Success:
                        EditorGUILayout.HelpBox("Connection successful.", MessageType.Info, false);
                        break;

                    case CacheServerPreferences.ConnectionState.Failure:
                        EditorGUILayout.HelpBox("Connection failed.", MessageType.Warning, false);
                        break;
                    }
                }
                if (EditorGUI.EndChangeCheck())
                {
                    CacheServerPreferences.WritePreferences();
                    CacheServerPreferences.ReadPreferences();
                }
            }
        }