Skip to content

Commit

Permalink
fix itunes compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
madiele committed Feb 3, 2024
1 parent cac3d27 commit ad83318
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 3 deletions.
11 changes: 11 additions & 0 deletions src/rss_transcodizer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use std::time::Duration;
use eyre::eyre;
use log::debug;
use reqwest::Url;
use rss::extension::itunes::ITunesCategory;
use rss::Channel;
use rss::{Enclosure, Item};

Expand All @@ -16,6 +17,11 @@ pub fn inject_vod2pod_customizations(
) -> eyre::Result<String> {
let mut injected_feed = Channel::read_from(rss_body.as_bytes())?;
injected_feed.set_generator(Some("generated by vod2pod-rss".to_string()));
if let Some(ref mut itunes) = injected_feed.itunes_ext {
let mut default_category = ITunesCategory::default();
default_category.set_text("Technology");
itunes.set_categories(vec![default_category]);
}
let mut namespaces = BTreeMap::new();
namespaces.insert(
"rss".to_string(),
Expand All @@ -25,7 +31,12 @@ pub fn inject_vod2pod_customizations(
"itunes".to_string(),
"http://www.itunes.com/dtds/podcast-1.0.dtd".to_string(),
);
namespaces.insert(
"content".to_string(),
"http://purl.org/rss/1.0/modules/content/".to_string(),
);
injected_feed.set_namespaces(namespaces);
injected_feed.set_language("en-US".to_string());
injected_feed
.items_mut()
.iter_mut()
Expand Down
32 changes: 29 additions & 3 deletions src/server/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
use std::{collections::HashMap, net::TcpListener, time::Instant};

use actix_web::{dev::Server, guard, middleware, web, App, HttpRequest, HttpResponse, HttpServer};
use actix_web::{
dev::Server, guard, http, middleware, web, App, HttpRequest, HttpResponse, HttpServer,
};
use log::{debug, error, info, warn};
use regex::Regex;
use serde::Deserialize;
Expand All @@ -23,12 +25,21 @@ pub fn spawn_server(listener: TcpListener) -> eyre::Result<Server> {
.service(
web::scope(&root)
.service(
web::resource("transcode_media/to_mp3")
web::resource("transcode_media/to.mp3")
.name("transcode_mp3")
.guard(guard::Get())
.guard(guard::Any(guard::Get()).or(guard::Head()))
.to(transcode_to_mp3),
)
.service(
//this is an old URL used in old vod2pod versions that did not work with
//itunes kept for backwards compatiility
web::resource("transcode_media/to_mp3")
.name("transcode_mp3_obsolete")
.guard(guard::Any(guard::Get()).or(guard::Head()))
.to(transcode_to_mp3),
)
.route("transcodize_rss", web::get().to(transcodize_rss))
.route("transcodize_rss", web::head().to(transcodize_rss))
.route("health", web::get().to(health))
.route("/", web::get().to(index))
.route("", web::get().to(index)),
Expand Down Expand Up @@ -63,6 +74,10 @@ async fn transcodize_rss(
req: HttpRequest,
query: web::Query<HashMap<String, String>>,
) -> HttpResponse {
if req.method() == http::Method::HEAD {
return HttpResponse::Ok().finish();
}

let start_time = Instant::now();

let should_transcode = match conf().get(ConfName::TranscodingEnabled) {
Expand Down Expand Up @@ -258,6 +273,17 @@ async fn transcode_to_mp3(req: HttpRequest, query: web::Query<TranscodizeQuery>)
};
debug!("seconds: {duration_secs}, bitrate: {bitrate}");

if req.method() == http::Method::HEAD {
return HttpResponse::Ok()
.insert_header(("Accept-Ranges", "bytes"))
.insert_header((
"Content-Range",
format!("bytes {start_bytes}-{end_bytes}/{total_streamable_bytes}"),
))
.content_type(codec.get_mime_type_str())
.finish();
}

match Transcoder::new(&ffmpeg_paramenters).await {
Ok(transcoder) => {
let stream = transcoder.get_transcode_stream();
Expand Down

0 comments on commit ad83318

Please sign in to comment.