
Features implemented: - Clean trait-based plugin architecture (no global registries) - SQLite database with centralized SQL operations - Songs plugin: CCLI support, lyrics search and display - Bible plugin: Multi-translation verse lookup and rendering - Media plugin: Auto-detection for images/video/audio files - Presentations plugin: LibreOffice integration with HTML/XHTML combo parsing - Service management: Add items, navigation, current slide tracking - Comprehensive integration tests with real database operations Architecture follows KISS/DRY principles: - All SQL operations centralized in core/database.rs - Plugins focus on business logic only - No complex state management or global registries - Clean separation of concerns throughout Ready for church presentation use with PowerPoint theme preservation.
4.1 KiB
4.1 KiB
LuminaLP
A modern, reliable church presentation software built in Rust that just works.
Overview
LuminaLP is designed to be a superior replacement for OpenLP, focusing on:
- Reliability: No complex global registries or fragile state management
- Performance: Fast, efficient Rust backend with minimal overhead
- Simplicity: Clean KISS/DRY architecture that's easy to debug and maintain
- Church-focused: Built specifically for church service needs
Features
- Songs Management: Add, search, and display song lyrics with CCLI support
- Bible Integration: Verse lookup and display with multiple translations
- Media Support: Images, videos, and audio with automatic type detection
- Presentations: PowerPoint/LibreOffice integration with theme preservation
- Service Planning: Build and navigate through service items
- Plugin Architecture: Clean trait-based system without global state
Architecture
Core Components
- lumina-core: Database, app state, and plugin traits
- lumina-songs: Song lyrics and CCLI management
- lumina-bible: Bible verse search and display
- lumina-media: Image/video/audio handling
- lumina-presentations: PowerPoint/ODP rendering via LibreOffice
Database
- SQLite backend with centralized SQL operations
- All schemas defined in
core/src/database.rs
- Plugins use database helpers, no raw SQL in plugins
Requirements
- Rust: 1.70+ with Cargo
- LibreOffice: For presentation rendering (headless mode)
- SQLite: Embedded database (no external setup required)
Installation
# Clone the repository
git clone ssh://rockvilleav@git.rockvilletollandsda.church:10443/RTSDA/LuminaLP.git
cd LuminaLP
# Build the project
cargo build --release
# Run tests
cargo test
Development
Project Structure
├── core/ # Core app logic and traits
│ ├── src/
│ │ ├── lib.rs # App struct and plugin traits
│ │ └── database.rs # All SQL operations live here
├── plugins/
│ ├── songs/ # Song lyrics plugin
│ ├── bible/ # Bible verses plugin
│ ├── media/ # Media files plugin
│ └── presentations/ # PowerPoint/ODP plugin
├── tests/
│ └── integration_tests.rs # Real integration tests
└── src/
└── main.rs # CLI entry point
Design Principles
-
KISS (Keep It Simple, Stupid)
- No complex global registries
- Simple trait-based plugin system
- Centralized database operations
-
DRY (Don't Repeat Yourself)
- Shared database helpers
- Common plugin patterns
- Reusable components
-
Separation of Concerns
- All SQL in
database.rs
- Plugins focus on business logic
- Clear boundaries between components
- All SQL in
Adding New Plugins
- Create plugin crate in
plugins/
directory - Implement the
ContentPlugin
trait - Use database helpers for data operations
- Add integration tests
- Register plugin in main app
Testing
# Run all tests
cargo test
# Run specific plugin tests
cargo test --package lumina-songs
# Run integration tests only
cargo test --test integration_tests
Presentation Integration
LuminaLP uses a sophisticated combo approach for PowerPoint rendering:
- HTML Export: LibreOffice exports slide text content and structure
- XHTML Export: LibreOffice exports complete CSS styling and themes
- Smart Combining: Parser merges text content with beautiful styling
This preserves the exact look and feel of original presentations including:
- Colors, fonts, and spacing
- Theme elements and backgrounds
- Animation CSS (where supported)
- Layout positioning
LibreOffice Setup
Ensure LibreOffice is installed and accessible via command line:
# Test LibreOffice headless mode
libreoffice --headless --version
License
MIT License
Contributing
- Follow Rust best practices and
cargo fmt
- Add tests for new functionality
- Keep SQL operations in
database.rs
- Maintain KISS/DRY principles
- No global state or complex registries