hlssink3: Use Path API for getting file name

Current implementation does not support Windows path separator.
Use Path API instead.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1306>
This commit is contained in:
Seungha Yang 2023-08-30 23:39:24 +09:00
parent 7f16ac3915
commit c4d371d163

View file

@ -374,13 +374,18 @@ impl HlsSink3 {
fn segment_filename(&self, state: &mut StartedState) -> String { fn segment_filename(&self, state: &mut StartedState) -> String {
assert!(state.current_segment_location.is_some()); assert!(state.current_segment_location.is_some());
let segment_filename = path_basename(state.current_segment_location.take().unwrap()); let name = state.current_segment_location.take().unwrap();
let segment_filename = path::Path::new(&name)
.file_name()
.unwrap()
.to_str()
.unwrap();
let settings = self.settings.lock().unwrap(); let settings = self.settings.lock().unwrap();
if let Some(playlist_root) = &settings.playlist_root { if let Some(playlist_root) = &settings.playlist_root {
format!("{playlist_root}/{segment_filename}") format!("{playlist_root}/{segment_filename}")
} else { } else {
segment_filename segment_filename.to_string()
} }
} }
@ -1006,26 +1011,3 @@ impl ElementImpl for HlsSink3 {
} }
} }
} }
/// The content of the last item of a path separated by `/` character.
fn path_basename(name: impl AsRef<str>) -> String {
name.as_ref().split('/').last().unwrap().to_string()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn can_extract_basenames() {
for (input, output) in [
("", ""),
("value", "value"),
("/my/nice/path.ts", "path.ts"),
("file.ts", "file.ts"),
("https://localhost/output/file.vtt", "file.vtt"),
] {
assert_eq!(path_basename(input), output);
}
}
}