127 lines
4.4 KiB
C#
127 lines
4.4 KiB
C#
using NLog;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace EgwControlCenter.Core
|
|
{
|
|
public class UpdateMan
|
|
{
|
|
#region Public Fields
|
|
|
|
/// <summary>
|
|
/// Init classe
|
|
/// </summary>
|
|
public static UpdateMan obj = new UpdateMan();
|
|
|
|
#endregion Public Fields
|
|
|
|
#region Public Constructors
|
|
|
|
/// <summary>
|
|
/// Init classe
|
|
/// </summary>
|
|
public UpdateMan()
|
|
{ }
|
|
|
|
/// <summary>
|
|
/// Init classe
|
|
/// </summary>
|
|
/// <param name="user"></param>
|
|
/// <param name="pwd"></param>
|
|
public UpdateMan(string user, string pwd)
|
|
{
|
|
userName = user;
|
|
passwd = pwd;
|
|
doAuth = !string.IsNullOrEmpty($"{userName}{passwd}");
|
|
}
|
|
|
|
#endregion Public Constructors
|
|
|
|
#region Public Methods
|
|
|
|
/// <summary>
|
|
/// Effettua download specifica versione applicativo per install locale
|
|
/// </summary>
|
|
/// <param name="downloadUrl">url del file (tipicamente *.zip) da scaricare</param>
|
|
/// <param name="localDir">Cartella locale x salvataggio file</param>
|
|
/// <param name="packName">Nome applicativo con cui salvare</param>
|
|
/// <param name="version">Versione applicativo (per salvataggio storico versioni)</param>
|
|
public long DownloadApp(string downloadUrl, string localDir, string packName, string version)
|
|
{
|
|
long size = 0;
|
|
// verifico directory
|
|
if (!Directory.Exists(localDir))
|
|
{
|
|
Directory.CreateDirectory(localDir);
|
|
}
|
|
string localFile = "";
|
|
string localLast = "";
|
|
try
|
|
{
|
|
localFile = Path.Combine(localDir, $"{packName}_Build_{version}.zip");
|
|
localLast = Path.Combine(localDir, $"{packName}.zip");
|
|
// scarica file e salva in directory locale...
|
|
using (var http = new HttpClient())
|
|
{
|
|
if (doAuth)
|
|
{
|
|
//client.Credentials = new System.Net.NetworkCredential(userName, passwd);
|
|
http.DefaultRequestHeaders.Accept.Clear();
|
|
var byteArray = System.Text.ASCIIEncoding.UTF8.GetBytes($"{userName}:{passwd}");
|
|
http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
|
|
}
|
|
|
|
// url da chiamare
|
|
http.BaseAddress = new Uri(downloadUrl);
|
|
// lettura
|
|
var data = http.GetAsync(downloadUrl).Result;
|
|
using (var myReader = data.Content.ReadAsStreamAsync())
|
|
{
|
|
//var myReader = data.Content.ReadAsStreamAsync();
|
|
if (data.StatusCode != HttpStatusCode.OK)
|
|
{
|
|
Log.Info($"Errore in chiamata DownloadApp per URL {downloadUrl}: status code: {data.StatusCode}");
|
|
}
|
|
else
|
|
{
|
|
using (Stream outStream = File.OpenWrite(localFile))
|
|
{
|
|
myReader.Result.CopyTo(outStream);
|
|
}
|
|
// ora lo copio come latest...
|
|
File.Copy(localFile, localLast, true);
|
|
// recupero dimensione file
|
|
var thisFile = new FileInfo(localLast);
|
|
size = thisFile.Length;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
Log.Error($"Errore in fase di download installers | URL: {downloadUrl}{Environment.NewLine}{exc}");
|
|
}
|
|
return size;
|
|
}
|
|
|
|
#endregion Public Methods
|
|
|
|
#region Private Fields
|
|
|
|
private static Logger Log = LogManager.GetCurrentClassLogger();
|
|
private bool doAuth = false;
|
|
|
|
#endregion Private Fields
|
|
|
|
#region Private Properties
|
|
|
|
private string passwd { get; set; } = "";
|
|
private string userName { get; set; } = "";
|
|
|
|
#endregion Private Properties
|
|
}
|
|
} |