Added messaging event pipe
This commit is contained in:
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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,21 +166,26 @@ namespace PMF.Managers
|
||||
notInitialized();
|
||||
|
||||
// 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;
|
||||
|
||||
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>
|
||||
@ -204,22 +215,27 @@ namespace PMF.Managers
|
||||
notInitialized();
|
||||
|
||||
// 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;
|
||||
|
||||
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>
|
||||
@ -236,24 +252,32 @@ namespace PMF.Managers
|
||||
notInitialized();
|
||||
|
||||
// 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;
|
||||
|
||||
// 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>
|
||||
@ -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);
|
||||
|
||||
@ -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
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