diff options
| author | Yuval Adam <_@yuv.al> | 2024-05-31 14:59:25 +0200 |
|---|---|---|
| committer | Yuval Adam <_@yuv.al> | 2024-05-31 14:59:25 +0200 |
| commit | 4a4c5b9174cf0182d4eb755f5d97ca432e5960ca (patch) | |
| tree | e0d49598fa09ed0ad859b9afb95ea4b88e51d04f /src/audio | |
| parent | 10976b7bdfcdb57724d9e2b1dedd2c172b0b5973 (diff) | |
Add multiple backend support
Diffstat (limited to 'src/audio')
| -rw-r--r-- | src/audio/mod.rs | 25 | ||||
| -rw-r--r-- | src/audio/mpv.rs | 13 | ||||
| -rw-r--r-- | src/audio/rodio.rs | 9 |
3 files changed, 47 insertions, 0 deletions
diff --git a/src/audio/mod.rs b/src/audio/mod.rs new file mode 100644 index 0000000..7fca1a7 --- /dev/null +++ b/src/audio/mod.rs @@ -0,0 +1,25 @@ +mod mpv; +mod rodio; + +pub trait AudioBackend { + fn play(&self, url: &str); +} + +#[allow(dead_code)] +pub enum AudioBackends { + Mpv(mpv::Mpv), + Rodio(rodio::Rodio), +} + +pub fn get_backend() -> AudioBackends { + AudioBackends::Mpv(mpv::Mpv {}) +} + +impl AudioBackend for AudioBackends { + fn play(&self, url: &str) { + match self { + AudioBackends::Mpv(m) => m.play(url), + AudioBackends::Rodio(r) => r.play(url), + } + } +} diff --git a/src/audio/mpv.rs b/src/audio/mpv.rs new file mode 100644 index 0000000..dddb6b2 --- /dev/null +++ b/src/audio/mpv.rs @@ -0,0 +1,13 @@ +use super::AudioBackend; +use std::process::Command; + +pub struct Mpv {} + +impl AudioBackend for Mpv { + fn play(&self, url: &str) { + Command::new("mpv") + .args([url]) + .output() + .expect("Failed to start mpv, make sure it is installed."); + } +} diff --git a/src/audio/rodio.rs b/src/audio/rodio.rs new file mode 100644 index 0000000..04883dd --- /dev/null +++ b/src/audio/rodio.rs @@ -0,0 +1,9 @@ +use super::AudioBackend; + +pub struct Rodio {} + +impl AudioBackend for Rodio { + fn play(&self, _url: &str) { + todo!() + } +} |
