namespace KillerPDF.Features { /// /// What AboutController needs from the window hosting it, beyond the shared shell services. /// /// Every member is a value or a plain string, never a control, so the controller holds no /// reference to a TextBlock or a Button and can be driven by a stub in a test. /// /// KillerPDF differs from Killendar's version in one way worth knowing: several of the About /// card's lines are built as INLINES rather than set as text - the wordmark is two differently /// styled runs, and the tagline, version and alias each carry a hyperlink. Constructing those /// is UI work, so it stays in the shell and the controller hands over only the strings and the /// one boolean the shell needs to decide what to build. /// internal interface IAboutHost : IShellServices { /// Code-signing subject, or the unsigned message. string Publisher { set; } /// Certificate thumbprint, or "(none)". string Thumbprint { set; } /// SHA-256 of the running exe. Set twice: the "computing" placeholder first, /// then the real digest once the background hash finishes. string Sha256 { set; } /// Release date baked in from the csproj, shown muted opposite the version. /// Empty on an older build that predates the attribute. string ReleaseDate { set; } /// Builds the version line as a hyperlink through to that release tag. void SetVersion(string version); /// The quoted alias line. Null hides it - which is the case unless the exe is /// signed AND the signature verifies AND the subject is Steve's, because a fork signed by /// somebody else must not claim the alias. void SetAlias(string? alias); /// Whether a newer release exists, and whether the button is live while a /// download is running. string UpdateText { set; } bool UpdateVisible { set; } bool UpdateEnabled { set; } /// Blocks a self-update while there are unsaved changes. bool IsDirty { get; } /// The document to reopen after the update relaunches, if any. string? FileToReopen { get; } /// Dismisses any other full-window overlay, then fades the About card in. /// The overlays are mutually exclusive rather than stacking. void ShowCard(); } }