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(); 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;
} }
} }

View File

@ -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,9 +166,8 @@ 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))
return PackageState.AlreadyInstalled; {
Package remotePackage = RemotePackageManager.GetPackageInfo(id); Package remotePackage = RemotePackageManager.GetPackageInfo(id);
if (remotePackage == null) if (remotePackage == null)
@ -176,6 +181,12 @@ namespace PMF.Managers
package = remotePackage; package = remotePackage;
return InstallPackage(remotePackage, asset); return InstallPackage(remotePackage, asset);
} }
else
{
PMF.InvokePackageMessageEvent("Package already installed");
return PackageState.AlreadyInstalled;
}
}
/// <summary> /// <summary>
/// Uninstalls a package /// Uninstalls a package
@ -204,9 +215,8 @@ 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))
return PackageState.NotInstalled; {
var remotePackage = RemotePackageManager.GetPackageInfo(id); var remotePackage = RemotePackageManager.GetPackageInfo(id);
if (remotePackage == null) if (remotePackage == null)
@ -221,6 +231,12 @@ namespace PMF.Managers
Uninstall(id); Uninstall(id);
return InstallPackage(remotePackage, asset); return InstallPackage(remotePackage, asset);
} }
else
{
PMF.InvokePackageMessageEvent("Package not installed");
return PackageState.NotInstalled;
}
}
/// <summary> /// <summary>
/// Updates a package to the most recent version regardless of sdk version /// Updates a package to the most recent version regardless of sdk version
@ -236,12 +252,14 @@ 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))
return PackageState.NotInstalled; {
// Up to date
// You already have the latest version
if (localPackage.Assets[0].Version == version) if (localPackage.Assets[0].Version == version)
{
PMF.InvokePackageMessageEvent("Already up to date");
return PackageState.UpToDate; return PackageState.UpToDate;
}
var remotePackage = RemotePackageManager.GetPackageInfo(id); var remotePackage = RemotePackageManager.GetPackageInfo(id);
@ -255,6 +273,12 @@ namespace PMF.Managers
return InstallPackage(remotePackage, asset); return InstallPackage(remotePackage, asset);
} }
else
{
PMF.InvokePackageMessageEvent("Package not installed");
return PackageState.NotInstalled;
}
}
/// <summary> /// <summary>
/// Updates a package to the most recent version given an sdk version /// Updates a package to the most recent version given an sdk version
@ -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);

View File

@ -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
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);
}
}
}