protected bool Equals(Candidate other) { if (other == null) return false; return string.Equals(RelativePath, other.RelativePath) && string.Equals(Name, other.Name) && string.Equals(Summary, other.Summary) && string.Equals(Category, other.Category) && Equals(Version, other.Version) && Architecture == other.Architecture && NeedsTerminal == other.NeedsTerminal; }
/// <summary> /// Detects <see cref="Candidates"/> in the <see cref="ImplementationDirectory"/>. /// </summary> /// <param name="handler">A callback object used when the the user needs to be informed about IO tasks.</param> /// <exception cref="InvalidOperationException"><see cref="ImplementationDirectory"/> is <c>null</c> or empty.</exception> /// <exception cref="OperationCanceledException">The user canceled the task.</exception> /// <exception cref="IOException">There was a problem generating the manifest or detectng the executables.</exception> /// <exception cref="UnauthorizedAccessException">Write access to temporary files was not permitted.</exception> public void DetectCandidates(ITaskHandler handler) { #region Sanity checks if (handler == null) throw new ArgumentNullException(nameof(handler)); if (string.IsNullOrEmpty(ImplementationDirectory)) throw new InvalidOperationException("Implementation directory is not set."); #endregion _candidates.Clear(); handler.RunTask(new SimpleTask(Resources.DetectingCandidates, () => _candidates.AddRange(Detection.ListCandidates(new DirectoryInfo(ImplementationDirectory))))); MainCandidate = _candidates.FirstOrDefault(); }