167 lines
3.8 KiB
C#
167 lines
3.8 KiB
C#
// Copyright HTC Corporation All Rights Reserved.
|
|
|
|
using UnityEditor.PackageManager;
|
|
using UnityEditor.PackageManager.Requests;
|
|
using UnityEngine;
|
|
|
|
public static class PackageManagerHelper
|
|
{
|
|
private static bool s_wasPreparing;
|
|
private static bool m_wasAdded;
|
|
private static bool s_wasRemoved;
|
|
private static ListRequest m_listRequest;
|
|
private static AddRequest m_addRequest;
|
|
private static RemoveRequest m_removeRequest;
|
|
private static string s_fallbackIdentifier;
|
|
|
|
public static bool isPreparingList
|
|
{
|
|
get
|
|
{
|
|
if (m_listRequest == null) { return s_wasPreparing = true; }
|
|
|
|
switch (m_listRequest.Status)
|
|
{
|
|
case StatusCode.InProgress:
|
|
return s_wasPreparing = true;
|
|
case StatusCode.Failure:
|
|
if (!s_wasPreparing)
|
|
{
|
|
Debug.LogError("Something wrong when adding package to list. error:" + m_listRequest.Error.errorCode + "(" + m_listRequest.Error.message + ")");
|
|
}
|
|
break;
|
|
case StatusCode.Success:
|
|
break;
|
|
}
|
|
|
|
return s_wasPreparing = false;
|
|
}
|
|
}
|
|
|
|
public static bool isAddingToList
|
|
{
|
|
get
|
|
{
|
|
if (m_addRequest == null) { return m_wasAdded = false; }
|
|
|
|
switch (m_addRequest.Status)
|
|
{
|
|
case StatusCode.InProgress:
|
|
return m_wasAdded = true;
|
|
case StatusCode.Failure:
|
|
if (!m_wasAdded)
|
|
{
|
|
AddRequest request = m_addRequest;
|
|
m_addRequest = null;
|
|
if (string.IsNullOrEmpty(s_fallbackIdentifier))
|
|
{
|
|
Debug.LogError("Something wrong when adding package to list. error:" + request.Error.errorCode + "(" + request.Error.message + ")");
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("Failed to install package: \"" + request.Error.message + "\". Retry with fallback identifier \"" + s_fallbackIdentifier + "\"");
|
|
AddToPackageList(s_fallbackIdentifier);
|
|
}
|
|
|
|
s_fallbackIdentifier = null;
|
|
}
|
|
break;
|
|
case StatusCode.Success:
|
|
if (!m_wasAdded)
|
|
{
|
|
m_addRequest = null;
|
|
s_fallbackIdentifier = null;
|
|
ResetPackageList();
|
|
}
|
|
break;
|
|
}
|
|
|
|
return m_wasAdded = false;
|
|
}
|
|
}
|
|
|
|
public static bool isRemovingFromList
|
|
{
|
|
get
|
|
{
|
|
if (m_removeRequest == null) { return s_wasRemoved = false; }
|
|
|
|
switch (m_removeRequest.Status)
|
|
{
|
|
case StatusCode.InProgress:
|
|
return s_wasRemoved = true;
|
|
case StatusCode.Failure:
|
|
if (!s_wasRemoved)
|
|
{
|
|
var request = m_removeRequest;
|
|
m_removeRequest = null;
|
|
Debug.LogError("Something wrong when removing package from list. error:" + m_removeRequest.Error.errorCode + "(" + m_removeRequest.Error.message + ")");
|
|
}
|
|
break;
|
|
case StatusCode.Success:
|
|
if (!s_wasRemoved)
|
|
{
|
|
m_removeRequest = null;
|
|
ResetPackageList();
|
|
}
|
|
break;
|
|
}
|
|
|
|
return s_wasRemoved = false;
|
|
}
|
|
}
|
|
|
|
public static void PreparePackageList()
|
|
{
|
|
if (m_listRequest != null) { return; }
|
|
m_listRequest = Client.List(true, true);
|
|
}
|
|
|
|
public static void ResetPackageList()
|
|
{
|
|
s_wasPreparing = false;
|
|
m_listRequest = null;
|
|
}
|
|
|
|
public static bool IsPackageInList(string name, out UnityEditor.PackageManager.PackageInfo packageInfo)
|
|
{
|
|
packageInfo = null;
|
|
if (m_listRequest == null || m_listRequest.Result == null) return false;
|
|
|
|
foreach (var package in m_listRequest.Result)
|
|
{
|
|
if (package.name.Equals(name))
|
|
{
|
|
packageInfo = package;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static void AddToPackageList(string identifier, string fallbackIdentifier = null)
|
|
{
|
|
Debug.Assert(m_addRequest == null);
|
|
|
|
m_addRequest = Client.Add(identifier);
|
|
s_fallbackIdentifier = fallbackIdentifier;
|
|
}
|
|
|
|
public static void RemovePackage(string identifier)
|
|
{
|
|
Debug.Assert(m_removeRequest == null);
|
|
|
|
m_removeRequest = Client.Remove(identifier);
|
|
}
|
|
|
|
public static PackageCollection GetPackageList()
|
|
{
|
|
if (m_listRequest == null || m_listRequest.Result == null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return m_listRequest.Result;
|
|
}
|
|
}
|