refactor: deduplicate content_type/role string converters in MCP tools
This commit is contained in:
@@ -94,20 +94,7 @@ struct RecentSyncDto {
|
||||
items_found: u32,
|
||||
}
|
||||
|
||||
fn content_type_to_str(ct: &domain::ContentType) -> &'static str {
|
||||
match ct {
|
||||
domain::ContentType::Movie => "movie",
|
||||
domain::ContentType::Episode => "episode",
|
||||
domain::ContentType::Short => "short",
|
||||
}
|
||||
}
|
||||
|
||||
fn role_to_str(r: &domain::MediaRole) -> &'static str {
|
||||
match r {
|
||||
domain::MediaRole::Program => "program",
|
||||
domain::MediaRole::Interstitial => "interstitial",
|
||||
}
|
||||
}
|
||||
use super::{content_type_str, role_str};
|
||||
|
||||
fn item_to_dto(i: &domain::MediaItem) -> LibraryItemDto {
|
||||
LibraryItemDto {
|
||||
@@ -115,7 +102,7 @@ fn item_to_dto(i: &domain::MediaItem) -> LibraryItemDto {
|
||||
provider_id: i.provider_id().to_string(),
|
||||
external_id: i.external_id().to_string(),
|
||||
title: i.title().to_string(),
|
||||
content_type: content_type_to_str(i.content_type()).to_string(),
|
||||
content_type: content_type_str(i.content_type()).to_string(),
|
||||
duration_secs: i.duration_secs(),
|
||||
series_name: i.series_name().map(|s| s.to_string()),
|
||||
season_number: i.season_number(),
|
||||
@@ -125,7 +112,7 @@ fn item_to_dto(i: &domain::MediaItem) -> LibraryItemDto {
|
||||
tags: i.tags().to_vec(),
|
||||
collection_id: i.collection_id().map(|s| s.to_string()),
|
||||
thumbnail_url: i.thumbnail_url().map(|s| s.to_string()),
|
||||
role: role_to_str(i.role()).to_string(),
|
||||
role: role_str(i.role()).to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -241,7 +228,7 @@ pub async fn browse_library(
|
||||
.iter()
|
||||
.filter(|i| {
|
||||
if let Some(ref r) = role {
|
||||
let item_role = role_to_str(i.role());
|
||||
let item_role = role_str(i.role());
|
||||
if item_role != r.as_str() {
|
||||
return false;
|
||||
}
|
||||
@@ -270,13 +257,13 @@ pub async fn browse_library(
|
||||
BrowseItemDto {
|
||||
id: i.id().value().to_string(),
|
||||
title: i.title().to_string(),
|
||||
content_type: content_type_to_str(i.content_type()).to_string(),
|
||||
content_type: content_type_str(i.content_type()).to_string(),
|
||||
duration_mins: i.duration_secs() / 60,
|
||||
series_name: i.series_name().map(|s| s.to_string()),
|
||||
season_episode: se,
|
||||
year: i.year(),
|
||||
genres: i.genres().to_vec(),
|
||||
role: role_to_str(i.role()).to_string(),
|
||||
role: role_str(i.role()).to_string(),
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
@@ -337,10 +324,10 @@ pub async fn library_stats(
|
||||
|
||||
for item in &items {
|
||||
*by_content_type
|
||||
.entry(content_type_to_str(item.content_type()).to_string())
|
||||
.entry(content_type_str(item.content_type()).to_string())
|
||||
.or_default() += 1;
|
||||
*by_role
|
||||
.entry(role_to_str(item.role()).to_string())
|
||||
.entry(role_str(item.role()).to_string())
|
||||
.or_default() += 1;
|
||||
for genre in item.genres() {
|
||||
*genre_counts.entry(genre.clone()).or_default() += 1;
|
||||
|
||||
@@ -2,3 +2,18 @@ pub mod channels;
|
||||
pub mod ical;
|
||||
pub mod library;
|
||||
pub mod schedule;
|
||||
|
||||
pub(crate) fn content_type_str(ct: &domain::ContentType) -> &'static str {
|
||||
match ct {
|
||||
domain::ContentType::Movie => "movie",
|
||||
domain::ContentType::Episode => "episode",
|
||||
domain::ContentType::Short => "short",
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn role_str(r: &domain::MediaRole) -> &'static str {
|
||||
match r {
|
||||
domain::MediaRole::Program => "program",
|
||||
domain::MediaRole::Interstitial => "interstitial",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,12 +132,7 @@ pub async fn analyze_schedule(
|
||||
let entry = title_counts
|
||||
.entry(title_key)
|
||||
.or_insert_with(|| {
|
||||
let ct = match slot.item().content_type() {
|
||||
domain::ContentType::Movie => "movie",
|
||||
domain::ContentType::Episode => "episode",
|
||||
domain::ContentType::Short => "short",
|
||||
};
|
||||
(ct.to_string(), 0)
|
||||
(super::content_type_str(slot.item().content_type()).to_string(), 0)
|
||||
});
|
||||
entry.1 += 1;
|
||||
|
||||
@@ -261,12 +256,7 @@ pub async fn preview_schedule(
|
||||
start_at: s.start_at().to_rfc3339(),
|
||||
end_at: s.end_at().to_rfc3339(),
|
||||
title: s.item().title().to_string(),
|
||||
content_type: match s.item().content_type() {
|
||||
domain::ContentType::Movie => "movie",
|
||||
domain::ContentType::Episode => "episode",
|
||||
domain::ContentType::Short => "short",
|
||||
}
|
||||
.to_string(),
|
||||
content_type: super::content_type_str(s.item().content_type()).to_string(),
|
||||
duration_mins: (s.end_at() - s.start_at()).num_seconds() as f64 / 60.0,
|
||||
block_id: s.source_block_id().to_string(),
|
||||
})
|
||||
@@ -318,12 +308,7 @@ pub async fn preview_config(
|
||||
start_at: s.start_at().to_rfc3339(),
|
||||
end_at: s.end_at().to_rfc3339(),
|
||||
title: s.item().title().to_string(),
|
||||
content_type: match s.item().content_type() {
|
||||
domain::ContentType::Movie => "movie",
|
||||
domain::ContentType::Episode => "episode",
|
||||
domain::ContentType::Short => "short",
|
||||
}
|
||||
.to_string(),
|
||||
content_type: super::content_type_str(s.item().content_type()).to_string(),
|
||||
duration_mins: (s.end_at() - s.start_at()).num_seconds() as f64 / 60.0,
|
||||
block_id: s.source_block_id().to_string(),
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user