
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.
145 lines
4.1 KiB
Markdown
145 lines
4.1 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
1. **KISS (Keep It Simple, Stupid)**
|
|
- No complex global registries
|
|
- Simple trait-based plugin system
|
|
- Centralized database operations
|
|
|
|
2. **DRY (Don't Repeat Yourself)**
|
|
- Shared database helpers
|
|
- Common plugin patterns
|
|
- Reusable components
|
|
|
|
3. **Separation of Concerns**
|
|
- All SQL in `database.rs`
|
|
- Plugins focus on business logic
|
|
- Clear boundaries between components
|
|
|
|
### Adding New Plugins
|
|
|
|
1. Create plugin crate in `plugins/` directory
|
|
2. Implement the `ContentPlugin` trait
|
|
3. Use database helpers for data operations
|
|
4. Add integration tests
|
|
5. Register plugin in main app
|
|
|
|
### Testing
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
1. **HTML Export**: LibreOffice exports slide text content and structure
|
|
2. **XHTML Export**: LibreOffice exports complete CSS styling and themes
|
|
3. **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:
|
|
```bash
|
|
# Test LibreOffice headless mode
|
|
libreoffice --headless --version
|
|
```
|
|
|
|
## License
|
|
|
|
MIT License
|
|
|
|
## Contributing
|
|
|
|
1. Follow Rust best practices and `cargo fmt`
|
|
2. Add tests for new functionality
|
|
3. Keep SQL operations in `database.rs`
|
|
4. Maintain KISS/DRY principles
|
|
5. No global state or complex registries |