using System;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using AyaNova.Util;
using System.Net.Http;
using Newtonsoft.Json.Linq;
namespace AyaNova.Biz
{
///
/// called by Generator to check new releases automatically
///
///
internal static class CoreJobVersionCheck
{
private static ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("CoreJobVersionCheck");
private static DateTime _lastCheck = DateTime.MinValue;
private static TimeSpan CHECK_INTERVAL = new TimeSpan(24, 0, 0);//every day
////////////////////////////////////////////////////////////////////////////////////////////////
// DoWork
//
public static async Task DoWorkAsync()
{
if (DateTime.UtcNow - _lastCheck < CHECK_INTERVAL)
return;
log.LogDebug("Check starting");
try
{
var client = ServiceProviderProvider.HttpClientFactory.CreateClient();
var res = await client.GetAsync("https://ayanova.com/download/latest-version.json");
string responseText = string.Empty;
if (res.IsSuccessStatusCode)
{
responseText = await res.Content.ReadAsStringAsync();
var responseJson = JObject.Parse(responseText);
//validate contains version string and that it appears to be valid
if (responseJson.ContainsKey("latestversion"))
{
var v = responseJson["latestversion"].Value();
if (v.Contains("."))
{
ServerGlobalOpsSettingsCache.LATEST_VERSION = v;
}
else
{
log.LogDebug($"version json response latestversion missing or malformed, response was: {responseText}");
}
}
else
{
log.LogDebug($"version json response latestversion missing or malformed, response was: {responseText}");
}
if (responseJson.ContainsKey("changelogurl"))
{
var u = responseJson["changelogurl"].Value();
if (u.Contains("http"))
{
ServerGlobalOpsSettingsCache.CHANGE_LOG_URL = u;
}
else
{
log.LogDebug($"version json response changelogurl missing or malformed, response was: {responseText}");
}
}
else
{
log.LogDebug($"version json response changelogurl missing or malformed, response was: {responseText}");
}
}
else
{
log.LogWarning($"Error checking AyaNova website for updated release version: {res.ReasonPhrase},{responseText}");
}
}
catch (Exception ex)
{
log.LogError(ex, "Error checking AyaNova website for updated version");
}
finally
{
_lastCheck = DateTime.UtcNow;
}
}
/////////////////////////////////////////////////////////////////////
}//eoc
}//eons