Files
IPTVplayer/TV Player WPF/WPF-BUILD.md
T
Vladimir 1e8e444376 feat: Implement Playlists and Programs Management
- Added PlaylistsGroupViewModel to manage playlists and selection.
- Introduced ProgramsGroupViewModel for handling program groups and subscriptions.
- Created ProgramsListViewModel to manage individual program listings.
- Developed SettingsViewModel for user settings including playlist management.
- Implemented TVPlayerViewModel as the main view model coordinating screens and data.
- Added PlayerView for video playback with LibVLC integration.
- Created XAML views for PlaylistsGroup, ProgramsGroup, ProgramsList, and Settings.
- Added sample M3U playlist for testing.
- Documented WPF build instructions and project structure in WPF-BUILD.md.
- Configured global.json for .NET SDK versioning.
2026-03-22 12:11:24 +02:00

247 lines
5.7 KiB
Markdown

# WPF Build Instructions
## Overview
This is a Windows TV Player application built with .NET WPF (Windows Presentation Foundation) targeting net8.0-windows.
## Prerequisites
### System Requirements
- Windows 10 Build 19041 or later (or Windows 11)
- Visual Studio 2022 17.0 or later with:
- .NET desktop development workload
- Windows Forms development tools
- XAML tools
### Development Setup
- .NET 8 SDK or later
- Visual Studio 2022 or JetBrains Rider
## Installation
### Clone and Open Project
```bash
cd "TV Player WPF"
```
### Restore Dependencies
```bash
dotnet restore
```
## Building
### Build for Release
```bash
dotnet build --configuration Release --framework net8.0-windows10.0.19041.0
```
### Build for Debug
```bash
dotnet build --configuration Debug --framework net8.0-windows10.0.19041.0
```
### Build for Distribution
```bash
dotnet publish --configuration Release --framework net8.0-windows10.0.19041.0 -p:PublishProfile=FolderProfile
```
## Running
### Run from Visual Studio
1. Open `TV Player WPF.csproj` in Visual Studio
2. Press F5 to start with debugging
3. Press Ctrl+F5 to start without debugging
### Run from Command Line
```bash
dotnet run --configuration Debug --framework net8.0-windows10.0.19041.0
```
### Run Published Application
```bash
# After publishing
./bin/Release/net8.0-windows10.0.19041.0/publish/TV Player WPF.exe
```
## Project Structure
```
TV Player WPF/
├── ViewModels/ # MVVM ViewModels with INotifyPropertyChanged
│ ├── MainViewModel.cs # Main window logic
│ ├── PlayerViewModel.cs
│ ├── SettingsViewModel.cs
│ └── ...
├── PlaylistWorker/ # M3U and EPG parsing
│ ├── M3UParser.cs
│ └── M3UInfo.cs
├── MainWindow.xaml # Main UI
├── VideoPlayer.xaml # Video player UI
├── Assets/ # Application resources
│ ├── AppStyle.xaml
│ └── Images/
└── TV Player WPF.csproj # Project file
```
## Configuration
### Playlist Settings
The application loads playlists from configured URLs:
- **Default M3U URL**: Configured in TVPlayerViewModel
- **EPG URL**: Extracted from M3U file or set in settings
To change the playlist:
1. Go to Settings in the application
2. Enter the M3U playlist URL
3. Save settings
Settings are persisted in AppData.
### Application Settings
User preferences are stored in:
```
%localappdata%\TV_Player\settings.json
```
## Key Features
### MVVM Architecture
- Proper separation of concerns with ViewModels
- Data binding through INotifyPropertyChanged
- Commands for user interactions
### Error Handling
- Comprehensive exception handling with logging
- User-friendly error messages
- Debug output for troubleshooting
### Resource Management
- Proper disposal of resources
- No memory leaks from subscriptions
- Clean shutdown sequence
### Performance
- Asynchronous network operations
- Lazy-loaded playlist data
- Caching of EPG information
## Keyboard Shortcuts
- **Escape**: Exit application
- **Backspace**: Go back/navigate
- **F11**: Toggle fullscreen
- **Arrow Keys**: Navigate UI
## Registry Settings
The application may create registry entries in:
```
HKEY_CURRENT_USER\Software\TV_Player
```
These include:
- Last played channel
- Window state and position
- User preferences
## Troubleshooting
### Application Won't Start
1. Check .NET 8 is installed: `dotnet --version`
2. Verify Windows version: `winver` (must be 19041+)
3. Check event viewer for errors: `eventvwr.msc`
### Playlist Download Fails
1. Check network connectivity
2. Verify URL is correct
3. Check firewall settings allow outbound HTTP/HTTPS
4. Check Debug output for detailed error
### Video Won't Play
1. Verify stream URL is valid
2. Check network connection to stream server
3. Verify media format is supported
4. Check sufficient bandwidth available
### Performance Issues
1. Check Task Manager for CPU/memory usage
2. Disable hardware acceleration in settings if available
3. Clear EPG cache and reload
4. Close unnecessary background applications
## Development
### Debug Logging
When running in Debug configuration, detailed logs are sent to Output window in Visual Studio.
Enable more detailed logging:
1. Open Debug > Windows > Output
2. Select "Debug" from dropdown
### Code Organization
- **ViewModels**: Business logic and state management
- **Views**: XAML UI definitions
- **PlaylistWorker**: Network and parsing operations
- **Assets**: Application resources and styling
### Common Tasks
#### Add New ViewModel
```csharp
public class MyViewModel : ObservableViewModelBase
{
private string _property;
public string Property
{
get => _property;
set => SetProperty(ref _property, value);
}
}
```
#### Handle Exceptions
```csharp
try
{
await FetchPlaylistAsync();
}
catch (HttpRequestException ex)
{
Debug.WriteLine($"Network error: {ex.Message}");
// Show user-friendly error
}
```
## Publishing
### Create Installer
Use Visual Studio Setup Project or:
```bash
dotnet publish --configuration Release \
--framework net8.0-windows10.0.19041.0 \
--output ./publish
```
Then package with your installer tool (NSIS, WiX, etc.)
### Self-Contained Deployment
```bash
dotnet publish --configuration Release \
--framework net8.0-windows10.0.19041.0 \
--self-contained \
--output ./publish-standalone
```
This creates an executable that doesn't require .NET runtime installed.
## Performance Optimization
- Use **Release** build for distribution
- Enable **ReadyToRun**: `-p:PublishReadyToRun=true`
- Enable **PublishTrimmed**: `-p:PublishTrimmed=true` (advanced)
- Use **PublishAot** for maximum performance (requires additional testing)
## Version History
See CHANGELOG.md for detailed version information.