Created
April 12, 2014 11:57
-
-
Save yannisgu/10532209 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using Semver; | |
namespace CustomPackageProvider | |
{ | |
public class CustomPackageProvider | |
{ | |
public const string ProviderName = "CustomProvider"; | |
private List<Package> packages = new List<Package>() | |
{ | |
new Package() | |
{ | |
Name = "MyPackage", | |
Version = new SemVersion(1, 0, 0) | |
}, | |
new Package() | |
{ | |
Name = "MyPackage", | |
Version = new SemVersion(1, 1, 0) | |
}, | |
new Package() | |
{ | |
Name = "MyPackage", | |
Version = new SemVersion(2, 0, 0) | |
}, | |
new Package() | |
{ | |
Name = "MyPackage", | |
Version = new SemVersion(1, 1, 0) | |
}, | |
new Package() | |
{ | |
Name = "Package2", | |
Version = new SemVersion(1, 1, 0) | |
}, | |
new Package() | |
{ | |
Name = "Package3", | |
Version = new SemVersion(1, 1, 0) | |
}, | |
new Package() | |
{ | |
Name = "Package3", | |
Version = new SemVersion(3, 0, 0), | |
Installed = true | |
} | |
}; | |
public string GetProviderName(Func<string, IEnumerable<object>, object> c) | |
{ | |
return ProviderName; | |
} | |
public bool FindPackage(string name, string requiredVersion, string minimumVersion, string maximumVersion, | |
Func<string, IEnumerable<object>, object> c) | |
{ | |
requiredVersion = requiredVersion ?? ""; | |
minimumVersion = minimumVersion ?? ""; | |
maximumVersion = maximumVersion ?? ""; | |
var callback = Helper.GetCallback<YieldPackage>(c); | |
bool allVersions = Helper.IsSwitchSet(c, "AllVersions"); | |
SemVersion reqVersion; | |
SemVersion.TryParse(requiredVersion, out reqVersion); | |
SemVersion minVersion; | |
SemVersion.TryParse(minimumVersion, out minVersion); | |
SemVersion maxVersion; | |
SemVersion.TryParse(maximumVersion, out maxVersion); | |
IEnumerable<Package> foundPackages = packages; | |
if (reqVersion != null) | |
{ | |
foundPackages = foundPackages.Where(p => p.Version == reqVersion); | |
} | |
if (minVersion != null) | |
{ | |
foundPackages = foundPackages.Where(p => p.Version > minVersion || p.Version == minVersion); | |
} | |
if (maxVersion != null) | |
{ | |
foundPackages = foundPackages.Where(p => p.Version < maxVersion || p.Version == maxVersion); | |
} | |
if (!string.IsNullOrEmpty(name)) | |
{ | |
foundPackages = | |
foundPackages.Where(p => p.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)); | |
} | |
if (!allVersions) | |
{ | |
foundPackages = from pack in foundPackages | |
group pack by pack.Name | |
into grp | |
select grp.First(p => p.Version == grp.Max(pa => pa.Version)); | |
} | |
foundPackages.ToList() | |
.ForEach( | |
p => callback(p.Name + "." + p.Version, p.Name, p.Version.ToString(), "semver", p.Summary, p.Source)); | |
return true; | |
} | |
public bool InstallPackageByFastpath(string fastPath, Func<string, IEnumerable<object>, object> c) | |
{ | |
var package = packages.FirstOrDefault(p => p.FastPath == fastPath); | |
if (package != null) | |
{ | |
package.Installed = true; | |
return true; | |
} | |
return false; | |
} | |
public bool GetInstalledPackages(string name, Func<string, IEnumerable<object>, object> c) | |
{ | |
var callback = Helper.GetCallback<YieldPackage>(c); | |
foreach (var package in packages.Where(p => p.Installed && (string.IsNullOrEmpty(name) || p.Name == name))) | |
{ | |
callback(package.FastPath, package.Name, package.Version.ToString(), "semver", package.Summary, | |
package.Source); | |
} | |
return true; | |
} | |
public bool UninstallPackage(string fastPath, Func<string, IEnumerable<object>, object> c) | |
{ | |
var package = packages.FirstOrDefault(p => p.FastPath == fastPath); | |
if (package != null) | |
{ | |
package.Installed = false; | |
return true; | |
} | |
return false; | |
} | |
public bool InstallPackageByFile(string filePath, Func<string, IEnumerable<object>, object> c) | |
{ | |
return true; | |
} | |
internal bool FindPackageByFile(string filePath, Func<string, IEnumerable<object>, object> c) | |
{ | |
return true; | |
} | |
public void GetMetadataDefinitions(Func<string, IEnumerable<object>, object> c) | |
{ | |
} | |
public void GetInstallationOptionDefinitions(Func<string, IEnumerable<object>, object> c) | |
{ | |
} | |
public void AddPackageSource(string name, string location, bool trusted, | |
Func<string, IEnumerable<object>, object> c) | |
{ | |
} | |
public void RemovePackageSource(string name, Func<string, IEnumerable<object>, object> c) | |
{ | |
} | |
public bool GetPackageSources(Func<string, IEnumerable<object>, object> c) | |
{ | |
return true; | |
} | |
public bool IsValidPackageSource(string packageSource, Func<string, IEnumerable<object>, object> c) | |
{ | |
return true; | |
} | |
public bool IsTrustedPackageSource(string packageSource, Func<string, IEnumerable<object>, object> c) | |
{ | |
return true; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment