Skip to content

[WIP] feat!: Complete architectural rewrite, UI/UX upgrade to wizard-style#7

Draft
TemaSM wants to merge 3 commits intomasterfrom
v1.2-recode
Draft

[WIP] feat!: Complete architectural rewrite, UI/UX upgrade to wizard-style#7
TemaSM wants to merge 3 commits intomasterfrom
v1.2-recode

Conversation

@TemaSM
Copy link
Copy Markdown
Member

@TemaSM TemaSM commented Jan 6, 2026

TODO

  • Automate cross-platform builds via GitHub Actions

Highlights

Complete architectural rewrite of Jellyfin Orsay Installer for better maintainability, extensibility, and user experience.

Key features: 5-step wizard UI, intelligent network selection, SSDP-based TV discovery, and full i18n support with 24 languages.

Jellyfin-Orsay-Installer_n2KP6LH0Dw.mp4

What's New

UI/UX

Feature Description
5-Step Wizard Welcome → Network Setup → TV Instructions → Installation → Completion
Step Indicator Visual progress bar showing current position in the wizard
TV Scanner SSDP network discovery with model identification and confidence scoring
Log Viewer New dialog to view application logs with color-coded severity levels
Grouped Adapters Physical, Other, Virtual — clearly separated

Smart Network Selection

  • Intelligent Recommendations: Multi-factor scoring algorithm now correctly prioritizes physical adapters over virtual ones
  • Virtual Adapter Detection: Automatically identifies Hyper-V, VMware, Docker, WSL, and 40+ VPN/virtual adapter types
  • Gateway Detection: Adapters with active network connections receive higher priority
  • CGNAT/APIPA Handling: Automatically deprioritizes problematic IP ranges

TV Discovery

  • SSDP Network Scanning: Automatically discover Samsung Orsay TVs on your network
  • Model Identification: Detect TV series (E/F/H/J) for tailored setup instructions
  • Confidence Scoring: Visual indicator showing detection reliability
  • Real-time Progress: Live status updates during network scan

Localization

  • GNU GetText Format: Industry-standard .po files for translations (for integrating Crowdin/Weblate in future)
  • 24 Languages Supported: cs, da, de, el, en, es, fi, fr, hu, it, ja, ko, nl, no, pl, pt, ro, ru, sv, th, tr, uk, vi, zh-CN
  • Pluralization Support: Proper plural forms for all languages
  • Auto-Discovery: Languages automatically detected from directory structure

CI/CD

  • GitHub Actions Workflow: Automated multi-platform builds on push/PR
  • 6 Platform Targets: Windows (x64, ARM64), Linux (x64, ARM64), macOS (x64, ARM64)
  • Self-Contained Executables: Single-file deployment, no .NET runtime required

Technical

  • Dependency Injection: Clean service layer with testable components
  • Error Handling: Railway-oriented Result pattern for robust error flows
  • Thread-Safe Logging: Concurrent access support for log entries
  • .NET 10.0: Latest framework with performance improvements

Dependencies

Package Before After
.NET 8.0 10.0
Avalonia 11.3.6 11.3.10
CommunityToolkit.Mvvm 8.2.1 8.4.0
Karambolo.PO 1.12.0

Supported Languages (24)

🇬🇧 English 🇳🇱 Nederlands 🇷🇺 Русский 🇩🇪 Deutsch
🇫🇷 Français 🇪🇸 Español 🇵🇹 Português 🇵🇱 Polski
🇮🇹 Italiano 🇺🇦 Українська 🇨🇳 简体中文 🇹🇷 Türkçe
🇸🇪 Svenska 🇯🇵 日本語 🇰🇷 한국어 🇹🇭 ไทย
🇻🇳 Tiếng Việt 🇩🇰 Dansk 🇳🇴 Norsk 🇫🇮 Suomi
🇨🇿 Čeština 🇭🇺 Magyar 🇷🇴 Română 🇬🇷 Ελληνικά
Pluralization rules
Forms Languages
3 Russian, Ukrainian, Polish, Czech, Romanian
2 English, Dutch, German, French, Spanish, Portuguese, Italian, Turkish, Swedish, Danish, Norwegian, Finnish, Hungarian, Greek
1 Chinese, Japanese, Korean, Thai, Vietnamese

Framework

Package Before After
.NET 8.0 10.0
Avalonia 11.3.6 11.3.10
CommunityToolkit.Mvvm 8.2.1 8.4.0
Karambolo.PO 1.12.0

Changelog

Added

  • 5-step installation wizard with dedicated ViewModels
  • WizardViewModel for navigation orchestration
  • SsdpTvDiscoveryService for Samsung TV network discovery
  • TvScannerWindow dialog with real-time progress
  • Multi-factor network adapter scoring algorithm
  • 40+ virtual adapter detection patterns
  • GNU GetText localization (Karambolo.PO)
  • 24 language translations with pluralization
  • LogService (thread-safe), NavigationService, DialogService
  • LogViewerWindow dialog
  • Result<T> railway-oriented error handling
  • Converters: BoolToColor, ConfidenceToColor, LogLevelToBrush, StepIndicator
  • GitHub Actions workflow (6 platforms)

