| Crates.io | moosicbox_session |
| lib.rs | moosicbox_session |
| version | 0.1.4 |
| created_at | 2024-10-04 17:21:57.036019+00 |
| updated_at | 2025-07-21 19:30:46.354407+00 |
| description | MoosicBox Session Handling package |
| homepage | |
| repository | https://github.com/MoosicBox/MoosicBox |
| max_upload_size | |
| id | 1396829 |
| size | 123,532 |
Session management library for the MoosicBox ecosystem, providing basic user session handling, playback state management, and connection tracking for audio devices and players.
Add this to your Cargo.toml:
[dependencies]
moosicbox_session = "0.1.1"
# Enable API endpoints
moosicbox_session = { version = "0.1.1", features = ["api"] }
# Enable event system
moosicbox_session = { version = "0.1.1", features = ["events"] }
use moosicbox_session::{create_session, get_session, update_session, delete_session};
use moosicbox_session::models::{CreateSession, UpdateSession, PlaybackTarget};
use switchy_database::profiles::LibraryDatabase;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let db: LibraryDatabase = /* your database connection */;
// Create a new session
let create_session = CreateSession {
session_playlist_id: Some(12345),
play: Some(true),
name: Some("My Music Session".to_string()),
};
let session = create_session(&db, &create_session).await?;
println!("Created session: {}", session.id);
// Update session
let update_session = UpdateSession {
session_id: session.id,
play: Some(false),
stop: Some(true),
name: Some("Paused Session".to_string()),
active: Some(false),
playing: Some(false),
position: Some(30.5), // 30.5 seconds
seek: None,
volume: Some(0.8), // 80% volume
playlist_id: None,
quality: None,
playback_target: Some(PlaybackTarget::AudioZone),
};
update_session(&db, &update_session).await?;
// Get session
let session = get_session(&db, session.id).await?;
println!("Session state: {:?}", session);
Ok(())
}
use moosicbox_session::{register_connection, get_connections, create_player};
use moosicbox_session::models::{RegisterConnection, RegisterPlayer};
use switchy_database::config::ConfigDatabase;
async fn setup_connections(db: &ConfigDatabase) -> Result<(), Box<dyn std::error::Error>> {
// Register a new connection
let connection = RegisterConnection {
connection_id: "device-123".to_string(),
name: "Living Room Speaker".to_string(),
players: vec![
RegisterPlayer {
name: "Main Speaker".to_string(),
audio_output_id: "speaker-1".to_string(),
}
],
};
let registered = register_connection(db, &connection).await?;
println!("Registered connection: {}", registered.id);
// Get all connections
let connections = get_connections(db).await?;
for conn in connections {
println!("Connection: {} with {} players", conn.name, conn.players.len());
}
Ok(())
}
use moosicbox_session::{get_session_playlist, get_session_playlist_tracks};
async fn manage_playlist(db: &LibraryDatabase, session_id: u64) -> Result<(), Box<dyn std::error::Error>> {
// Get session playlist
if let Some(playlist) = get_session_playlist(db, session_id).await? {
println!("Session playlist: {}", playlist.id);
// Get tracks in the playlist
let tracks = get_session_playlist_tracks(db, playlist.id).await?;
println!("Playlist has {} tracks", tracks.len());
for track in tracks {
println!("Track: {} - {}", track.title, track.artist.unwrap_or_default());
}
}
Ok(())
}
use moosicbox_session::{get_session_audio_zone, set_session_audio_zone};
use moosicbox_session::models::SetSessionAudioZone;
async fn manage_audio_zone(db: &LibraryDatabase, session_id: u64) -> Result<(), Box<dyn std::error::Error>> {
// Get current audio zone
if let Some(audio_zone) = get_session_audio_zone(db, session_id).await? {
println!("Session audio zone: {}", audio_zone.id);
}
// Set new audio zone
let set_zone = SetSessionAudioZone {
session_id,
audio_zone_id: Some(456),
};
set_session_audio_zone(db, &set_zone).await?;
println!("Updated session audio zone");
Ok(())
}
use moosicbox_session::{get_sessions, get_session_playing};
async fn query_sessions(db: &LibraryDatabase) -> Result<(), Box<dyn std::error::Error>> {
// Get all sessions
let sessions = get_sessions(db).await?;
println!("Found {} sessions", sessions.len());
for session in sessions {
// Check if session is playing
if let Some(playing) = get_session_playing(db, session.id).await? {
println!("Session {}: {}", session.id, if playing { "Playing" } else { "Paused" });
}
}
Ok(())
}
Represents a user session with playback state, playlist, and audio zone information.
Represents a device connection with associated players.
Represents an audio output device or player within a connection.
Links sessions to playlists for playback management.
The library uses DatabaseFetchError for database operations and CreatePlayersError for player creation failures.
moosicbox_session_models: Session data models and typesmoosicbox_audio_zone: Audio zone integrationmoosicbox_music_models: Music API track modelsswitchy_database: Database abstraction layerThis library provides the foundation for managing user sessions and playback state in the MoosicBox ecosystem.