Skip to content

Add overlay definitions and enhance poster icon configuration#312

Open
DineshSolanki wants to merge 8 commits into
masterfrom
feature/plugin-eco
Open

Add overlay definitions and enhance poster icon configuration#312
DineshSolanki wants to merge 8 commits into
masterfrom
feature/plugin-eco

Conversation

@DineshSolanki

@DineshSolanki DineshSolanki commented Jul 18, 2026

Copy link
Copy Markdown
Owner

What

Folicon Plugin ecosystem rebuilt from scratch after the previous discarded dll approch.

Why

This is part of folicon plugin feature ecosystem.

How

Implemented multiple overlay definitions with respective properties, updated the PreviewerViewModel for dynamic loading, and enhanced the PosterIconConfigViewModel for better data binding. Refactored the UI for improved scalability for multiple overlay, overlays are now controlled by json

Testing

  • Builds successfully (dotnet build)
  • Tested manually on Windows
  • No regressions observed

Screenshots

- Introduced multiple new overlay definitions including "Alternate", "Faelpessoal", "Legacy", "Liaher", and "Windows 11" with respective properties and configurations.
- Updated the PreviewerViewModel to load available overlays dynamically.
- Enhanced PosterIconConfigViewModel to manage overlay selection with a new OverlayItemViewModel for better data binding.
- Implemented a dynamic poster icon renderer that builds its visual tree based on the selected overlay definition.
- Refactored the poster icon configuration view to utilize an ItemsControl for overlay selection, improving UI scalability and maintainability.
- Add Tests for the plugin feature
@codacy-production

codacy-production Bot commented Jul 18, 2026

Copy link
Copy Markdown

Not up to standards ⛔

🔴 Issues 1 minor

Alerts:
⚠ 1 issue (≤ 0 issues of at least minor severity)

Results:
1 new issue

Category Results
CodeStyle 1 minor

View in Codacy

🟢 Metrics 426 complexity · 33 duplication

Metric Results
Complexity 426
Duplication 33

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@DineshSolanki

Copy link
Copy Markdown
Owner Author

Release 1: Core Plugin System (MVP) — ✅ COMPLETE

All 7 phases done. Build verified, 58 tests passing.

Phase Status Key deliverables
Phase 1: Data Model ✅ Done PosterOverlayDefinition, OverlayLayerConfig, 6 overlay.json files, JSON schema
Phase 2: Overlay Loader ✅ Done IOverlayProvider, OverlayProvider, OverlayValidator
Phase 3: Dynamic Renderer ✅ Done DynamicPosterIcon, OverlayPreviewCache, StaRenderer integration
Phase 4: Migrate Overlays ✅ Done 6 overlay definitions, IconOverlay deprecated
Phase 5: UI Integration ✅ Done Dynamic PosterIconConfig, Previewer, DI registration
Phase 7: Settings & Migration ✅ Done String-based overlay IDs, enum→string migration
Testing ✅ Done 58/58 tests passing, golden-image parity with tight 100px threshold

…y overlays via a GitHub-backed catalog.

```
GitHub (FoliCon-Overlays repo)
  catalog.json ──→ OverlayRepositoryService ──→ OverlayStoreViewModel ──→ OverlayStore.xaml
  overlays/{id}/                                   ↕
     manifest.json                              OverlayProvider (reads from %AppData%/FoliCon/Overlays/)
     overlay.json                               DynamicPosterIcon (renders previews)
     preview.png                                OverlayPreviewCache (caches rendered previews)
     *.png (assets)
```
@DineshSolanki DineshSolanki self-assigned this Jul 19, 2026
@DineshSolanki DineshSolanki added the enhancement New feature or request label Jul 19, 2026
@DineshSolanki

Copy link
Copy Markdown
Owner Author

Release 2: Overlay Store + Repository — ✅ COMPLETE

Phase 1: Data Models — ✅ DONE

