From ebb66e21ccd7429fc6a5ee36a9e69b446c494ac9 Mon Sep 17 00:00:00 2001 From: Johannes Heuel Date: Wed, 5 Mar 2025 03:51:02 +0100 Subject: [PATCH] use Track::new_with_data --- src/commands/loop_queue.rs | 10 ++++------ src/commands/play.rs | 20 +++++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/commands/loop_queue.rs b/src/commands/loop_queue.rs index c1ed8b6..b23c88d 100644 --- a/src/commands/loop_queue.rs +++ b/src/commands/loop_queue.rs @@ -1,6 +1,7 @@ use crate::metadata::Metadata; use crate::state::{State, StateRef}; use async_trait::async_trait; +use songbird::tracks::Track; use songbird::{Event, EventContext, EventHandler, TrackEvent}; use std::ops::Sub; use std::time::Duration; @@ -101,8 +102,9 @@ impl EventHandler for TrackEndNotifier { // get metadata from finished track let old_metadata = track_handle.data::(); // enqueue track - let handle = call.enqueue_with_preload( - old_metadata.src.clone().into(), + let track = Track::new_with_data(old_metadata.src.clone().into(), old_metadata.clone()); + let _handle = call.enqueue_with_preload( + track, old_metadata.duration.map(|duration| -> Duration { if duration.as_secs() > 5 { duration.sub(Duration::from_secs(5)) @@ -111,10 +113,6 @@ impl EventHandler for TrackEndNotifier { } }), ); - - // insert metadata into new track - let mut _new_metadata = handle.data::(); - _new_metadata = old_metadata.clone(); } None } diff --git a/src/commands/play.rs b/src/commands/play.rs index 9e10528..363d17c 100644 --- a/src/commands/play.rs +++ b/src/commands/play.rs @@ -368,12 +368,21 @@ pub(crate) async fn play_inner( .context("Could not find url")?; let mut src = YoutubeDl::new(state.client.clone(), url.clone()); - let track: Track = src.clone().into(); match src.aux_metadata().await { Ok(metadata) => { debug!("metadata: {:?}", metadata); + let track: Track = Track::new_with_data( + src.clone().into(), + Arc::new(Metadata { + title: metadata.title.clone(), + duration: metadata.duration, + url: url.clone(), + src, + }), + ); + persistence(interaction, yttrack, Arc::clone(&state)) .await .unwrap_or_else(|e| { @@ -391,7 +400,7 @@ pub(crate) async fn play_inner( match state.songbird.get(guild_id) { Some(call_lock) => { let mut call = call_lock.lock().await; - let handle = call.enqueue_with_preload( + let _handle = call.enqueue_with_preload( track, metadata.duration.map(|duration| -> Duration { if duration.as_secs() > 5 { @@ -401,13 +410,6 @@ pub(crate) async fn play_inner( } }), ); - let mut _x = handle.data::(); - _x = Arc::new(Metadata { - title: metadata.title, - duration: metadata.duration, - url, - src, - }); } None => tracing::error!("could not get call lock"), }