Changed

  • .NET 8.0 → 10.0
  • Avalonia 11.3.6 → 11.3.10
  • CommunityToolkit.Mvvm 8.2.1 → 8.4.0
  • MainWindowViewModel simplified to container role
  • ViewModelBase enhanced with L property for localization
  • NetworkService rewritten with scoring algorithm
  • KestrelOrsayServer improved with status tracking
  • OrsayPackager now returns Result<PackageResult>

Removed

  • Monolithic MainWindowViewModel logic → page ViewModels
  • JSON localization (Resources/Languages/*.json) → GetText
  • LocalizationServiceGetTextLocalizationService
  • LocalizeConverterL[key] direct binding
  • BoolToTextConverter (unused)

Fixed

  • vEthernet no longer incorrectly recommended over Wi-Fi
  • Virtual adapters properly detected and deprioritized
  • Language changes reactively update UI lists

POTENTIAL BREAKING CHANGES

## Architecture
- Introduce dependency injection via Microsoft.Extensions.DependencyInjection
- Add service abstractions layer (Services/Abstractions/)
- Implement railway-oriented error handling with Result<T> type
- Create Core/ folder with IDialogService, INavigationService, Result

## MVVM Refactoring
- Split monolithic MainWindowViewModel into 5-step wizard flow
- Add WizardViewModel for navigation orchestration
- Create dedicated page ViewModels (Welcome, NetworkSetup, TvInstructions, ServerRunning, Completed)
- Enhance ViewModelBase with localization support (L property)

## Localization System
- Migrate from JSON to GNU GetText (.po files)
- Add Karambolo.PO library for .po file parsing
- Implement pluralization with language-specific rules (Russian: 3 forms)
- Support format strings with parameters
- Auto-discover languages from directory structure

## Network Service
- Implement multi-factor scoring algorithm for interface recommendation
- Add 90+ patterns for virtual adapter detection (Hyper-V, VMware, Docker, VPN)
- Introduce gateway detection as quality signal
- Add penalties for CGNAT (100.x) and APIPA (169.254.x) addresses
- Create NetworkListItem for UI grouping with separators

## New Services
- LogService: Thread-safe in-memory logging with levels
- NavigationService: Generic page navigation with configuration
- DialogService: Window management and log viewer singleton
- GetTextLocalizationService: Full GetText implementation

## UI Improvements
- Implement 5-step installation wizard UI
- Create page-based views (Pages/ folder)
- Add LogViewerWindow dialog for application logs
- Add converters: BoolToColor, LogLevelToBrush, StepIndicator

## Infrastructure
- Upgrade to .NET 10.0
- Update Avalonia to 11.3.10
- Update CommunityToolkit.Mvvm to 8.4.0
- Add Karambolo.PO 1.12.0
@TemaSM
Copy link
Copy Markdown
Member Author

TemaSM commented Jan 7, 2026

Added:
Network scanner for Samsung TVs for model identification.

image

@TemaSM
Copy link
Copy Markdown
Member Author

TemaSM commented Jan 8, 2026

@PatrickSt1991 Hi Patrick!
Would you be open to granting me additional permissions in the repository beyond the current 'outside collaborator' role?
I'd like to be able to set up GitHub Actions, configure Dependabot, and force-push (rebase) to my own branches (with the appropriate branch protection rules).
I'm also interested in integrating an automation bot (such as Anthropic Claude).

@PatrickSt1991
Copy link
Copy Markdown
Collaborator

PatrickSt1991 commented Jan 8, 2026

@TemaSM I'd love to but I can't this is a personal repo and not an organizational one.

GitHub only allows contributors on personal repos and these permissions are set by GitHub itself, can't edit those
https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/repository-access-and-collaboration/permission-levels-for-a-personal-account-repository#collaborator-access-for-a-repository-owned-by-a-personal-account

I'll create a free GitHub organization and move this repo in to it, there I'm able to give you more access.

@PatrickSt1991
Copy link
Copy Markdown
Collaborator

@TemaSM
image

If you need any more, let me know

@TemaSM
Copy link
Copy Markdown
Member Author

TemaSM commented Jan 8, 2026

@PatrickSt1991 Thank you!

Moved my fork of jellyfin-samsungtv into organization: Jellyfin2Samsung/Jellyfin-Orsay-App - need Maintainer role on it too.

Will continue coding in spare time.
Let me know if you want to discuss (via email) anything. I'm always open.

@PatrickSt1991
Copy link
Copy Markdown
Collaborator

@TemaSM done! Thanks for all your input and PRs.

In working on the tizen version in my spare time and studying for my motor exam so really appreciate you doing all of this!

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants