From 6d30eb468b988bf8c41a67e255548b7499eb17b3 Mon Sep 17 00:00:00 2001 From: Benjamin Sherriff Date: Sun, 8 Oct 2023 08:58:38 -0400 Subject: [PATCH] Updated to include volume --- service/src/bot/api/routes.rs | 42 +++++++++++++++++++++++++++++++++- ui/src/api/guilds.ts | 12 +++++----- ui/src/app/management/page.tsx | 21 +++++++++++++---- 3 files changed, 63 insertions(+), 12 deletions(-) diff --git a/service/src/bot/api/routes.rs b/service/src/bot/api/routes.rs index 976b096..1c06644 100644 --- a/service/src/bot/api/routes.rs +++ b/service/src/bot/api/routes.rs @@ -6,7 +6,7 @@ use serde::{Serialize, Deserialize}; use serenity::model::prelude::{GuildChannel, ChannelType}; use siren::ServiceError; -use crate::{AppState, bot::commands::audio::{play::play_track, join}}; +use crate::{AppState, bot::commands::audio::{play::play_track, join}, db::guilds::InsertGuild}; #[get("/guilds")] async fn get_guilds(data: web::Data>) -> HttpResponse { @@ -244,6 +244,46 @@ async fn pause(path: web::Path, data: web::Data>) -> HttpR HttpResponse::Ok().finish() } +#[derive(Serialize, Deserialize)] +struct SetVolume { + volume: String +} + +#[post("/{guild_id}/voice/volume")] +async fn set_volume(path: web::Path, volume: web::Json::, data: web::Data>) -> HttpResponse { + let guild_id = path.into_inner(); + let guild_id = match guild_id.parse::() { + Ok(id) => id, + Err(err) => { + warn!("Could not parse guild id: {:?}", err); + return ResponseError::error_response(&ServiceError { + status: 422, + message: err.to_string() + }) + } + }; + + let bound_volume = volume.volume.parse::().unwrap_or(0.0); + + let _ = InsertGuild::update_audio(guild_id as i64, bound_volume as f64); + + if let Some(handler_lock) = data.songbird.get(guild_id) { + let handler = handler_lock.lock().await; + for (_, track_handle) in handler.queue().current_queue().iter().enumerate() { + let _ = track_handle.set_volume(bound_volume); + } + if let Err(err) = handler.queue().pause() { + warn!("Could not pause track: {:?}", err); + return ResponseError::error_response(&ServiceError { + status: 422, + message: err.to_string() + }) + } + } + + HttpResponse::Ok().finish() +} + pub fn init_routes(config: &mut web::ServiceConfig) { config .service(get_guilds) diff --git a/ui/src/api/guilds.ts b/ui/src/api/guilds.ts index 09de488..64bbe8b 100644 --- a/ui/src/api/guilds.ts +++ b/ui/src/api/guilds.ts @@ -20,14 +20,14 @@ export async function playTrack(guildId: number, channelId: number, track: strin await postRequest(`guilds/${guildId}/voice/${channelId}/play`, { track_url: track }); } -export async function stopTrack(guildId: number, channelId: number): Promise { - await postRequest(`guilds/${guildId}/voice/${channelId}/stop`, {}); +export async function stopTrack(guildId: number): Promise { + await postRequest(`guilds/${guildId}/voice/stop`, {}); } -export async function pauseTrack(guildId: number, channelId: number): Promise { - await postRequest(`guilds/${guildId}/voice/${channelId}/pause`, {}); +export async function pauseTrack(guildId: number): Promise { + await postRequest(`guilds/${guildId}/voice/pause`, {}); } -export async function resumeTrack(guildId: number, channelId: number): Promise { - await postRequest(`guilds/${guildId}/voice/${channelId}/resume`, {}); +export async function resumeTrack(guildId: number): Promise { + await postRequest(`guilds/${guildId}/voice/resume`, {}); } diff --git a/ui/src/app/management/page.tsx b/ui/src/app/management/page.tsx index 5eac9be..4d3a01c 100644 --- a/ui/src/app/management/page.tsx +++ b/ui/src/app/management/page.tsx @@ -82,7 +82,7 @@ export default function Page() { {channel.name}
{ playTrack(activeGuild!.id, channel.id, values.trackUrl); })} @@ -90,11 +90,22 @@ export default function Page() { - - - -
+
+ + + +
+
{}} /> +
))}