using System;
using System.Net;
using System.Net.Http;
namespace AssetStoreTools.Utility
{
///
/// A structure for retrieving and converting errors from Asset Store Tools class methods
///
internal class ASError
{
public string Message { get; private set; }
public Exception Exception { get; private set; }
public ASError() { }
public static ASError GetGenericError(Exception ex)
{
ASError error = new ASError()
{
Message = ex.Message,
Exception = ex
};
return error;
}
public static ASError GetLoginError(HttpResponseMessage response) => GetLoginError(response, null);
public static ASError GetLoginError(HttpResponseMessage response, HttpRequestException ex)
{
ASError error = new ASError() { Exception = ex };
switch (response.StatusCode)
{
// Add common error codes here
case HttpStatusCode.Unauthorized:
error.Message = "Incorrect email and/or password. Please try again.";
break;
case HttpStatusCode.InternalServerError:
error.Message = "Authentication request failed\nIf you were logging in with your Unity Cloud account, please make sure you are still logged in.\n" +
"This might also be caused by too many invalid login attempts - if that is the case, please try again later.";
break;
default:
ParseHtmlMessage(response, out string message);
error.Message = message;
break;
}
return error;
}
public static ASError GetPublisherNullError(string publisherName)
{
ASError error = new ASError
{
Message = $"Your Unity ID {publisherName} is not currently connected to a publisher account. " +
$"Please create a publisher profile."
};
return error;
}
private static bool ParseHtmlMessage(HttpResponseMessage response, out string message)
{
message = "An undefined error has been encountered";
string html = response.Content.ReadAsStringAsync().Result;
if (!html.Contains("", StringComparison.Ordinal) + "
".Length;
var endIndex = html.IndexOf("
", StringComparison.Ordinal);
if (startIndex == -1 || endIndex == -1)
return false;
string htmlBodyMessage = html.Substring(startIndex, (endIndex - startIndex));
htmlBodyMessage = htmlBodyMessage.Replace("\n", " ");
message += htmlBodyMessage;
message += "\n\nIf this error message is not very informative, please report this to Unity";
return true;
}
public override string ToString()
{
return Message;
}
}
}