feat: sort meeting times in gcal command

This commit is contained in:
2025-08-27 00:22:06 -05:00
parent 5ace08327d
commit c529bf9727
2 changed files with 17 additions and 5 deletions

View File

@@ -80,7 +80,19 @@ pub async fn gcal(
let response: Vec<LinkDetail> = 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)?;

View File

@@ -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);
}