diff --git a/PMF/src/Managers/LocalPackageManager.cs b/PMF/src/Managers/LocalPackageManager.cs index 4e84aec..74dd4c1 100644 --- a/PMF/src/Managers/LocalPackageManager.cs +++ b/PMF/src/Managers/LocalPackageManager.cs @@ -108,8 +108,34 @@ namespace PMF.Managers // 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)); + if (dependency.Type == DependencyType.Standalone) + { + PMF.InvokePackageMessageEvent($"Extracting dependency with id: {dependency.ID} of type standalone"); + ZipFile.ExtractToDirectory(Path.Combine(zipPath, dependency.FileName), Path.Combine(Config.PackageInstallationFolder, remotePackage.ID, "Dependencies", dependency.ID)); + } + else // DependencyType.Package + { + PMF.InvokePackageMessageEvent($"Downloading dependency with id: {dependency.ID} of type package"); + + var success = PackageManager.Install(dependency.ID, dependency.Version, out Package p); + + if (success == PackageState.Installed) + { + PMF.InvokePackageMessageEvent($"Package dependency installed successfully"); + } + else if (success == PackageState.VersionNotFound) + { + PMF.InvokePackageMessageEvent("Asset not found"); + } + else if (success == PackageState.NotExisting) + { + PMF.InvokePackageMessageEvent("Package not found"); + } + else + { + PMF.InvokePackageMessageEvent($"Something went wrong installing dependency with id: {dependency.ID}"); + } + } } remotePackage.Assets.Clear(); diff --git a/PMF/src/Managers/PackageManager.cs b/PMF/src/Managers/PackageManager.cs index 7810e80..b799937 100644 --- a/PMF/src/Managers/PackageManager.cs +++ b/PMF/src/Managers/PackageManager.cs @@ -82,7 +82,7 @@ namespace PMF.Managers /// The id of the package /// The version of the asset /// The package that was installed - /// true Installation successful, false already installed + /// Final package state of installation public static PackageState Install(string id, Version version, out Package package) { package = null; diff --git a/PMF/src/Package/Dependency.cs b/PMF/src/Package/Dependency.cs index a5bc635..9a9b149 100644 --- a/PMF/src/Package/Dependency.cs +++ b/PMF/src/Package/Dependency.cs @@ -1,4 +1,6 @@ -namespace PMF +using System; + +namespace PMF { /// /// Files that an asset depends on @@ -15,6 +17,16 @@ /// public string Checksum { get; set; } + /// + /// Type of dependency + /// + public DependencyType Type { get; set; } + + /// + /// Version of the dependency if type is Package + /// + public Version Version { get; set; } + /// /// The file name of the dependecy /// diff --git a/PMF/src/Package/DependencyType.cs b/PMF/src/Package/DependencyType.cs new file mode 100644 index 0000000..4cf5376 --- /dev/null +++ b/PMF/src/Package/DependencyType.cs @@ -0,0 +1,8 @@ +namespace PMF +{ + public enum DependencyType + { + Package, + Standalone + } +}