Fix series RRULE updates: editing 'all events' now properly updates original series RRULE
- Backend now updates RRULE when recurrence_count or recurrence_end_date parameters are provided - Fixed update_entire_series() to modify COUNT/UNTIL instead of preserving original RRULE - Added comprehensive RRULE parsing functions to extract existing frequency, interval, count, until, and BYDAY components - Fixed frontend parameter mapping to pass recurrence parameters through update_series calls - Resolves issue where changing recurring event from 5 to 7 occurrences kept original COUNT=5 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -262,8 +262,8 @@ pub async fn update_event_series(
|
||||
Json(request): Json<UpdateEventSeriesRequest>,
|
||||
) -> Result<Json<UpdateEventSeriesResponse>, ApiError> {
|
||||
println!(
|
||||
"🔄 Update event series request received: series_uid='{}', update_scope='{}'",
|
||||
request.series_uid, request.update_scope
|
||||
"🔄 Update event series request received: series_uid='{}', update_scope='{}', recurrence_count={:?}, recurrence_end_date={:?}",
|
||||
request.series_uid, request.update_scope, request.recurrence_count, request.recurrence_end_date
|
||||
);
|
||||
|
||||
// Extract and verify token
|
||||
@@ -765,9 +765,36 @@ fn update_entire_series(
|
||||
updated_event.last_modified = Some(now);
|
||||
// Keep original created timestamp to preserve event history
|
||||
|
||||
// For simple updates (like drag operations), preserve the existing RRULE
|
||||
// For more complex updates, we might need to regenerate it, but for now keep it simple
|
||||
// updated_event.rrule remains unchanged from the clone
|
||||
// Update RRULE if recurrence parameters are provided
|
||||
if let Some(ref existing_rrule) = updated_event.rrule {
|
||||
let mut new_rrule = existing_rrule.clone();
|
||||
println!("🔄 Original RRULE: {}", existing_rrule);
|
||||
|
||||
// Update COUNT if provided
|
||||
if let Some(count) = request.recurrence_count {
|
||||
println!("🔄 Updating RRULE with new COUNT: {}", count);
|
||||
// Remove old COUNT or UNTIL parameters
|
||||
new_rrule = new_rrule.split(';')
|
||||
.filter(|part| !part.starts_with("COUNT=") && !part.starts_with("UNTIL="))
|
||||
.collect::<Vec<_>>()
|
||||
.join(";");
|
||||
// Add new COUNT
|
||||
new_rrule = format!("{};COUNT={}", new_rrule, count);
|
||||
} else if let Some(ref end_date) = request.recurrence_end_date {
|
||||
println!("🔄 Updating RRULE with new UNTIL: {}", end_date);
|
||||
// Remove old COUNT or UNTIL parameters
|
||||
new_rrule = new_rrule.split(';')
|
||||
.filter(|part| !part.starts_with("COUNT=") && !part.starts_with("UNTIL="))
|
||||
.collect::<Vec<_>>()
|
||||
.join(";");
|
||||
// Add new UNTIL (convert YYYY-MM-DD to YYYYMMDD format)
|
||||
let until_date = end_date.replace("-", "");
|
||||
new_rrule = format!("{};UNTIL={}", new_rrule, until_date);
|
||||
}
|
||||
|
||||
println!("🔄 Updated RRULE: {}", new_rrule);
|
||||
updated_event.rrule = Some(new_rrule);
|
||||
}
|
||||
|
||||
// Copy the updated event back to existing_event for the main handler
|
||||
*existing_event = updated_event.clone();
|
||||
|
||||
Reference in New Issue
Block a user