Skip to content

Package details and the source of every row (#24, part 1) - #25

Merged
FedeB2160 merged 3 commits into
mainfrom
feat/details-source
Oct 14, 2026
Merged

FedeB2160 merged 3 commits into
mainfrom
feat/details-source

Conversation

@FedeB2160

@FedeB2160 FedeB2160 commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

First of three PRs for #24: package details and the source of every row.

Details

Details of highlighted package is in the context menu of all three lists. The Install list had no context menu until now. The item shows winget's own text in the themed dialog:

  • list --id X -e --details for an installed package (scope, installer type, location);
  • show --id X -e --source S for the catalogue part (description, publisher, homepage, licence, release notes), when the row has a source. ARP-only programs have none.

Nothing is parsed (ADR 0021). winget translates its labels (Editore:, Licenza:, Ambito installazione:), so extracting fields would need one parser per language and would break silently when a translation changes.

The read is one background job behind Test-WinGetBusy and the busy state, like an export (ADR 0003). The item is disabled while busy, like the pin items. The dialog's text box now scrolls (MaxHeight="480"), so a long manifest no longer grows the window off the screen.

Source

WgtRow has a Source:

  • Search without the Store runs with --source winget, so the source is winget.
  • Search with the Store: the source is the last column when it has no :. Match values always carry one (Tag: 7zip), source names never do. Checked against winget 1.29.380.
  • list: the last column, not the fourth. Disponibile only appears when something has an update.
  • upgrade: the fifth column.

The Install list shows a SOURCE column. Install passes --source "<Source>" when the row has one. Without it, install --id X -e also queries the Store over the network. Updates and Installed are unchanged.

After the Sandbox test

  • The Store is searched on its own. With MS Store ticked, a single search over every source with --count 25 hid the Store: since winget 1.29 REST results are no longer sorted to the top, and "spotify" found 33 winget packages with the Store app 34th. Now there are two searches in the same job: winget (--count 25), then msstore (--count 10), with the Store results appended. The source of a row is the one that was queried; no column is read for it. A Store that does not answer, as in the Sandbox (0x8A15003B), leaves the winget results and logs why. -Live checks "spotify": 25 winget results, then 1 msstore.
  • Web addresses in the details open with a click. Show-AppDialog -Links shows a read-only RichTextBox, still selectable, with one Hyperlink per address. The link handler moved to Add-LinkHandler, and the popup gets one too.

Tests

  • Test-InvokeWinGet.ps1:
    • source from four search shapes, list with 5 columns and an ARP row, and upgrade;
    • Get-WinGetDetails runs the right commands for installed / ARP / catalogue rows;
    • the details text is cleaned of spinner frames and keeps its indentation.
  • Test-Ui.ps1:
    • the SOURCE column, and --source passed only when the row has one;
    • the Details item in all three menus, disabled while busy;
    • a full details cycle through a stub winget, with the popup intercepted: the busy state is taken, then released, and the title names the package;
    • the dialog scrolls.
  • -Live: Get-WinGetDetails on 7zip.7zip against the real winget (38 lines).

Both suites pass offline, and Test-Ui.ps1 -Live passes. The dialog was rendered with the real 7-Zip text in both themes.

🤖 Generated with Claude Code

Details of highlighted package, in the context menu of all three lists,
shows winget's own text: list --details for an installed package, show
from the row's source for the catalogue part. The labels winget prints
are translated, so nothing is parsed (ADR 0021). The read runs in one
job behind the busy state; the dialog text now scrolls.

Every row carries its Source: winget for a search without the Store,
the last column otherwise (Match values always contain ':'), the last
column of list (Available only appears when something has an update)
and the fifth of upgrade. Install passes --source, so a winget package
no longer makes winget query the Store too.

Part of #24.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
FedeB2160 and others added 2 commits October 14, 2026 13:59
With MS Store ticked the search ran once over every source with --count
25. Since winget 1.29 REST results are no longer sorted to the top, so a
common word filled the list with winget packages: 'spotify' found 33 and
the Store app came 34th, never shown. Now winget (--count 25) and msstore
(--count 10) are two searches in the same job, results appended; the
source of a row is the one that was queried, not a column to guess. A
Store that does not answer leaves the winget results and logs why.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Show-AppDialog -Links shows the text in a read-only RichTextBox, still
selectable, with a Hyperlink per http(s) address (closing punctuation
left out). The link handler of the main window moves to Add-LinkHandler
and the popup gets one too, since the event only bubbles inside its own
window.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@FedeB2160
FedeB2160 merged commit 408c370 into main Oct 14, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant