mirror of
https://github.com/Xevion/banner.git
synced 2025-12-13 14:11:00 -06:00
feat: sort meeting times in gcal command
This commit is contained in:
@@ -80,7 +80,19 @@ pub async fn gcal(
|
|||||||
let response: Vec<LinkDetail> = match meeting_times.len() {
|
let response: Vec<LinkDetail> = match meeting_times.len() {
|
||||||
0 => Err(anyhow::anyhow!("No meeting times found for this course.")),
|
0 => Err(anyhow::anyhow!("No meeting times found for this course.")),
|
||||||
1.. => {
|
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()
|
.iter()
|
||||||
.map(|m| {
|
.map(|m| {
|
||||||
let link = generate_gcal_url(&course, m)?;
|
let link = generate_gcal_url(&course, m)?;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use serenity::all::{ClientBuilder, GatewayIntents};
|
use serenity::all::{ClientBuilder, GatewayIntents};
|
||||||
use tokio::signal;
|
use tokio::signal;
|
||||||
use tracing::{error, info, warn};
|
use tracing::{debug, error, info, warn};
|
||||||
use tracing_subscriber::{EnvFilter, FmtSubscriber};
|
use tracing_subscriber::{EnvFilter, FmtSubscriber};
|
||||||
|
|
||||||
use crate::app_state::AppState;
|
use crate::app_state::AppState;
|
||||||
@@ -132,7 +132,7 @@ async fn main() {
|
|||||||
// Shutdown remaining services
|
// Shutdown remaining services
|
||||||
match service_manager.shutdown(shutdown_timeout).await {
|
match service_manager.shutdown(shutdown_timeout).await {
|
||||||
Ok(()) => {
|
Ok(()) => {
|
||||||
info!("Graceful shutdown complete");
|
debug!("Graceful shutdown complete");
|
||||||
}
|
}
|
||||||
Err(pending_services) => {
|
Err(pending_services) => {
|
||||||
warn!(
|
warn!(
|
||||||
@@ -147,7 +147,7 @@ async fn main() {
|
|||||||
// User requested shutdown
|
// User requested shutdown
|
||||||
match service_manager.shutdown(shutdown_timeout).await {
|
match service_manager.shutdown(shutdown_timeout).await {
|
||||||
Ok(()) => {
|
Ok(()) => {
|
||||||
info!("Graceful shutdown complete");
|
debug!("Graceful shutdown complete");
|
||||||
}
|
}
|
||||||
Err(pending_services) => {
|
Err(pending_services) => {
|
||||||
warn!(
|
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);
|
std::process::exit(exit_code);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user