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

120 lines
3.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using Codice.Client.Common;
using Codice.Client.Common.Threading;
using Codice.CM.Common;
using Codice.LogWrapper;
using PlasticGui.WebApi.Responses;
using PlasticGui.WorkspaceWindow.Home;
namespace Unity.PlasticSCM.Editor
{
internal static class OrganizationsInformation
{
internal static bool IsUnityOrganization(string server)
{
return ResolveServer.ToDisplayString(server).EndsWith(UnityOrganizationServer);
}
internal static void LoadCloudOrganizationsAsync()
{
PlasticThreadPool.Run(delegate
{
try
{
OrganizationsResponse organizationResponse = PlasticGui.Plastic.WebRestAPI.GetCloudServers();
if (organizationResponse.Error != null)
{
mLog.ErrorFormat(
"Unable to retrieve cloud organizations: {0} [code {1}]",
organizationResponse.Error.Message,
organizationResponse.Error.ErrorCode);
return;
}
UpdateOrganizationSlugs(organizationResponse);
}
catch (Exception e)
{
ExceptionsHandler.LogException(typeof(OrganizationsInformation).Name, e);
}
});
}
internal static void UpdateOrganizationSlugs(OrganizationsResponse organizationsResponse)
{
if (organizationsResponse == null || organizationsResponse.OrganizationInfo == null)
{
return;
}
List<string> genesisOrgIds = new List<string>();
List<string> slugs = new List<string>();
foreach (string organization in organizationsResponse.Organizations)
{
OrganizationsResponse.OrganizationInformation info;
if (!organizationsResponse.OrganizationInfo.TryGetValue(organization, out info))
{
continue;
}
if (info.Type != OrganizationsResponse.OrganizationInformation.ORGANIZATION_TYPE_UNITY)
{
continue;
}
genesisOrgIds.Add(organization);
slugs.Add(info.Slug);
}
PlasticGui.Plastic.API.SetUnityOrganizationsSlugData(genesisOrgIds, slugs);
}
internal static List<OrganizationInfo> FromServersOrdered(List<string> serverNames)
{
List<OrganizationInfo> organizationsInfo = new List<OrganizationInfo>();
foreach (var organizationServer in serverNames)
{
organizationsInfo.Add(FromServer(organizationServer));
}
organizationsInfo.Sort((x, y) =>
string.Compare(x.DisplayName, y.DisplayName, StringComparison.CurrentCulture));
return organizationsInfo;
}
static OrganizationInfo FromServer(string organizationServer)
{
return new OrganizationInfo(ResolveServer.ToDisplayString(organizationServer), organizationServer);
}
internal static List<string> GetOrganizationProjects(string organizationServer)
{
RepositoryInfo[] allServerProjects = CmConnection.Get().GetRepositoryHandler(organizationServer)
.GetRepositoryList(RepositoryType.Project);
List<string> serverProjects = allServerProjects
.Where(project => !RepositoryInfo.IsDeleted(project))
.Select(project => project.Name)
.ToList();
serverProjects.Sort();
return serverProjects;
}
static readonly string UnityOrganizationServer = "@unity";
static readonly ILog mLog = PlasticApp.GetLogger("OrganizationsInformation");
}
}