lot of refactor

This commit is contained in:
2026-03-14 19:21:56 +01:00
parent b63982714b
commit 8d4a002b73
22 changed files with 256 additions and 313 deletions
+3 -2
View File
@@ -3,11 +3,12 @@ name = "worker"
version = "0.1.0"
edition = "2024"
[package.metadata.cargo-machete]
ignored = ["symphonia"]
[dependencies]
async-nats = { version = "0.46.0" }
futures = { version = "0.3.32" }
futures-executor = { version = "0.3.32" }
nats = { path = "../../libs/nats" }
postcard = { version = "1.1.3", features = ["use-std"] }
rustls = { version = "0.23.37", default-features = false, features = [
"aws-lc-rs",
+6 -4
View File
@@ -24,7 +24,9 @@ impl EventHandler for Handler {
async fn ready(&self, ctx: Context, ready: Ready) {
println!("{} is connected!", ready.user.name);
let voice_manager = songbird::get(&ctx).await;
let voice_manager = songbird::get(&ctx)
.await
.expect("Cannot init voice manager");
let mut subscriber = self
.nats_client
@@ -65,9 +67,9 @@ impl EventHandler for Handler {
let response = match result {
Ok(response) => response,
Err(err) => JobResponse {
Err(why) => JobResponse {
content: None,
error: Some(err),
error: Some(why),
},
};
@@ -115,6 +117,6 @@ async fn main() {
.expect("Error creating discord client");
if let Err(why) = discord_client.start().await {
println!("Client error: {why:?}");
println!("Client start error: {why:?}");
}
}
+17 -8
View File
@@ -1,4 +1,7 @@
use types::jobs::{DownloadJob, DownloadResponse, JobResponse};
use types::{
error::{CorroError, CorroErrorType},
jobs::{DownloadJob, DownloadResponse, JobResponse},
};
use yt_dlp::{
Downloader,
model::{AudioCodecPreference, AudioQuality},
@@ -7,12 +10,15 @@ use yt_dlp::{
pub async fn download(
downloader: &Downloader,
job: DownloadJob,
) -> Result<JobResponse<DownloadResponse>, String> {
println!("job: {:?}", job);
) -> Result<JobResponse<DownloadResponse>, CorroError> {
let video = match downloader.fetch_video_infos(job.url).await {
Ok(video) => video,
Err(err) => return Err(err.to_string()),
Err(why) => {
return Err(CorroError {
error_type: CorroErrorType::YtdlpError,
message: why.to_string(),
});
}
};
let audio_path = match downloader
@@ -25,11 +31,14 @@ pub async fn download(
.await
{
Ok(path) => path,
Err(err) => return Err(err.to_string()),
Err(why) => {
return Err(CorroError {
error_type: CorroErrorType::YtdlpError,
message: why.to_string(),
});
}
};
println!("audio_path: {:?}", &audio_path);
Ok(JobResponse {
content: Some(DownloadResponse {
path: audio_path.clone(),
+30 -35
View File
@@ -6,46 +6,41 @@ use songbird::{
events::{Event, EventContext, EventHandler as VoiceEventHandler, TrackEvent},
input::File,
};
use types::jobs::{JobResponse, PlayJob, PlayResponse};
use types::{
error::CorroError,
jobs::{JobResponse, PlayJob, PlayResponse},
};
pub async fn play(
voice_manager: &Option<Arc<Songbird>>,
voice_manager: &Arc<Songbird>,
job: PlayJob,
) -> Result<JobResponse<PlayResponse>, String> {
println!("job: {:?}", job);
if let Some(voice_manager) = voice_manager {
if let Ok(handler_lock) = voice_manager.join(job.guild_id, job.channel_id).await {
// Attach an event handler to see notifications of all track errors.
let mut handler = handler_lock.lock().await;
handler.add_global_event(TrackEvent::Error.into(), TrackErrorNotifier);
}
let handler_lock = match voice_manager.get(job.guild_id) {
Some(handler) => handler,
None => {
return Ok(JobResponse {
content: Some(PlayResponse {}),
error: None,
});
}
};
) -> Result<JobResponse<PlayResponse>, CorroError> {
if let Ok(handler_lock) = voice_manager.join(job.guild_id, job.channel_id).await {
// Attach an event handler to see notifications of all track errors.
let mut handler = handler_lock.lock().await;
let src = File::new(job.path).clone();
let track_handle = handler.play_input(src.into());
println!("{:?}", track_handle.get_info().await);
Ok(JobResponse {
content: Some(PlayResponse {}),
error: None,
})
} else {
Err("No voice_manager defined".to_string())
handler.add_global_event(TrackEvent::Error.into(), TrackErrorNotifier);
}
let handler_lock = match voice_manager.get(job.guild_id) {
Some(handler) => handler,
None => {
return Ok(JobResponse {
content: Some(PlayResponse {}),
error: None,
});
}
};
let mut handler = handler_lock.lock().await;
let src = File::new(job.path).clone();
let _ = handler.play_input(src.into());
Ok(JobResponse {
content: Some(PlayResponse {}),
error: None,
})
}
struct TrackErrorNotifier;
+10 -7
View File
@@ -1,4 +1,5 @@
use types::{
error::{CorroError, CorroErrorType},
jobs::{JobResponse, SearchJob, SearchResponse},
misc::parse_url_or_default,
queue::YoutubeSong,
@@ -8,9 +9,7 @@ use yt_dlp::Downloader;
pub async fn search(
downloader: &Downloader,
job: SearchJob,
) -> Result<JobResponse<SearchResponse>, String> {
println!("job: {:?}", job);
) -> Result<JobResponse<SearchResponse>, CorroError> {
let result = match downloader
.youtube_extractor()
.search_first(&job.query)
@@ -32,16 +31,20 @@ pub async fn search(
},
None => JobResponse {
content: None,
error: Some("url is not defined".to_string()),
error: Some(CorroError {
error_type: CorroErrorType::JobError,
message: "webpage_url is not defined".to_string(),
}),
},
},
Err(why) => JobResponse {
content: None,
error: Some(format!("{why}")),
error: Some(CorroError {
error_type: CorroErrorType::JobError,
message: why.to_string(),
}),
},
};
println!("reply: {:?}", result.content);
Ok(result)
}