Matches the convention used by the other request handlers in this
folder (ReportVersionsRequestHandler.cs, AppDebugRequestHandler.cs,
etc). Addresses PR #1441 review comment.
Backports PepperDash/Essentials#1439 (merged to main at 6ceddcf5) onto
dev/v3-routing (v3.0.0-dev-v3-routing.40):
- New GET /packageManifest CWS route reporting Essentials/plugin/touchpanel
UI package version info (GetPackageManifestRequestHandler).
- EssentialsConfig.Versions now round-trips via [JsonProperty("versions")].
- ConfigReader now detects v1 vs v2 config by presence of system/template
nodes (previously any versions node caused the v1->v2 merge to be
skipped), and re-applies the versions node after merge since
PortalConfigReader.MergeConfigs does not carry it forward.
- Mobile control: track and validate UI client app versions
(ConnectedClientVersionInfo, MobileControlSystemController changes merged
cleanly from the PR).
- Directory.Build.props: adds PackageId AssemblyMetadata item (kept this
branch's 3.0.0-local version).
Conflict resolution notes:
- This branch had already introduced its own AppVersion type (Version +
RepoUrl only) for TouchpanelWrapperApp/UserInterfaces. Replaced it with
the PR's unified NugetVersion (adds PackageId/RepoUrl/Name, all
NullValueHandling.Ignore) to match main's schema, since AppVersion had
no other references in the codebase.
- ConfigReader.LoadConfig on this branch had already fixed a double
Stream.ReadToEnd() bug (reading fileContents once); kept that fix and
layered the PR's v1/v2 detection fix + versions-node preservation on
top of it, plus this branch's null-ConfigObject-after-merge guard.
- EssentialsWebApi.SetupRoutes: inserted the new packageManifest route
into this branch's existing (longer) route list, which already
includes routing-specific endpoints not present on main.
Builds clean (dotnet build on the full solution, 0 errors).
Not pushed - pending local hardware/config testing before push.