diff --git a/src/bot/commands/gcal.rs b/src/bot/commands/gcal.rs index aadb86f..f73fd7b 100644 --- a/src/bot/commands/gcal.rs +++ b/src/bot/commands/gcal.rs @@ -80,7 +80,19 @@ pub async fn gcal( let response: Vec = match meeting_times.len() { 0 => Err(anyhow::anyhow!("No meeting times found for this course.")), 1.. => { - let links = meeting_times + // Sort meeting times by start time of their TimeRange + let mut sorted_meeting_times = meeting_times.to_vec(); + sorted_meeting_times.sort_unstable_by(|a, b| { + // Primary sort: by start time + match (&a.time_range, &b.time_range) { + (Some(a_time), Some(b_time)) => a_time.start.cmp(&b_time.start), + (Some(_), None) => std::cmp::Ordering::Less, + (None, Some(_)) => std::cmp::Ordering::Greater, + (None, None) => a.days.bits().cmp(&b.days.bits()), + } + }); + + let links = sorted_meeting_times .iter() .map(|m| { let link = generate_gcal_url(&course, m)?; diff --git a/src/main.rs b/src/main.rs index 0348c29..b0b13a2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,6 @@ use serenity::all::{ClientBuilder, GatewayIntents}; use tokio::signal; -use tracing::{error, info, warn}; +use tracing::{debug, error, info, warn}; use tracing_subscriber::{EnvFilter, FmtSubscriber}; use crate::app_state::AppState; @@ -132,7 +132,7 @@ async fn main() { // Shutdown remaining services match service_manager.shutdown(shutdown_timeout).await { Ok(()) => { - info!("Graceful shutdown complete"); + debug!("Graceful shutdown complete"); } Err(pending_services) => { warn!( @@ -147,7 +147,7 @@ async fn main() { // User requested shutdown match service_manager.shutdown(shutdown_timeout).await { Ok(()) => { - info!("Graceful shutdown complete"); + debug!("Graceful shutdown complete"); } Err(pending_services) => { warn!( @@ -160,6 +160,6 @@ async fn main() { } } - info!("Application shutdown complete (exit code: {})", exit_code); + info!(exit_code = exit_code, "Shutdown complete"); std::process::exit(exit_code); }