Skip to content

Icon picker: move catalogue to LocalAppData, grow default to 100 glyphs#42

Merged
StuartMeeks merged 1 commit into
mainfrom
feat/icon-catalogue-localappdata
Jun 1, 2026
Merged

Icon picker: move catalogue to LocalAppData, grow default to 100 glyphs#42
StuartMeeks merged 1 commit into
mainfrom
feat/icon-catalogue-localappdata

Conversation

@StuartMeeks

Copy link
Copy Markdown
Owner

Follow-up to the icon picker (PR #40), addressing two requests: make the catalogue durable across updates, and broaden the default set.

What & why

  • Catalogue relocated to %LOCALAPPDATA%\Snipdeck\icon-catalogue.json (renamed from appsettings.json). Previously it shipped beside the executable, where a Velopack update would overwrite user edits. Now it lives alongside the rest of the app config, so edits survive updates.
  • Seeded on first run from a default embedded in the app. The embedded default ships fresh with each release and can't be deleted; on first run it's copied to the LocalAppData file, which is what the app reads thereafter (re-read on each open). The embedded default also serves as the fallback when the user copy is missing or malformed — so a bad edit can't break the picker. Delete the file to restore the default.
  • Default set grown from 50 to 100 glyphs, all code points grounded against the official Segoe Fluent Icons font list. Includes the requested commerce/business concepts: billing (PaymentCard), customer (ContactInfo), contract (Certificate), invoice (ReportDocument), person (Contact), marketplace (Shop), orders (ShoppingCart), preview, price list (BulletedList), renewal (RepeatAll), report (AreaChart), transfer (Switch).

How

  • New IconCatalogueFileName / IconCatalogueFilePath on DefaultPaths, surfaced through IPathProvider (and its implementers + the test fake), wired in Bootstrap.
  • GlyphCatalogueProvider now takes the LocalAppData path, seeds-if-missing (write-then-rename), reads the user file, and falls back to the embedded resource. The catalogue JSON is an EmbeddedResource with a pinned LogicalName.
  • CHANGELOG and the picker's empty-state / comments updated to match.

Testing

  • 226 Core unit tests pass (no behaviour change to the search/selection VM, so existing GlyphPickerViewModel coverage still applies).
  • WinUI head compile-verified on the Windows build agent: 0 warnings, 0 errors, embedded resource resolves.

🤖 Generated with Claude Code

The catalogue now lives at %LOCALAPPDATA%\Snipdeck\icon-catalogue.json
(renamed from appsettings.json) so user edits survive Velopack updates.
It's seeded on first run from a default embedded in the app — delete the
file to restore it — and the embedded default also serves as the fallback
when the user copy is missing or malformed. Read fresh on each open.

The default set grows from 50 to 100 glyphs, all code points grounded
against the official Segoe Fluent Icons list, and now covers billing,
customer, contract, invoice, person, marketplace, orders, preview, price
list, renewal, report and transfer.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@StuartMeeks StuartMeeks merged commit cacaee2 into main Jun 1, 2026
6 checks passed
@StuartMeeks StuartMeeks deleted the feat/icon-catalogue-localappdata branch June 1, 2026 08:06
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