diff --git a/backend/src/model/xtream.rs b/backend/src/model/xtream.rs index 6e0cd4be2..61191fa06 100644 --- a/backend/src/model/xtream.rs +++ b/backend/src/model/xtream.rs @@ -423,6 +423,14 @@ impl XtreamSeriesInfoEpisode { add_i64_property_if_exists!(result, self.episode_num, "episode"); let series_tmdb_id = info.and_then(|i| i.tmdb_id.or(i.tmdb)); add_opt_i64_property_if_exists!(result, self.info.as_ref().and_then(|info| info.tmdb_id.or(info.tmdb.or(series_tmdb_id))), "tmdb_id"); + + // Add the "info" section to the playlist item additional properties. + if let Some(episode_info) = &self.info { + if let Ok(info_value) = serde_json::to_value(episode_info) { + result.insert("info".to_string(), info_value); + } + } + if result.is_empty() { None } else { Some(Value::Object(result)) } } } diff --git a/backend/src/processing/processor/xtream_vod.rs b/backend/src/processing/processor/xtream_vod.rs index c7010fc47..df779515b 100644 --- a/backend/src/processing/processor/xtream_vod.rs +++ b/backend/src/processing/processor/xtream_vod.rs @@ -149,7 +149,14 @@ pub async fn playlist_resolve_vod(app_config: &AppConfig, client: Arc>(&content).ok().and_then(|info_doc| info_doc.get("info").cloned()); + // Add the "info" section to the playlist item additional properties. + pli.header.additional_properties = from_str::>(&content).ok().and_then(|info_doc| { + info_doc.get("info").cloned().map(|info_content| { + let mut wrapped_info = Map::new(); + wrapped_info.insert("info".to_string(), info_content); + Value::Object(wrapped_info) + }) + }); } } } diff --git a/backend/src/repository/strm_repository.rs b/backend/src/repository/strm_repository.rs index 34ef99427..a723f4912 100644 --- a/backend/src/repository/strm_repository.rs +++ b/backend/src/repository/strm_repository.rs @@ -745,13 +745,14 @@ async fn prepare_strm_files( ).await; // Conditionally generate the quality string based on the new config flag + let separator = if strm_target_output.underscore_whitespace { "_" } else { " " }; let quality_string = if strm_target_output.add_quality_to_filename { pli.header.additional_properties .as_ref() .and_then(|props| props.get("info")) .and_then(MediaQuality::from_ffprobe_info) .map_or_else(String::new, |quality| { - let formatted = quality.format_for_filename("|"); + let formatted = quality.format_for_filename(separator); if formatted.is_empty() { String::new() } else {