Deliverable Status Notes
OverlayManifest.cs ✅ Done Per-overlay manifest with metadata, assets, SHA256, ToCatalogEntry() converter
manifest-schema.json ✅ Done JSON Schema for manifest validation (5MB max, semver, SHA256 hex)

Phase 2: Repository Service — ✅ DONE

Deliverable Status Notes
IOverlayRepositoryService.cs ✅ Done Interface: FetchCatalog, FetchManifest, Install, Update, Uninstall, MarkUpdateAvailable
OverlayRepositoryService.cs ✅ Done HTTP via Services.HttpC, disk cache (24h TTL), atomic install (tmp→validate→rename), SHA256 verification, backup/rollback, injectable paths/URL, env var + file override for local dev

Phase 3: ViewModels — ✅ DONE

Deliverable Status Notes
OverlayStoreViewModel.cs ✅ Done Catalog loading, search/filter by query+tag, install/update/uninstall commands, card state persistence across filter changes
OverlayCardViewModel.cs ✅ Done Preview lazy-loading from URL, SizeDisplay/VersionDisplay formatting, INotifyPropertyChanged

Phase 4: Overlay Store UI — ✅ DONE

Deliverable Status Notes
OverlayStore.xaml + .cs ✅ Done HandyControl dialog: SearchBar, tag ComboBox, WrapPanel card grid, BusyIndicator, status bar with error display

Phase 5: Wire Up UI + DI — ✅ DONE

Deliverable Status Notes
DI registrations in App.xaml.cs ✅ Done IOverlayRepositoryService singleton, OverlayUpdateChecker singleton, OverlayStore dialog
DialogServiceExtensions.cs ✅ Done ShowOverlayStore() extension method
PosterIconConfigViewModel ✅ Done IDialogService injection, BrowseOverlayStoreCommand, DemoIconPath returns frozen BitmapImage for community overlays (no file lock)
PosterIconConfig.xaml ✅ Done "Browse Overlay Store..." button enabled with command binding
GlobalVariables.SetOverlayProvider() ✅ Done Ensures DI singleton and static accessor share same IOverlayProvider instance

Phase 6: GitHub Repo Prep — ✅ DONE

  • FoliCon-Overlays

    Deliverable Status Notes
    FoliCon-Overlays/README.md ✅ Done Contribution guide with directory structure, manifest format, validation limits
    FoliCon-Overlays/catalog.json ✅ Done Initial catalog with example-dvd-case overlay
    FoliCon-Overlays/overlays/example-dvd-case/ ✅ Done Test overlay: overlay.json, manifest.json, base.png, front.png, preview.png
    .github/workflows/generate-catalog.yml ✅ Done Auto-generates catalog.json from manifest files on push to main
    .agents/skill ✅ Done AI agent skill to help user interactively generate the overlays

Phase 7: Update Checker — ✅ DONE

Deliverable Status Notes
OverlayUpdateChecker.cs ✅ Done Non-blocking background check on app start, marks updates via MarkUpdateAvailable(), uses shared OverlayConstants.TryCompareVersions()

Community Overlay Support — ✅ DONE

Deliverable Status Notes
PosterOverlayDefinition.OverlayFolderPath ✅ Done [JsonIgnore] property set by OverlayProvider when loading user overlays
DynamicPosterIcon.ResolveImageSource ✅ Done Now non-static, resolves relative paths against _overlayFolderPath for community overlays
DemoIconPath for community overlays ✅ Done Returns frozen BitmapImage (no file lock) instead of file path string

Testing — ✅ DONE

Deliverable Status Notes
OverlayManifestTests.cs ✅ Done 6 tests: defaults, JSON round-trip, serialize, ToCatalogEntry mapping
OverlayRepositoryServiceTests.cs ✅ Done 11 tests: install/uninstall/cache/version with injectable temp paths
OverlayStoreViewModelTests.cs ✅ Done 6 tests: field mapping, size formatting, property notifications, filtering (uses StubRepositoryService)
Total test run ✅ Done 81 tests, 81 passed, 0 failed (verified 2026-07-20)

@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant