feat(cast): add multi-protocol support for Chromecast, DLNA, and AirPlay
- Update CastPicker to show protocol tabs with device counts - Register DLNA and AirPlay state and commands in lib.rs - Add Deserialize derive to DlnaMetadata and AirPlayMetadata - Fix capabilities file (remove unavailable fs permissions) - Remove unused IpAddr import in media_server.rs
This commit is contained in:
1 parent
762df3e122
commit
fbfa067b94
7 files changed
+199
-39
No files matched your search
@@ -14,7 +14,7 @@ tauri-build = { version = "2", features = [] }
|
||||
|
||||
[dependencies]
|
||||
# Tauri
|
||||
tauri = { version = "2", features = [] }
|
||||
tauri = { version = "2", features = ["protocol-asset"] }
|
||||
tauri-plugin-opener = "2"
|
||||
|
||||
# Serialization
|
||||
|
||||
@@ -8,16 +8,6 @@
|
||||
"opener:default",
|
||||
"dialog:default",
|
||||
"clipboard-manager:default",
|
||||
"clipboard-manager:allow-write-text",
|
||||
"fs:default",
|
||||
{
|
||||
"identifier": "fs:allow-read",
|
||||
"allow": [
|
||||
{ "path": "$HOME/**" },
|
||||
{ "path": "$CACHE/**" },
|
||||
{ "path": "$CONFIG/**" },
|
||||
{ "path": "/**" }
|
||||
]
|
||||
}
|
||||
"clipboard-manager:allow-write-text"
|
||||
]
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
//! AirPlay device connection and streaming (placeholder)
|
||||
|
||||
use serde::Serialize;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::cast::airplay::{AirPlayError, DiscoveredAirPlayDevice};
|
||||
|
||||
/// Metadata for AirPlay playback
|
||||
#[derive(Debug, Clone, Serialize)]
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct AirPlayMetadata {
|
||||
pub title: String,
|
||||
pub artist: String,
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
//! DLNA device connection and playback (placeholder)
|
||||
|
||||
use serde::Serialize;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::cast::dlna::{DiscoveredDlnaDevice, DlnaError};
|
||||
|
||||
/// Metadata for DLNA playback
|
||||
#[derive(Debug, Clone, Serialize)]
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct DlnaMetadata {
|
||||
pub title: String,
|
||||
pub artist: String,
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
use std::collections::HashMap;
|
||||
use std::fs::File;
|
||||
use std::io::{Read, Seek, SeekFrom};
|
||||
use std::net::{IpAddr, SocketAddr, UdpSocket};
|
||||
use std::net::{SocketAddr, UdpSocket};
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::sync::atomic::{AtomicBool, Ordering};
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
||||
+32
-2
@@ -96,9 +96,13 @@ pub fn run() {
|
||||
let library_state = library::init_library_state()
|
||||
.expect("Failed to initialize library database");
|
||||
|
||||
// Initialize casting state
|
||||
// Initialize casting state (Chromecast, DLNA, AirPlay)
|
||||
let cast_state = cast::CastState::new()
|
||||
.expect("Failed to initialize casting state");
|
||||
.expect("Failed to initialize Chromecast state");
|
||||
let dlna_state = cast::dlna::commands::DlnaState::new()
|
||||
.expect("Failed to initialize DLNA state");
|
||||
let airplay_state = cast::airplay::commands::AirPlayState::new()
|
||||
.expect("Failed to initialize AirPlay state");
|
||||
|
||||
// Initialize download cache state
|
||||
let download_cache_state = download_cache::DownloadCacheState::new()
|
||||
@@ -111,6 +115,8 @@ pub fn run() {
|
||||
.manage(AppState::new())
|
||||
.manage(library_state)
|
||||
.manage(cast_state)
|
||||
.manage(dlna_state)
|
||||
.manage(airplay_state)
|
||||
.manage(download_cache_state)
|
||||
.invoke_handler(tauri::generate_handler![
|
||||
// Auth commands
|
||||
@@ -236,6 +242,30 @@ pub fn run() {
|
||||
cast::commands::cast_stop,
|
||||
cast::commands::cast_seek,
|
||||
cast::commands::cast_set_volume,
|
||||
// DLNA casting commands
|
||||
cast::dlna::commands::dlna_start_discovery,
|
||||
cast::dlna::commands::dlna_stop_discovery,
|
||||
cast::dlna::commands::dlna_get_devices,
|
||||
cast::dlna::commands::dlna_connect,
|
||||
cast::dlna::commands::dlna_disconnect,
|
||||
cast::dlna::commands::dlna_get_status,
|
||||
cast::dlna::commands::dlna_load_media,
|
||||
cast::dlna::commands::dlna_play,
|
||||
cast::dlna::commands::dlna_pause,
|
||||
cast::dlna::commands::dlna_stop,
|
||||
cast::dlna::commands::dlna_set_volume,
|
||||
// AirPlay casting commands
|
||||
cast::airplay::commands::airplay_start_discovery,
|
||||
cast::airplay::commands::airplay_stop_discovery,
|
||||
cast::airplay::commands::airplay_get_devices,
|
||||
cast::airplay::commands::airplay_connect,
|
||||
cast::airplay::commands::airplay_disconnect,
|
||||
cast::airplay::commands::airplay_get_status,
|
||||
cast::airplay::commands::airplay_load_media,
|
||||
cast::airplay::commands::airplay_play,
|
||||
cast::airplay::commands::airplay_pause,
|
||||
cast::airplay::commands::airplay_stop,
|
||||
cast::airplay::commands::airplay_set_volume,
|
||||
// Download cache commands
|
||||
download_cache::commands::download_track,
|
||||
download_cache::commands::is_track_downloaded,
|
||||
|
||||
Reference in new issue
Block a user