Initial import: clean snapshot from /home/olafn/infoscreen-dev (2025-10-25)
This commit is contained in:
258
PROGRESS_BAR_IMPLEMENTATION.md
Normal file
258
PROGRESS_BAR_IMPLEMENTATION.md
Normal 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
|
||||
Reference in New Issue
Block a user