Added messaging event pipe
This commit is contained in:
@ -22,6 +22,7 @@ namespace PMF.Managers
|
|||||||
validateManifestFile();
|
validateManifestFile();
|
||||||
var json = File.ReadAllText(Config.ManifestFileName);
|
var json = File.ReadAllText(Config.ManifestFileName);
|
||||||
PackageManager.PackageList = JsonConvert.DeserializeObject<List<Package>>(json);
|
PackageManager.PackageList = JsonConvert.DeserializeObject<List<Package>>(json);
|
||||||
|
PMF.InvokePackageMessageEvent("Initialized PMF successfully");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -35,6 +36,7 @@ namespace PMF.Managers
|
|||||||
var json = JsonConvert.SerializeObject(PackageManager.PackageList);
|
var json = JsonConvert.SerializeObject(PackageManager.PackageList);
|
||||||
File.WriteAllText(Config.ManifestFileName, json);
|
File.WriteAllText(Config.ManifestFileName, json);
|
||||||
Directory.Delete(Config.TemporaryFolder, true);
|
Directory.Delete(Config.TemporaryFolder, true);
|
||||||
|
PMF.InvokePackageMessageEvent("Successfully cleaned PMF");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void validateManifestFile()
|
public static void validateManifestFile()
|
||||||
@ -83,10 +85,11 @@ namespace PMF.Managers
|
|||||||
{
|
{
|
||||||
string packageDirectory = Path.Combine(Config.PackageInstallationFolder, id);
|
string packageDirectory = Path.Combine(Config.PackageInstallationFolder, id);
|
||||||
Directory.Delete(packageDirectory, true);
|
Directory.Delete(packageDirectory, true);
|
||||||
|
PMF.InvokePackageMessageEvent($"Successfully removed package {id}");
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
// Do nothing, user probably already deleted the folder
|
PMF.InvokePackageMessageEvent($"Couldn't find package with id of: {id}. Removing from package list");
|
||||||
}
|
}
|
||||||
|
|
||||||
return PackageManager.PackageList.Remove(id);
|
return PackageManager.PackageList.Remove(id);
|
||||||
@ -101,16 +104,23 @@ namespace PMF.Managers
|
|||||||
/// <returns>The package that was installed</returns>
|
/// <returns>The package that was installed</returns>
|
||||||
public static Package InstallPackage(Package remotePackage, Asset asset, string zipPath)
|
public static Package InstallPackage(Package remotePackage, Asset asset, string zipPath)
|
||||||
{
|
{
|
||||||
|
PMF.InvokePackageMessageEvent("Extracting package");
|
||||||
ZipFile.ExtractToDirectory(Path.Combine(zipPath, asset.FileName), Path.Combine(Config.PackageInstallationFolder, remotePackage.ID));
|
ZipFile.ExtractToDirectory(Path.Combine(zipPath, asset.FileName), Path.Combine(Config.PackageInstallationFolder, remotePackage.ID));
|
||||||
|
|
||||||
|
// Maybe a library folder and check if is installed
|
||||||
foreach (var dependency in asset.Dependencies)
|
foreach (var dependency in asset.Dependencies)
|
||||||
|
{
|
||||||
|
PMF.InvokePackageMessageEvent($"Extracting dependency with id: {dependency.ID}");
|
||||||
ZipFile.ExtractToDirectory(Path.Combine(zipPath, dependency.FileName), Path.Combine(Config.PackageInstallationFolder, remotePackage.ID, "Dependencies", dependency.ID));
|
ZipFile.ExtractToDirectory(Path.Combine(zipPath, dependency.FileName), Path.Combine(Config.PackageInstallationFolder, remotePackage.ID, "Dependencies", dependency.ID));
|
||||||
|
}
|
||||||
|
|
||||||
remotePackage.Assets.Clear();
|
remotePackage.Assets.Clear();
|
||||||
remotePackage.Assets.Add(asset);
|
remotePackage.Assets.Add(asset);
|
||||||
|
|
||||||
PackageManager.PackageList.Add(remotePackage);
|
PackageManager.PackageList.Add(remotePackage);
|
||||||
|
|
||||||
|
PMF.InvokePackageMessageEvent($"Successfully installed {remotePackage.ID}@{asset.Version}");
|
||||||
|
|
||||||
return remotePackage;
|
return remotePackage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,12 +26,11 @@ namespace PMF.Managers
|
|||||||
{
|
{
|
||||||
LocalPackageManager.Start();
|
LocalPackageManager.Start();
|
||||||
initialized = true;
|
initialized = true;
|
||||||
Console.WriteLine("PMF intialized succesfully");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.Error.WriteLine($"PMF failed to initialize. \n${ex.InnerException.Message}\nClosing.");
|
PMF.InvokePackageMessageEvent($"PMF failed to initialize. \n${ex.InnerException.Message}\nClosing.");
|
||||||
Environment.Exit(0);
|
Environment.Exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -48,13 +47,18 @@ namespace PMF.Managers
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.Error.WriteLine($"Something failed while cleaning up PMF - \n{ex.InnerException.Message}");
|
string message = null;
|
||||||
|
if (ex.InnerException != null)
|
||||||
|
message = ex.InnerException.Message;
|
||||||
|
else
|
||||||
|
message = ex.Message;
|
||||||
|
PMF.InvokePackageMessageEvent($"Something failed while cleaning up PMF - \n{message}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void notInitialized()
|
private static void notInitialized()
|
||||||
{
|
{
|
||||||
Console.WriteLine("You must initialize PMF first before using it.\nClosing");
|
PMF.InvokePackageMessageEvent("You must initialize PMF first before using it.\nClosing");
|
||||||
Environment.Exit(0);
|
Environment.Exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,6 +110,7 @@ namespace PMF.Managers
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
PMF.InvokePackageMessageEvent("Package already installed");
|
||||||
return PackageState.AlreadyInstalled;
|
return PackageState.AlreadyInstalled;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -142,6 +147,7 @@ namespace PMF.Managers
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
PMF.InvokePackageMessageEvent("Package already installed");
|
||||||
return PackageState.AlreadyInstalled;
|
return PackageState.AlreadyInstalled;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -160,21 +166,26 @@ namespace PMF.Managers
|
|||||||
notInitialized();
|
notInitialized();
|
||||||
|
|
||||||
// check if is already installed
|
// check if is already installed
|
||||||
if (LocalPackageManager.IsPackageInstalled(id, out Package localPackage, out string packageDirectory))
|
if (!LocalPackageManager.IsPackageInstalled(id, out Package localPackage, out string packageDirectory))
|
||||||
|
{
|
||||||
|
Package remotePackage = RemotePackageManager.GetPackageInfo(id);
|
||||||
|
|
||||||
|
if (remotePackage == null)
|
||||||
|
return PackageState.NotExisting;
|
||||||
|
|
||||||
|
Asset asset = RemotePackageManager.GetAssetLatestVersionBySdkVersion(remotePackage);
|
||||||
|
|
||||||
|
if (asset == null)
|
||||||
|
return PackageState.VersionNotFound;
|
||||||
|
|
||||||
|
package = remotePackage;
|
||||||
|
return InstallPackage(remotePackage, asset);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PMF.InvokePackageMessageEvent("Package already installed");
|
||||||
return PackageState.AlreadyInstalled;
|
return PackageState.AlreadyInstalled;
|
||||||
|
}
|
||||||
Package remotePackage = RemotePackageManager.GetPackageInfo(id);
|
|
||||||
|
|
||||||
if (remotePackage == null)
|
|
||||||
return PackageState.NotExisting;
|
|
||||||
|
|
||||||
Asset asset = RemotePackageManager.GetAssetLatestVersionBySdkVersion(remotePackage);
|
|
||||||
|
|
||||||
if (asset == null)
|
|
||||||
return PackageState.VersionNotFound;
|
|
||||||
|
|
||||||
package = remotePackage;
|
|
||||||
return InstallPackage(remotePackage, asset);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -204,22 +215,27 @@ namespace PMF.Managers
|
|||||||
notInitialized();
|
notInitialized();
|
||||||
|
|
||||||
// check if is already installed
|
// check if is already installed
|
||||||
if (!LocalPackageManager.IsPackageInstalled(id, out Package localPackage, out string packageDirectory))
|
if (LocalPackageManager.IsPackageInstalled(id, out Package localPackage, out string packageDirectory))
|
||||||
|
{
|
||||||
|
var remotePackage = RemotePackageManager.GetPackageInfo(id);
|
||||||
|
|
||||||
|
if (remotePackage == null)
|
||||||
|
return PackageState.NotExisting;
|
||||||
|
|
||||||
|
var asset = RemotePackageManager.GetAssetLatestVersion(remotePackage);
|
||||||
|
|
||||||
|
// You already have the latest version
|
||||||
|
if (localPackage.Assets[0].Version == asset.Version)
|
||||||
|
return PackageState.UpToDate;
|
||||||
|
|
||||||
|
Uninstall(id);
|
||||||
|
return InstallPackage(remotePackage, asset);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PMF.InvokePackageMessageEvent("Package not installed");
|
||||||
return PackageState.NotInstalled;
|
return PackageState.NotInstalled;
|
||||||
|
}
|
||||||
var remotePackage = RemotePackageManager.GetPackageInfo(id);
|
|
||||||
|
|
||||||
if (remotePackage == null)
|
|
||||||
return PackageState.NotExisting;
|
|
||||||
|
|
||||||
var asset = RemotePackageManager.GetAssetLatestVersion(remotePackage);
|
|
||||||
|
|
||||||
// You already have the latest version
|
|
||||||
if (localPackage.Assets[0].Version == asset.Version)
|
|
||||||
return PackageState.UpToDate;
|
|
||||||
|
|
||||||
Uninstall(id);
|
|
||||||
return InstallPackage(remotePackage, asset);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -236,24 +252,32 @@ namespace PMF.Managers
|
|||||||
notInitialized();
|
notInitialized();
|
||||||
|
|
||||||
// check if is already installed
|
// check if is already installed
|
||||||
if (!LocalPackageManager.IsPackageInstalled(id, out Package localPackage, out string packageDirectory))
|
if (LocalPackageManager.IsPackageInstalled(id, out Package localPackage, out string packageDirectory))
|
||||||
|
{
|
||||||
|
// Up to date
|
||||||
|
if (localPackage.Assets[0].Version == version)
|
||||||
|
{
|
||||||
|
PMF.InvokePackageMessageEvent("Already up to date");
|
||||||
|
return PackageState.UpToDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
var remotePackage = RemotePackageManager.GetPackageInfo(id);
|
||||||
|
|
||||||
|
if (remotePackage == null)
|
||||||
|
return PackageState.NotExisting;
|
||||||
|
|
||||||
|
var asset = remotePackage.GetAssetVersion(version);
|
||||||
|
|
||||||
|
// We don't want to check here if it was success, we just was to remove the package if it is installed
|
||||||
|
Uninstall(id);
|
||||||
|
|
||||||
|
return InstallPackage(remotePackage, asset);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PMF.InvokePackageMessageEvent("Package not installed");
|
||||||
return PackageState.NotInstalled;
|
return PackageState.NotInstalled;
|
||||||
|
}
|
||||||
// You already have the latest version
|
|
||||||
if (localPackage.Assets[0].Version == version)
|
|
||||||
return PackageState.UpToDate;
|
|
||||||
|
|
||||||
var remotePackage = RemotePackageManager.GetPackageInfo(id);
|
|
||||||
|
|
||||||
if (remotePackage == null)
|
|
||||||
return PackageState.NotExisting;
|
|
||||||
|
|
||||||
var asset = remotePackage.GetAssetVersion(version);
|
|
||||||
|
|
||||||
// We don't want to check here if it was success, we just was to remove the package if it is installed
|
|
||||||
Uninstall(id);
|
|
||||||
|
|
||||||
return InstallPackage(remotePackage, asset);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -270,7 +294,10 @@ namespace PMF.Managers
|
|||||||
notInitialized();
|
notInitialized();
|
||||||
|
|
||||||
if (!LocalPackageManager.IsPackageInstalled(id, out Package localPackage, out string pd))
|
if (!LocalPackageManager.IsPackageInstalled(id, out Package localPackage, out string pd))
|
||||||
|
{
|
||||||
|
PMF.InvokePackageMessageEvent("Already up to date");
|
||||||
return PackageState.NotInstalled;
|
return PackageState.NotInstalled;
|
||||||
|
}
|
||||||
|
|
||||||
var remotePackage = RemotePackageManager.GetPackageInfo(id);
|
var remotePackage = RemotePackageManager.GetPackageInfo(id);
|
||||||
|
|
||||||
@ -281,11 +308,17 @@ namespace PMF.Managers
|
|||||||
|
|
||||||
// doesn't exist for provided sdk version
|
// doesn't exist for provided sdk version
|
||||||
if (asset == null)
|
if (asset == null)
|
||||||
|
{
|
||||||
|
PMF.InvokePackageMessageEvent("Package doesn't exist for provided SDK version");
|
||||||
return PackageState.NotExisting;
|
return PackageState.NotExisting;
|
||||||
|
}
|
||||||
|
|
||||||
// You already have the latest version
|
// You already have the latest version
|
||||||
if (localPackage.Assets[0].Version == asset.Version)
|
if (localPackage.Assets[0].Version == asset.Version)
|
||||||
|
{
|
||||||
|
PMF.InvokePackageMessageEvent("Already up to date");
|
||||||
return PackageState.UpToDate;
|
return PackageState.UpToDate;
|
||||||
|
}
|
||||||
|
|
||||||
Uninstall(id);
|
Uninstall(id);
|
||||||
return InstallPackage(remotePackage, asset);
|
return InstallPackage(remotePackage, asset);
|
||||||
|
|||||||
@ -21,13 +21,15 @@ namespace PMF.Managers
|
|||||||
{
|
{
|
||||||
using (WebClient client = new WebClient())
|
using (WebClient client = new WebClient())
|
||||||
{
|
{
|
||||||
|
PMF.InvokePackageMessageEvent("Downloading package information");
|
||||||
string json = client.DownloadString($"{Config.RepositoryEndpoint}/{id}");
|
string json = client.DownloadString($"{Config.RepositoryEndpoint}/{id}");
|
||||||
|
PMF.InvokePackageMessageEvent("Parsing package information");
|
||||||
return JsonConvert.DeserializeObject<Package>(json);
|
return JsonConvert.DeserializeObject<Package>(json);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (WebException)
|
catch (WebException)
|
||||||
{
|
{
|
||||||
Console.Error.WriteLine("Couldn't download information from the server");
|
PMF.InvokePackageMessageEvent("Couldn't download information from the server");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -42,10 +44,19 @@ namespace PMF.Managers
|
|||||||
{
|
{
|
||||||
using (WebClient client = new WebClient())
|
using (WebClient client = new WebClient())
|
||||||
{
|
{
|
||||||
|
PMF.InvokePackageMessageEvent("Downloading asset");
|
||||||
|
|
||||||
var zipPath = Path.Combine(Config.TemporaryFolder, id);
|
var zipPath = Path.Combine(Config.TemporaryFolder, id);
|
||||||
client.DownloadFile(asset.Url, Path.Combine(zipPath, asset.FileName));
|
client.DownloadFile(asset.Url, Path.Combine(zipPath, asset.FileName));
|
||||||
|
|
||||||
foreach (var dependency in asset.Dependencies)
|
foreach (var dependency in asset.Dependencies)
|
||||||
|
{
|
||||||
|
PMF.InvokePackageMessageEvent($"Downloading dependency with id: {dependency.ID}");
|
||||||
client.DownloadFile(dependency.Url, Path.Combine(zipPath, dependency.FileName));
|
client.DownloadFile(dependency.Url, Path.Combine(zipPath, dependency.FileName));
|
||||||
|
}
|
||||||
|
|
||||||
|
PMF.InvokePackageMessageEvent("Finished downloading all required files");
|
||||||
|
|
||||||
return zipPath;
|
return zipPath;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
18
PMF/src/PMF.cs
Normal file
18
PMF/src/PMF.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace PMF
|
||||||
|
{
|
||||||
|
public delegate void OnPackageMessage(string message);
|
||||||
|
|
||||||
|
public static class PMF
|
||||||
|
{
|
||||||
|
public static event OnPackageMessage OnPackageMessage;
|
||||||
|
|
||||||
|
internal static void InvokePackageMessageEvent(string message)
|
||||||
|
{
|
||||||
|
OnPackageMessage?.Invoke(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user