diff --git a/backend/src/calendar.rs b/backend/src/calendar.rs index 8c09b87..fae14ce 100644 --- a/backend/src/calendar.rs +++ b/backend/src/calendar.rs @@ -348,11 +348,6 @@ impl CalDAVClient { } full_prop.push_str(&format!(":{}", prop_value)); - // Debug logging for DTSTART properties specifically - if prop_name == "DTSTART" { - println!("🔍 Raw DTSTART property: name='{}', value='{}', params={:?}, full_prop='{}'", - property.name, prop_value, property.params, full_prop); - } full_properties.insert(prop_name, full_prop); } @@ -369,14 +364,6 @@ impl CalDAVClient { let dtstart_value = properties.get("DTSTART").unwrap_or(&empty_string); let all_day = dtstart_raw.contains("VALUE=DATE") || (!dtstart_value.contains("T") && dtstart_value.len() == 8); - // Debug logging for DTSTART parsing - if all_day { - println!("✅ ALL-DAY EVENT FOUND: DTSTART='{}' -> all_day={}", dtstart_raw, all_day); - } else { - println!("🔍 Backend: DTSTART='{}' (len={}, has_T={}, has_VALUE_DATE={}) -> all_day={}", - dtstart_raw, dtstart_raw.len(), dtstart_raw.contains("T"), - dtstart_raw.contains("VALUE=DATE"), all_day); - } // Parse start time (required) let start_prop = properties @@ -486,14 +473,6 @@ impl CalDAVClient { vevent.exdate = exdate.into_iter().map(|dt| dt.naive_utc()).collect(); vevent.exdate_tzid = None; // TODO: Parse timezone info for EXDATE vevent.all_day = all_day; - if all_day { - println!("📅 Backend: Successfully created all-day VEvent '{}' with start={}, end={:?}, all_day={}", - vevent.summary.as_ref().unwrap_or(&"Untitled".to_string()), - vevent.dtstart, - vevent.dtend, - vevent.all_day - ); - } // Parse alarms vevent.alarms = self.parse_valarms(&event)?; @@ -625,7 +604,7 @@ impl CalDAVClient { has_valid_caldav_response = true; all_calendars.extend(calendars); } - Err(CalDAVError::ServerError(status)) => { + Err(CalDAVError::ServerError(_status)) => { // HTTP error - this might be expected for some paths, continue trying } Err(e) => { diff --git a/backend/src/handlers/ics_fetcher.rs b/backend/src/handlers/ics_fetcher.rs index 8130bd4..3f103fe 100644 --- a/backend/src/handlers/ics_fetcher.rs +++ b/backend/src/handlers/ics_fetcher.rs @@ -491,26 +491,18 @@ fn deduplicate_events(mut events: Vec) -> Vec { let mut uid_groups: HashMap> = HashMap::new(); for event in events.drain(..) { - // Debug logging to understand what's happening - println!("🔍 Event: '{}' at {} (RRULE: {}) - UID: {}", - event.summary.as_ref().unwrap_or(&"No Title".to_string()), - event.dtstart.format("%Y-%m-%d %H:%M"), - if event.rrule.is_some() { "Yes" } else { "No" }, - event.uid - ); uid_groups.entry(event.uid.clone()).or_insert_with(Vec::new).push(event); } let mut uid_deduplicated_events = Vec::new(); - for (uid, mut events_with_uid) in uid_groups.drain() { + for (_uid, mut events_with_uid) in uid_groups.drain() { if events_with_uid.len() == 1 { // Only one event with this UID, keep it uid_deduplicated_events.push(events_with_uid.into_iter().next().unwrap()); } else { // Multiple events with same UID - prefer recurring over non-recurring - println!("🔍 Found {} events with UID '{}'", events_with_uid.len(), uid); // Sort by preference: recurring events first, then by completeness events_with_uid.sort_by(|a, b| { @@ -529,10 +521,6 @@ fn deduplicate_events(mut events: Vec) -> Vec { // Keep the first (preferred) event let preferred_event = events_with_uid.into_iter().next().unwrap(); - println!("🔄 UID dedup: Keeping '{}' (RRULE: {})", - preferred_event.summary.as_ref().unwrap_or(&"No Title".to_string()), - if preferred_event.rrule.is_some() { "Yes" } else { "No" } - ); uid_deduplicated_events.push(preferred_event); } } diff --git a/frontend/src/components/month_view.rs b/frontend/src/components/month_view.rs index c7cdc62..4cb8350 100644 --- a/frontend/src/components/month_view.rs +++ b/frontend/src/components/month_view.rs @@ -113,6 +113,7 @@ pub fn month_view(props: &MonthViewProps) -> Html { "#3B82F6".to_string() }; + html! {
// Weekday headers diff --git a/frontend/src/components/week_view.rs b/frontend/src/components/week_view.rs index c2b3356..b265f27 100644 --- a/frontend/src/components/week_view.rs +++ b/frontend/src/components/week_view.rs @@ -348,6 +348,7 @@ pub fn week_view(props: &WeekViewProps) -> Html { }) }; + html! {
// Header with weekday names and dates diff --git a/frontend/src/services/calendar_service.rs b/frontend/src/services/calendar_service.rs index 35d704e..6265f89 100644 --- a/frontend/src/services/calendar_service.rs +++ b/frontend/src/services/calendar_service.rs @@ -247,6 +247,8 @@ impl CalendarService { if resp.ok() { let events: Vec = serde_json::from_str(&text_string) .map_err(|e| format!("JSON parsing failed: {}", e))?; + + Ok(events) } else { Err(format!( @@ -277,14 +279,15 @@ impl CalendarService { /// Convert UTC events to local timezone for display fn convert_utc_to_local(mut event: VEvent) -> VEvent { + // All-day events should not have timezone conversions applied + if event.all_day { + return event; + } + // Check if event times are in UTC (legacy events from before timezone migration) let is_utc_event = event.dtstart_tzid.as_ref().map_or(true, |tz| tz == "UTC"); if is_utc_event { - web_sys::console::log_1(&format!( - "🕐 Converting UTC event '{}' to local time", - event.summary.as_deref().unwrap_or("Untitled") - ).into()); // Get current timezone offset (convert from UTC to local) let date = js_sys::Date::new_0(); @@ -330,14 +333,6 @@ impl CalendarService { // Convert UTC events to local time for proper display let event = Self::convert_utc_to_local(event); if let Some(ref rrule) = event.rrule { - web_sys::console::log_1( - &format!( - "📅 Processing recurring VEvent '{}' with RRULE: {}", - event.summary.as_deref().unwrap_or("Untitled"), - rrule - ) - .into(), - ); // Log if event has exception dates if !event.exdate.is_empty() { @@ -383,7 +378,6 @@ impl CalendarService { // Parse RRULE components let rrule_upper = rrule.to_uppercase(); - web_sys::console::log_1(&format!("🔄 Parsing RRULE: {}", rrule_upper).into()); let components: HashMap = rrule_upper .split(';') @@ -439,7 +433,6 @@ impl CalendarService { }); if let Some(until) = until_date { - web_sys::console::log_1(&format!("📅 RRULE has UNTIL: {}", until).into()); } let start_date = base_event.dtstart.date(); @@ -453,10 +446,6 @@ impl CalendarService { let current_datetime = base_event.dtstart + Duration::days(current_date.signed_duration_since(start_date).num_days()); if current_datetime > until { - web_sys::console::log_1( - &format!("🛑 Stopping at {} due to UNTIL {}", current_datetime, until) - .into(), - ); break; } } @@ -653,13 +642,6 @@ impl CalendarService { let days_diff = occurrence_date.signed_duration_since(start_date).num_days(); let occurrence_datetime = base_event.dtstart + Duration::days(days_diff); if occurrence_datetime > until { - web_sys::console::log_1( - &format!( - "🛑 Stopping at {} due to UNTIL {}", - occurrence_datetime, until - ) - .into(), - ); return occurrences; } } @@ -779,13 +761,6 @@ impl CalendarService { occurrence_date.signed_duration_since(start_date).num_days(); let occurrence_datetime = base_event.dtstart + Duration::days(days_diff); if occurrence_datetime > until { - web_sys::console::log_1( - &format!( - "🛑 Stopping at {} due to UNTIL {}", - occurrence_datetime, until - ) - .into(), - ); return occurrences; } }