Skip to content

Instantly share code, notes, and snippets.

@yannisgu
Created April 12, 2014 11:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yannisgu/10532209 to your computer and use it in GitHub Desktop.
Save yannisgu/10532209 to your computer and use it in GitHub Desktop.
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