Repository URL to install this package:
Version:
1.0.0 ▾
|
using System;
using System.Threading.Tasks;
using UnityEditor;
using UnityEditor.PackageManager;
using UnityEditor.PackageManager.Requests;
using PackageInfo = UnityEditor.PackageManager.PackageInfo;
namespace Fluctio.FluctioSim.EditorUtils.PackageManager
{
public static class PackageManagerExtensions
{
public static string GetRawPackageId(this PackageInfo packageInfo)
{
// packageId might also include version, git url, etc.
return packageInfo.packageId.Split("@")[0];
}
public static Task<T> WaitResult<T>(this Request<T> request)
{
var completionSource = new TaskCompletionSource<T>();
request.OnSuccess(completionSource.SetResult);
request.OnError(error =>
{
var exception = new PackageManagerException(error);
completionSource.SetException(exception);
});
return completionSource.Task;
}
public static Request<T> OnSuccess<T>(this Request<T> request, Action<T> callback)
{
return request.AddCallback(StatusCode.Success, () => callback(request.Result));
}
public static Request<T> OnError<T>(this Request<T> request, Action<Error> callback)
{
return request.AddCallback(StatusCode.Failure, () => callback(request.Error));
}
public static Request<T> OnComplete<T>(this Request<T> request, Action callback)
{
return request.AddCallback(null, callback);
}
private static Request<T> AddCallback<T>(this Request<T> request, StatusCode? requiredStatusCode, Action callback)
{
EditorApplication.CallbackFunction handler = null;
handler = () =>
{
if (!request.IsCompleted)
{
return;
}
if (requiredStatusCode == null || request.Status == requiredStatusCode)
{
callback();
}
EditorApplication.update -= handler;
};
EditorApplication.update += handler;
return request;
}
}
[Serializable]
public class PackageManagerException : Exception
{
public PackageManagerException (Error error) : base(error.message) {}
}
}