Added messaging event pipe

This commit is contained in:
The Doctor
2020-06-26 11:05:08 +01:00
parent 3d0279bf7e
commit 6a477f176c
4 changed files with 124 additions and 52 deletions

View File

@ -22,6 +22,7 @@ namespace PMF.Managers
validateManifestFile();
var json = File.ReadAllText(Config.ManifestFileName);
PackageManager.PackageList = JsonConvert.DeserializeObject<List<Package>>(json);
PMF.InvokePackageMessageEvent("Initialized PMF successfully");
}
/// <summary>
@ -35,6 +36,7 @@ namespace PMF.Managers
var json = JsonConvert.SerializeObject(PackageManager.PackageList);
File.WriteAllText(Config.ManifestFileName, json);
Directory.Delete(Config.TemporaryFolder, true);
PMF.InvokePackageMessageEvent("Successfully cleaned PMF");
}
public static void validateManifestFile()
@ -83,10 +85,11 @@ namespace PMF.Managers
{
string packageDirectory = Path.Combine(Config.PackageInstallationFolder, id);
Directory.Delete(packageDirectory, true);
PMF.InvokePackageMessageEvent($"Successfully removed package {id}");
}
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);
@ -101,16 +104,23 @@ namespace PMF.Managers
/// <returns>The package that was installed</returns>
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));
// Maybe a library folder and check if is installed
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));
}
remotePackage.Assets.Clear();
remotePackage.Assets.Add(asset);
PackageManager.PackageList.Add(remotePackage);
PMF.InvokePackageMessageEvent($"Successfully installed {remotePackage.ID}@{asset.Version}");
return remotePackage;
}
}

View File

@ -26,12 +26,11 @@ namespace PMF.Managers
{
LocalPackageManager.Start();
initialized = true;
Console.WriteLine("PMF intialized succesfully");
}
}
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);
}
}
@ -48,13 +47,18 @@ namespace PMF.Managers
}
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()
{
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);
}
@ -106,6 +110,7 @@ namespace PMF.Managers
}
else
{
PMF.InvokePackageMessageEvent("Package already installed");
return PackageState.AlreadyInstalled;
}
}
@ -142,6 +147,7 @@ namespace PMF.Managers
}
else
{
PMF.InvokePackageMessageEvent("Package already installed");
return PackageState.AlreadyInstalled;
}
}
@ -160,9 +166,8 @@ namespace PMF.Managers
notInitialized();
// check if is already installed
if (LocalPackageManager.IsPackageInstalled(id, out Package localPackage, out string packageDirectory))
return PackageState.AlreadyInstalled;
if (!LocalPackageManager.IsPackageInstalled(id, out Package localPackage, out string packageDirectory))
{
Package remotePackage = RemotePackageManager.GetPackageInfo(id);
if (remotePackage == null)
@ -176,6 +181,12 @@ namespace PMF.Managers
package = remotePackage;
return InstallPackage(remotePackage, asset);
}
else
{
PMF.InvokePackageMessageEvent("Package already installed");
return PackageState.AlreadyInstalled;
}
}
/// <summary>
/// Uninstalls a package
@ -204,9 +215,8 @@ namespace PMF.Managers
notInitialized();
// check if is already installed
if (!LocalPackageManager.IsPackageInstalled(id, out Package localPackage, out string packageDirectory))
return PackageState.NotInstalled;
if (LocalPackageManager.IsPackageInstalled(id, out Package localPackage, out string packageDirectory))
{
var remotePackage = RemotePackageManager.GetPackageInfo(id);
if (remotePackage == null)
@ -221,6 +231,12 @@ namespace PMF.Managers
Uninstall(id);
return InstallPackage(remotePackage, asset);
}
else
{
PMF.InvokePackageMessageEvent("Package not installed");
return PackageState.NotInstalled;
}
}
/// <summary>
/// Updates a package to the most recent version regardless of sdk version
@ -236,12 +252,14 @@ namespace PMF.Managers
notInitialized();
// check if is already installed
if (!LocalPackageManager.IsPackageInstalled(id, out Package localPackage, out string packageDirectory))
return PackageState.NotInstalled;
// You already have the latest version
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);
@ -255,6 +273,12 @@ namespace PMF.Managers
return InstallPackage(remotePackage, asset);
}
else
{
PMF.InvokePackageMessageEvent("Package not installed");
return PackageState.NotInstalled;
}
}
/// <summary>
/// Updates a package to the most recent version given an sdk version
@ -270,7 +294,10 @@ namespace PMF.Managers
notInitialized();
if (!LocalPackageManager.IsPackageInstalled(id, out Package localPackage, out string pd))
{
PMF.InvokePackageMessageEvent("Already up to date");
return PackageState.NotInstalled;
}
var remotePackage = RemotePackageManager.GetPackageInfo(id);
@ -281,11 +308,17 @@ namespace PMF.Managers
// doesn't exist for provided sdk version
if (asset == null)
{
PMF.InvokePackageMessageEvent("Package doesn't exist for provided SDK version");
return PackageState.NotExisting;
}
// You already have the latest version
if (localPackage.Assets[0].Version == asset.Version)
{
PMF.InvokePackageMessageEvent("Already up to date");
return PackageState.UpToDate;
}
Uninstall(id);
return InstallPackage(remotePackage, asset);

View File

@ -21,13 +21,15 @@ namespace PMF.Managers
{
using (WebClient client = new WebClient())
{
PMF.InvokePackageMessageEvent("Downloading package information");
string json = client.DownloadString($"{Config.RepositoryEndpoint}/{id}");
PMF.InvokePackageMessageEvent("Parsing package information");
return JsonConvert.DeserializeObject<Package>(json);
}
}
catch (WebException)
{
Console.Error.WriteLine("Couldn't download information from the server");
PMF.InvokePackageMessageEvent("Couldn't download information from the server");
return null;
}
}
@ -42,10 +44,19 @@ namespace PMF.Managers
{
using (WebClient client = new WebClient())
{
PMF.InvokePackageMessageEvent("Downloading asset");
var zipPath = Path.Combine(Config.TemporaryFolder, id);
client.DownloadFile(asset.Url, Path.Combine(zipPath, asset.FileName));
foreach (var dependency in asset.Dependencies)
{
PMF.InvokePackageMessageEvent($"Downloading dependency with id: {dependency.ID}");
client.DownloadFile(dependency.Url, Path.Combine(zipPath, dependency.FileName));
}
PMF.InvokePackageMessageEvent("Finished downloading all required files");
return zipPath;
}
}

18
PMF/src/PMF.cs Normal file
View 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);
}
}
}