public PackedPackage(FileInfo fileInfo) { // Generate temporary directory var tempDir = new DirectoryInfo(Path.GetTempPath()).CreateSubdirectory(Path.GetRandomFileName()); // Extract the package if (!SevenZipArchive.IsSevenZipFile(fileInfo)) throw new InvalidDataException("Not a valid 7-Zip archive. All Craftitude packages need to be packed in the 7-Zip format."); using (var szarch = SevenZipArchive.Open(fileInfo)) { szarch.WriteToDirectory(tempDir.FullName); } // Create package instance of the freshly unpacked stuff Package = new Package(tempDir); }
public IEnumerable<Package.Version> SearchPackageVersions(Package package, IEnumerable<Package.Version.Condition.VersionCondition> versionConditions) { var versions = package.Versions; foreach (var condition in versionConditions) { versions.RemoveAll(v => { bool r; switch (condition.ConditionType) { case Package.Version.Condition.VersionCondition.VersionConditionType.Equal: r = v.ID == condition.Version; break; case Package.Version.Condition.VersionCondition.VersionConditionType.Newer: r = versions.IndexOf(v) > versions.IndexOf(versions.Single(sv => sv.ID.Equals(condition.Version))); break; case Package.Version.Condition.VersionCondition.VersionConditionType.NewerOrEqual: r = versions.IndexOf(v) >= versions.IndexOf(versions.Single(sv => sv.ID.Equals(condition.Version))); break; case Package.Version.Condition.VersionCondition.VersionConditionType.Not: r = versions.IndexOf(v) != versions.IndexOf(versions.Single(sv => sv.ID.Equals(condition.Version))); break; case Package.Version.Condition.VersionCondition.VersionConditionType.Older: r = versions.IndexOf(v) < versions.IndexOf(versions.Single(sv => sv.ID.Equals(condition.Version))); break; case Package.Version.Condition.VersionCondition.VersionConditionType.OlderOrEqual: r = versions.IndexOf(v) <= versions.IndexOf(versions.Single(sv => sv.ID.Equals(condition.Version))); break; default: // regex r = Regex.IsMatch( v.ID, Regex.Escape(condition.Version).Replace(@"\*", ".*").Replace(@"\?", ".") // 1.* => 1\..* ); break; } return !r; }); } return versions; }
public IEnumerable<Package.Version> SearchPackageVersions(Package package, params Package.Version.Condition.VersionCondition[] versionConditions) { return this.SearchPackageVersions(package, versionConditions.AsEnumerable()); }