feat(mcp): implement media channel management and scheduling features
This commit is contained in:
43
k-tv-backend/mcp/src/tools/library.rs
Normal file
43
k-tv-backend/mcp/src/tools/library.rs
Normal file
@@ -0,0 +1,43 @@
|
||||
use domain::{ContentType, IMediaProvider, MediaFilter};
|
||||
use std::sync::Arc;
|
||||
|
||||
use crate::error::{domain_err, ok_json};
|
||||
|
||||
pub async fn list_collections(provider: &Arc<dyn IMediaProvider>) -> String {
|
||||
match provider.list_collections().await {
|
||||
Ok(cols) => ok_json(&cols),
|
||||
Err(e) => domain_err(e),
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn list_genres(
|
||||
provider: &Arc<dyn IMediaProvider>,
|
||||
content_type: Option<ContentType>,
|
||||
) -> String {
|
||||
match provider.list_genres(content_type.as_ref()).await {
|
||||
Ok(genres) => ok_json(&genres),
|
||||
Err(e) => domain_err(e),
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn search_media(
|
||||
provider: &Arc<dyn IMediaProvider>,
|
||||
content_type: Option<ContentType>,
|
||||
genres: Vec<String>,
|
||||
search_term: Option<String>,
|
||||
series_names: Vec<String>,
|
||||
collections: Vec<String>,
|
||||
) -> String {
|
||||
let filter = MediaFilter {
|
||||
content_type,
|
||||
genres,
|
||||
search_term,
|
||||
series_names,
|
||||
collections,
|
||||
..Default::default()
|
||||
};
|
||||
match provider.fetch_items(&filter).await {
|
||||
Ok(items) => ok_json(&items),
|
||||
Err(e) => domain_err(e),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user