Initial import: clean snapshot from /home/olafn/infoscreen-dev (2025-10-25)

This commit is contained in:
RobbStarkAustria
2025-10-25 17:42:27 +02:00
commit 8ca9f69f6f
111 changed files with 8612 additions and 0 deletions

View File

@@ -0,0 +1,258 @@
# Progress Bar Implementation Summary
## Overview
The Display Manager now supports the scheduler's `page_progress` and `auto_progress` fields to control Impressive's progress bar features during presentations.
## Implementation Details
### Fields Supported
| Field | Type | Impressive Option | Description |
|-------|------|-------------------|-------------|
| `page_progress` | boolean | `--page-progress` (or `-q`) | Shows overall progress bar indicating position in presentation |
| `auto_progress` | boolean | `--auto-progress` (or `-k`) | Shows per-page countdown progress during auto-advance |
### Event Flow
1. **Scheduler sends event** with `page_progress` and `auto_progress` fields
2. **simclient.py receives** and stores complete event in `current_event.json` (no filtering)
3. **display_manager.py reads** event and extracts progress settings
4. **Impressive launches** with appropriate `--page-progress` and/or `--auto-progress` options
## Code Changes
### simclient.py
Enhanced documentation in `save_event_to_json()` to explicitly mention progress bar fields are preserved:
```python
def save_event_to_json(event_data):
"""Speichert eine Event-Nachricht in der Datei current_event.json
This function preserves ALL fields from the incoming event data,
including scheduler-specific fields like:
- page_progress: Show overall progress bar in presentation
- auto_progress: Show per-page auto-advance countdown
- And any other fields sent by the scheduler
"""
```
### display_manager.py
Added support for reading and using progress fields in `start_presentation()`:
```python
# Get scheduler-specific progress display settings
page_progress = event.get('page_progress', False) # Show overall progress bar
auto_progress = event.get('auto_progress', False) # Show per-page auto-advance progress
# Later in Impressive command building:
if page_progress:
cmd.append('--page-progress')
logging.info("Page progress bar enabled (shows overall position in presentation)")
if auto_progress:
cmd.append('--auto-progress')
logging.info("Auto-progress bar enabled (shows per-page countdown during auto-advance)")
```
## Example Events
### With Page Progress Only
```json
{
"id": 100,
"group_id": 2,
"page_progress": true,
"auto_progress": false,
"presentation": {
"auto_advance": true,
"slide_interval": 10,
"loop": true,
"files": [{"name": "slides.pdf"}]
}
}
```
**Result:** Impressive shows overall progress bar at bottom: `[=====> ] 50%`
### With Auto-Progress Only
```json
{
"id": 101,
"group_id": 2,
"page_progress": false,
"auto_progress": true,
"presentation": {
"auto_advance": true,
"slide_interval": 10,
"files": [{"name": "slides.pdf"}]
}
}
```
**Result:** Impressive shows countdown bar for each slide during auto-advance
### With Both Progress Bars
```json
{
"id": 102,
"group_id": 2,
"page_progress": true,
"auto_progress": true,
"presentation": {
"auto_advance": true,
"slide_interval": 10,
"loop": true,
"files": [{"name": "slides.pdf"}]
}
}
```
**Result:** Both progress indicators visible simultaneously
### No Progress Bars (Default)
```json
{
"id": 103,
"group_id": 2,
"presentation": {
"auto_advance": true,
"slide_interval": 10,
"files": [{"name": "slides.pdf"}]
}
}
```
**Result:** Clean presentation without progress indicators (fields default to `false`)
## Testing
### Interactive Test Script
```bash
cd ~/infoscreen-dev/scripts
./test-progress-bars.sh
```
This interactive script allows you to:
1. Select a progress bar configuration (none, page only, auto only, or both)
2. Sends test event to MQTT
3. Verifies Display Manager processes it correctly
4. Shows expected behavior
### Manual Testing with mosquitto_pub
```bash
# Test with both progress bars
mosquitto_pub -h localhost -t "infoscreen/events/2" -m '{
"id": 999,
"page_progress": true,
"auto_progress": true,
"presentation": {
"auto_advance": true,
"slide_interval": 5,
"loop": true,
"files": [{"name": "test.pdf"}]
}
}'
```
### Verification
1. **Check Display Manager Log:**
```bash
tail -f ~/infoscreen-dev/logs/display_manager.log
```
Look for:
```
Page progress bar enabled (shows overall position in presentation)
Auto-progress bar enabled (shows per-page countdown during auto-advance)
```
2. **Check Impressive Command:**
```bash
ps aux | grep impressive
```
Should show command with appropriate options:
```
impressive --fullscreen --nooverview --auto 5 --wrap --page-progress --auto-progress /path/to/file.pdf
```
3. **Visual Verification:**
- Watch the presentation on the display
- Page progress: Bar at bottom showing position
- Auto-progress: Countdown overlay on each slide
## Impressive Command Examples
```bash
# No progress bars (default)
impressive --fullscreen --auto 10 --wrap presentation.pdf
# Page progress only
impressive --fullscreen --auto 10 --wrap --page-progress presentation.pdf
impressive --fullscreen --auto 10 --wrap -q presentation.pdf # Short form
# Auto-progress only
impressive --fullscreen --auto 10 --wrap --auto-progress presentation.pdf
impressive --fullscreen --auto 10 --wrap -k presentation.pdf # Short form
# Both progress bars
impressive --fullscreen --auto 10 --wrap --page-progress --auto-progress presentation.pdf
impressive --fullscreen --auto 10 --wrap -q -k presentation.pdf # Short form
```
## Benefits
1. **User Feedback**: Viewers know where they are in the presentation
2. **Time Awareness**: Auto-progress shows how long until next slide
3. **Professional Look**: Progress indicators enhance presentation quality
4. **Flexible Control**: Scheduler can enable/disable per event
5. **Backward Compatible**: Fields default to `false`, existing events work unchanged
## Compatibility
- ✅ **Impressive**: Full support for both progress bar features
- ⚠️ **Evince/Okular**: Fallback viewers don't support progress bars (features ignored)
- ✅ **PDF Files**: Native support with no conversion needed
- ✅ **PPTX Files**: Automatic conversion to PDF, then progress bars work
## Documentation Updates
- ✅ README.md - Added progress bar field documentation
- ✅ SCHEDULER_FIELDS_SUPPORT.md - Updated with implementation details
- ✅ Code comments - Enhanced docstrings
- ✅ Test scripts - Created test-progress-bars.sh
- ✅ This summary document
## Logging
With `LOG_LEVEL=DEBUG`, you'll see:
```
[INFO] Event page_progress = true
[INFO] Event auto_progress = true
[INFO] Starting presentation: slides.pdf
[INFO] Auto-advance enabled (interval: 10s)
[INFO] Loop mode enabled (presentation will restart after last slide)
[INFO] Page progress bar enabled (shows overall position in presentation)
[INFO] Auto-progress bar enabled (shows per-page countdown during auto-advance)
[DEBUG] Full command: impressive --fullscreen --nooverview --auto 10 --wrap --page-progress --auto-progress /path/to/slides.pdf
```
## Summary
**Implementation complete** - Progress bar fields are now fully supported
**Backward compatible** - Existing events without these fields work unchanged
**Well documented** - README, code comments, and test scripts updated
**Tested** - Interactive test script available
**Flexible** - Both options can be used independently or together
**Clean code** - Minimal changes, follows existing patterns