use capi;
use std::os::raw::{c_char, c_void};
use std::ffi::CString;
use std::ptr::null;
use super::{ContextInternal, Context, ContextSuccessCb};
use ::util::unwrap_optional_callback;
pub type ContextPlaySampleCb = extern "C" fn(c: *mut ContextInternal, idx: u32, userdata: *mut c_void);
impl Context {
pub fn remove_sample(&self, name: &str, cb: (::context::ContextSuccessCb, *mut c_void)
) -> Option<::operation::Operation>
{
let c_name = CString::new(name.clone()).unwrap();
let ptr = unsafe { capi::pa_context_remove_sample(self.ptr, c_name.as_ptr(), Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn play_sample(&self, name: &str, dev: Option<&str>, volume: ::volume::Volume,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let c_name = CString::new(name.clone()).unwrap();
let c_dev = match dev {
Some(dev) => CString::new(dev.clone()).unwrap(),
None => CString::new("").unwrap(),
};
let p_dev: *const c_char = match dev {
Some(_) => c_dev.as_ptr(),
None => null::<c_char>(),
};
let ptr = unsafe { capi::pa_context_play_sample(self.ptr, c_name.as_ptr(), p_dev, volume,
cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn play_sample_with_proplist(&self, name: &str, dev: Option<&str>, volume: ::volume::Volume,
proplist: &mut ::proplist::Proplist, cb: Option<(ContextPlaySampleCb, *mut c_void)>
) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextPlaySampleCb>(cb);
let c_name = CString::new(name.clone()).unwrap();
let c_dev = match dev {
Some(dev) => CString::new(dev.clone()).unwrap(),
None => CString::new("").unwrap(),
};
let p_dev: *const c_char = match dev {
Some(_) => c_dev.as_ptr(),
None => null::<c_char>(),
};
let ptr = unsafe {
capi::pa_context_play_sample_with_proplist(self.ptr, c_name.as_ptr(), p_dev, volume,
proplist.ptr, cb_f, cb_d)
};
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
}