Driver, Tracks: Cleanup of leaky types (#20)
Main goal: a lot of nested future/result folding. This mainly modifies error handling for Tracks and TrackHandles to be more consistent, and hides the underlying channel result passing in get_info. Errors returned should be far clearer, and are domain specific rather than falling back to a very opaque use of the underlying channel error. It should be clearer to users why their handle commands failed, or why they can't make a ytdl track loop or similar. Also fixed/cleaned up Songbird::join(_gateway) to return in a single await, sparing the user from the underlying channel details and repeated Errs. I was trying for some time to extend the same graces to `Call`, but could not figure out a sane way to get a 'static version of the first future in the chain (i.e., the gateway send) so that the whole thing could happen after dropping the lock around the Call. I really wanted to fix this to happen as a single folded await too, but I think this might need some crazy hack or redesign.
This commit is contained in:
@@ -22,7 +22,13 @@ const YOUTUBE_DL_COMMAND: &str = if cfg!(feature = "youtube-dlc") {
|
||||
|
||||
/// Creates a streamed audio source with `youtube-dl` and `ffmpeg`.
|
||||
///
|
||||
/// Uses `youtube-dlc` if the `youtube-dlc` feature is enabled.
|
||||
/// This source is not seek-compatible.
|
||||
/// If you need looping or track seeking, then consider using
|
||||
/// [`Restartable::ytdl`].
|
||||
///
|
||||
/// Uses `youtube-dlc` if the `"youtube-dlc"` feature is enabled.
|
||||
///
|
||||
/// [`Restartable::ytdl`]: crate::input::restartable::Restartable::ytdl
|
||||
pub async fn ytdl(uri: &str) -> Result<Input> {
|
||||
_ytdl(uri, &[]).await
|
||||
}
|
||||
@@ -110,6 +116,14 @@ pub(crate) async fn _ytdl(uri: &str, pre_args: &[&str]) -> Result<Input> {
|
||||
|
||||
/// Creates a streamed audio source from YouTube search results with `youtube-dl(c)`,`ffmpeg`, and `ytsearch`.
|
||||
/// Takes the first video listed from the YouTube search.
|
||||
///
|
||||
/// This source is not seek-compatible.
|
||||
/// If you need looping or track seeking, then consider using
|
||||
/// [`Restartable::ytdl_search`].
|
||||
///
|
||||
/// Uses `youtube-dlc` if the `"youtube-dlc"` feature is enabled.
|
||||
///
|
||||
/// [`Restartable::ytdl_search`]: crate::input::restartable::Restartable::ytdl_search
|
||||
pub async fn ytdl_search(name: &str) -> Result<Input> {
|
||||
ytdl(&format!("ytsearch1:{}", name)).await
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user