static void MonitorPackageUninstall() { EditorApplication.update -= MonitorPackageUninstall; LoaderAssignmentRequests reqs = GetAllRequestsInQueue(k_UninstallingPackage); if (reqs.activeRequests.Count > 0) { for (int i = 0; i < reqs.activeRequests.Count; i++) { var req = reqs.activeRequests[i]; if (!req.packageRemoveRequest.IsCompleted) { QueueLoaderRequest(req); } if (req.packageRemoveRequest.Status == StatusCode.Failure) { req.installationState = InstallationState.Log; req.logMessage = req.packageRemoveRequest.Error.message; req.logLevel = LogLevel.Warning; QueueLoaderRequest(req); } } } }
static void WaitingOnSearchQuery() { EditorApplication.update -= WaitingOnSearchQuery; if (s_SearchRequest != null) { if (s_SearchRequest.IsCompleted) { EditorApplication.update += UpdateInstallablePackages; } else { EditorApplication.update += WaitingOnSearchQuery; } return; } LoaderAssignmentRequests reqs = GetAllRequestsInQueue(k_WaitingPackmanQuery); if (reqs.activeRequests.Count > 0) { for (int i = 0; i < reqs.activeRequests.Count; i++) { var req = reqs.activeRequests[i]; req.installationState = IsPackageInstalled(req.packageId) ? InstallationState.Assigning : InstallationState.StartInstallation; req.timeOut = Time.realtimeSinceStartup + k_TimeOutDelta; QueueLoaderRequest(req); } } }
private static void MonitorPackageInstallation() { EditorApplication.update -= MonitorPackageInstallation; LoaderAssignmentRequests reqs = GetAllRequestsInQueue(k_InstallingPackage); if (reqs.activeRequests.Count > 0) { var request = reqs.activeRequests[0]; reqs.activeRequests.RemoveAt(0); if (request.needsAddRequest) { request.packageAddRequest = Client.Add(request.packageId); request.needsAddRequest = false; request.installationState = InstallationState.Installing; QueueLoaderRequest(request); } else if (request.packageAddRequest.IsCompleted && File.Exists($"Packages/{request.packageId}/package.json")) { if (request.packageAddRequest.Status == StatusCode.Success) { if (!String.IsNullOrEmpty(request.loaderType)) { request.packageAddRequest = null; request.installationState = InstallationState.Assigning; QueueLoaderRequest(request); } } else { request.errorText = $"Error installing package {request.packageId}. Error Code: {request.packageAddRequest.Status} Error Message: {request.packageAddRequest.Error.message}"; request.installationState = InstallationState.Error; QueueLoaderRequest(request); } } else if (request.timeOut < Time.realtimeSinceStartup) { request.errorText = $"Error installing package {request.packageId}. Package installation timed out. Check Package Manager UI to see if the package is installed and/or retry your operation."; if (request.packageAddRequest.IsCompleted) { request.errorText += $" Error message: {request.packageAddRequest.Error.message}"; } request.installationState = InstallationState.Error; QueueLoaderRequest(request); } else { QueueLoaderRequest(request); } } }
private static LoaderAssignmentRequests GetAllRequestsInQueue(string queueName) { LoaderAssignmentRequests reqs = new LoaderAssignmentRequests(); reqs.activeRequests = new List <LoaderAssignmentRequest>(); if (EditorPrefs.HasKey(queueName)) { string fromJson = EditorPrefs.GetString(queueName); reqs = JsonUtility.FromJson <LoaderAssignmentRequests>(fromJson); EditorPrefs.DeleteKey(queueName); } return(reqs); }
static LoaderAssignmentRequests GetAllRequestsInQueue(string queueName) { var reqs = new LoaderAssignmentRequests(); reqs.activeRequests = new List <LoaderAssignmentRequest>(); if (XRPackageMetadataStore.SessionStateHasStoredData(queueName)) { string fromJson = SessionState.GetString(queueName, k_DefaultSessionStateString); reqs = JsonUtility.FromJson <LoaderAssignmentRequests>(fromJson); SessionState.EraseString(queueName); } return(reqs); }
private static void AssignAnyRequestedLoadersUpdate() { EditorApplication.update -= AssignAnyRequestedLoadersUpdate; LoaderAssignmentRequests reqs = GetAllRequestsInQueue(k_AssigningPackage); if (reqs.activeRequests == null || reqs.activeRequests.Count == 0) { return; } while (reqs.activeRequests.Count > 0) { var req = reqs.activeRequests[0]; reqs.activeRequests.RemoveAt(0); var settings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(req.buildTargetGroup); if (settings == null) { continue; } if (settings.AssignedSettings == null) { var assignedSettings = ScriptableObject.CreateInstance <XRManagerSettings>() as XRManagerSettings; settings.AssignedSettings = assignedSettings; EditorUtility.SetDirty(settings); } if (XRPackageMetadataStore.AssignLoader(settings.AssignedSettings, req.loaderType, req.buildTargetGroup)) { Debug.Log($"Assigned loader {req.loaderType} for build target {req.buildTargetGroup}"); } else { req.installationState = InstallationState.Error; req.errorText = $"Unable to assign {req.packageId} for build target {req.buildTargetGroup}."; QueueLoaderRequest(req); } } XRSettingsManager.Instance.ResetUi = true; }
private static void AddRequestToQueue(LoaderAssignmentRequest request, string queueName) { LoaderAssignmentRequests reqs; if (EditorPrefs.HasKey(queueName)) { string fromJson = EditorPrefs.GetString(queueName); reqs = JsonUtility.FromJson <LoaderAssignmentRequests>(fromJson); } else { reqs = new LoaderAssignmentRequests(); reqs.activeRequests = new List <LoaderAssignmentRequest>(); } reqs.activeRequests.Add(request); string json = JsonUtility.ToJson(reqs); EditorPrefs.SetString(queueName, json); }
static void AddRequestToQueue(LoaderAssignmentRequest request, string queueName) { LoaderAssignmentRequests reqs; if (XRPackageMetadataStore.SessionStateHasStoredData(queueName)) { string fromJson = SessionState.GetString(queueName, k_DefaultSessionStateString); reqs = JsonUtility.FromJson <LoaderAssignmentRequests>(fromJson); } else { reqs = new LoaderAssignmentRequests(); reqs.activeRequests = new List <LoaderAssignmentRequest>(); } reqs.activeRequests.Add(request); string json = JsonUtility.ToJson(reqs); SessionState.SetString(queueName, json); }
static void AssignAnyRequestedLoadersUpdate() { EditorApplication.update -= AssignAnyRequestedLoadersUpdate; LoaderAssignmentRequests reqs = GetAllRequestsInQueue(k_AssigningPackage); if (reqs.activeRequests == null || reqs.activeRequests.Count == 0) { return; } while (reqs.activeRequests.Count > 0) { var req = reqs.activeRequests[0]; reqs.activeRequests.RemoveAt(0); var settings = AdaptivePerformanceGeneralSettingsPerBuildTarget.AdaptivePerformanceGeneralSettingsForBuildTarget(req.buildTargetGroup); if (settings == null) { continue; } if (settings.AssignedSettings == null) { var assignedSettings = ScriptableObject.CreateInstance <AdaptivePerformanceManagerSettings>() as AdaptivePerformanceManagerSettings; settings.AssignedSettings = assignedSettings; EditorUtility.SetDirty(settings); } if (!AdaptivePerformancePackageMetadataStore.AssignLoader(settings.AssignedSettings, req.loaderType, req.buildTargetGroup)) { req.installationState = InstallationState.Log; req.logMessage = $"Unable to assign {req.packageId} for build target {req.buildTargetGroup}."; req.logLevel = LogLevel.Error; QueueLoaderRequest(req); } } ResetManagerUiIfAvailable(); }
private static void WaitingOnSearchQuery() { EditorApplication.update -= WaitingOnSearchQuery; if (s_SearchRequest != null) { EditorApplication.update += WaitingOnSearchQuery; return; } LoaderAssignmentRequests reqs = GetAllRequestsInQueue(k_WaitingPackmanQuery); if (reqs.activeRequests.Count > 0) { for (int i = 0; i < reqs.activeRequests.Count; i++) { var req = reqs.activeRequests[i]; req.installationState = InstallationState.RebuildInstalledCache; QueueLoaderRequest(req); } } }
private static void RebuildCache() { EditorApplication.update -= RebuildCache; if (EditorApplication.isPlaying && EditorApplication.isPaused) { return; // Use the cached data that should have been passed in the play state change. } LoaderAssignmentRequests reqs = GetAllRequestsInQueue(k_RebuildCache); if (reqs.activeRequests == null || reqs.activeRequests.Count == 0) { return; } var req = reqs.activeRequests[0]; if (!req.rebuildRequestOnly && IsPackageInstalled(req.packageId)) { reqs.activeRequests.Remove(req); req.installationState = InstallationState.Assigning; QueueLoaderRequest(req); } else if (req.packageListRequest.IsCompleted) { reqs.activeRequests.Remove(req); if (req.packageListRequest.Status == StatusCode.Success) { s_InstalledPackages.Clear(); List <string> installedPackages = new List <string>(); foreach (var packageInfo in req.packageListRequest.Result) { installedPackages.Add(packageInfo.name); } foreach (var p in s_Packages.Values) { if (installedPackages.Contains(p.metadata.packageId)) { s_InstalledPackages.Add(p.metadata.packageId); } } if (!req.rebuildRequestOnly) { if (IsPackageInstalled(req.packageId)) { req.installationState = InstallationState.Assigning; } else { req.installationState = InstallationState.StartInstallation; } QueueLoaderRequest(req); } } else { req.errorText = $"Error installing package {req.packageId}. Error Code: {req.packageListRequest.Status} Error Message: {req.packageListRequest.Error.message}"; req.installationState = InstallationState.Error; QueueLoaderRequest(req); } } if (reqs.activeRequests.Count > 0) { SetRequestsInQueue(reqs, k_RebuildCache); EditorApplication.update += RebuildCache; } }
private static void SetRequestsInQueue(LoaderAssignmentRequests reqs, string queueName) { string json = JsonUtility.ToJson(reqs); EditorPrefs.SetString(queueName, json); }
private static void RebuildCache() { EditorApplication.update -= RebuildCache; if (IsEditorInPlayMode()) { return; // Use the cached data that should have been passed in the play state change. } LoaderAssignmentRequests reqs = GetAllRequestsInQueue(k_RebuildCache); if (reqs.activeRequests == null || reqs.activeRequests.Count == 0) { return; } var req = reqs.activeRequests[0]; reqs.activeRequests.Remove(req); if (req.timeOut < Time.realtimeSinceStartup) { req.errorText = $"Timeout trying to get package list after {k_TimeOutDelta}s."; req.installationState = InstallationState.Error; QueueLoaderRequest(req); } else if (!req.packageListRequest.IsCompleted) { QueueLoaderRequest(req); } else if (req.packageListRequest.IsCompleted) { if (req.packageListRequest.Status == StatusCode.Success) { s_InstalledPackages.Clear(); List <string> installedPackages = new List <string>(); foreach (var packageInfo in req.packageListRequest.Result) { installedPackages.Add(packageInfo.name); } foreach (var p in s_Packages.Values) { if (installedPackages.Contains(p.metadata.packageId)) { s_InstalledPackages.Add(p.metadata.packageId); } } } } else { req.errorText = $"Unknown error or lost request to install package {req.packageId}."; req.installationState = InstallationState.Error; QueueLoaderRequest(req); } if (reqs.activeRequests.Count > 0) { SetRequestsInQueue(reqs, k_RebuildCache); EditorApplication.update += RebuildCache; } }
static void MonitorPackageInstallation() { EditorApplication.update -= MonitorPackageInstallation; LoaderAssignmentRequests reqs = GetAllRequestsInQueue(k_InstallingPackage); if (reqs.activeRequests.Count > 0) { var request = reqs.activeRequests[0]; reqs.activeRequests.RemoveAt(0); if (request.needsAddRequest) { var versionToInstallQ = s_CachedMDStoreInformation.knownPackageInfos. Where((kpi) => String.Compare(request.packageId, kpi.packageId) == 0). Select((kpi) => kpi.verifiedVersion); var versionToInstall = versionToInstallQ.FirstOrDefault(); var packageToInstall = String.IsNullOrEmpty(versionToInstall) ? request.packageId : $"{request.packageId}@{versionToInstall}"; request.packageAddRequest = Client.Add(packageToInstall); request.needsAddRequest = false; request.installationState = InstallationState.Installing; s_CachedMDStoreInformation.hasAlreadyRequestedData = true; StoreCachedMDStoreInformation(); QueueLoaderRequest(request); } else if (request.packageAddRequest.IsCompleted && File.Exists($"Packages/{request.packageId}/package.json")) { if (request.packageAddRequest.Status == StatusCode.Success) { if (!String.IsNullOrEmpty(request.loaderType)) { request.packageAddRequest = null; request.installationState = InstallationState.Assigning; QueueLoaderRequest(request); } else { request.logMessage = $"Missing loader type. Unable to assign loader."; request.logLevel = LogLevel.Error; request.installationState = InstallationState.Log; QueueLoaderRequest(request); } } } else if (request.packageAddRequest.IsCompleted && request.packageAddRequest.Status != StatusCode.Success) { if (String.IsNullOrEmpty(request.packageId)) { request.logMessage = $"Error installing package with no package id."; } else { request.logMessage = $"Error Message: {request.packageAddRequest?.Error?.message ?? "UNKNOWN" }.\nError installing package {request.packageId ?? "UNKNOWN PACKAGE ID" }."; } request.logLevel = LogLevel.Error; request.installationState = InstallationState.Log; QueueLoaderRequest(request); } else if (request.timeOut < Time.realtimeSinceStartup) { if (String.IsNullOrEmpty(request.packageId)) { request.logMessage = $"Time out while installing pacakge with no package id."; } else { request.logMessage = $"Error installing package {request.packageId}. Package installation timed out. Check Package Manager UI to see if the package is installed and/or retry your operation."; } request.logLevel = LogLevel.Error; if (request.packageAddRequest.IsCompleted) { request.logMessage += $" Error message: {request.packageAddRequest.Error.message}"; } request.installationState = InstallationState.Log; QueueLoaderRequest(request); } else { QueueLoaderRequest(request); } } }
static void RebuildCache() { EditorApplication.update -= RebuildCache; if (IsEditorInPlayMode()) { return; // Use the cached data that should have been passed in the play state change. } LoaderAssignmentRequests reqs = GetAllRequestsInQueue(k_RebuildCache); if (reqs.activeRequests == null || reqs.activeRequests.Count == 0) { return; } var req = reqs.activeRequests[0]; reqs.activeRequests.Remove(req); if (req.timeOut < Time.realtimeSinceStartup) { req.logMessage = $"Timeout trying to get package list after {k_TimeOutDelta}s."; req.logLevel = LogLevel.Warning; req.installationState = InstallationState.Log; QueueLoaderRequest(req); } else if (req.packageListRequest.IsCompleted) { if (req.packageListRequest.Status == StatusCode.Success) { var installedPackages = new List <string>(); foreach (var packageInfo in req.packageListRequest.Result) { installedPackages.Add(packageInfo.name); } var packageIds = s_Packages.Values. Where((p) => installedPackages.Contains(p.metadata.packageId)). Select((p) => p.metadata.packageId); s_CachedMDStoreInformation.installedPackages = packageIds.ToArray(); } StoreCachedMDStoreInformation(); } else if (!req.packageListRequest.IsCompleted) { QueueLoaderRequest(req); } else { req.logMessage = $"Unable to rebuild installed package cache. Some state may be missing or incorrect."; req.logLevel = LogLevel.Warning; req.installationState = InstallationState.Log; QueueLoaderRequest(req); } if (reqs.activeRequests.Count > 0) { SetRequestsInQueue(reqs, k_RebuildCache); EditorApplication.update += RebuildCache; } }
static void SetRequestsInQueue(LoaderAssignmentRequests reqs, string queueName) { string json = JsonUtility.ToJson(reqs); SessionState.SetString(queueName, json); }