Skip to content

Commit bbf4ed9

Browse files
refactor(apple-calendar): improve naming and structure for EventKit data models
- Rename EventFilter.calendar_tracking_id -> calendar_identifier - Rename AppleCalendar.id -> calendar_identifier - Rename CalendarRef -> CalendarSummary with id -> calendar_identifier - Make event_identifier Option<String> (can be nil for unsaved events) - Rename external_identifier -> calendar_item_external_identifier (Option<String>) - Remove redundant occurrence_date and is_detached from AppleEvent (kept in RecurrenceInfo.occurrence) - Rename Alarm.relative_offset -> relative_offset_seconds for clarity - Update all transform files and frontend code to use new field names Co-Authored-By: yujonglee <yujonglee.dev@gmail.com>
1 parent c7cd402 commit bbf4ed9

File tree

6 files changed

+35
-43
lines changed

6 files changed

+35
-43
lines changed

apps/desktop/src/components/settings/calendar/configure/apple.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,11 +181,11 @@ function useAppleCalendarSelection() {
181181
}
182182

183183
for (const cal of appleCalendars) {
184-
const existing = calendarsTable[cal.id];
184+
const existing = calendarsTable[cal.calendar_identifier];
185185
if (!existing) {
186-
createCalendarRow({ id: cal.id, name: cal.title });
186+
createCalendarRow({ id: cal.calendar_identifier, name: cal.title });
187187
} else if (existing.name !== cal.title) {
188-
updateCalendarName({ id: cal.id, name: cal.title });
188+
updateCalendarName({ id: cal.calendar_identifier, name: cal.title });
189189
}
190190
}
191191
}, [
@@ -208,7 +208,7 @@ function useAppleCalendarSelection() {
208208
grouped.set(sourceTitle, []);
209209
}
210210
grouped.get(sourceTitle)!.push({
211-
id: cal.id,
211+
id: cal.calendar_identifier,
212212
title: cal.title,
213213
color: appleColorToCss(cal.color),
214214
});

plugins/apple-calendar/src/apple/handle.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ impl Handle {
3131
.into_iter()
3232
.filter(|c| {
3333
let id = unsafe { c.calendarIdentifier() }.to_string();
34-
filter.calendar_tracking_id.eq(&id)
34+
filter.calendar_identifier.eq(&id)
3535
})
3636
.collect();
3737

@@ -91,7 +91,7 @@ impl Handle {
9191
let calendar = unsafe { event.calendar() }?;
9292
let calendar_id = unsafe { calendar.calendarIdentifier() };
9393

94-
if !filter.calendar_tracking_id.eq(&calendar_id.to_string()) {
94+
if !filter.calendar_identifier.eq(&calendar_id.to_string()) {
9595
return None;
9696
}
9797

plugins/apple-calendar/src/apple/transforms/alarm.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ pub fn transform_alarm(alarm: &EKAlarm) -> Alarm {
6565

6666
Alarm {
6767
absolute_date,
68-
relative_offset,
68+
relative_offset_seconds: relative_offset,
6969
proximity,
7070
alarm_type,
7171
email_address,

plugins/apple-calendar/src/apple/transforms/calendar.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ use super::utils::{
88
};
99

1010
pub fn transform_calendar(calendar: &EKCalendar) -> AppleCalendar {
11-
let id = unsafe { calendar.calendarIdentifier() }.to_string();
11+
let calendar_identifier = unsafe { calendar.calendarIdentifier() }.to_string();
1212
let title = unsafe { calendar.title() }.to_string();
1313
let calendar_type = transform_calendar_type(unsafe { calendar.r#type() });
1414
let color = unsafe { calendar.CGColor() }.map(|cg_color| extract_color_components(&cg_color));
1515

1616
let properties = extract_calendar_properties(calendar);
1717

1818
AppleCalendar {
19-
id,
19+
calendar_identifier,
2020
title,
2121
calendar_type,
2222
color,
@@ -39,7 +39,7 @@ pub fn extract_calendar_properties(calendar: &EKCalendar) -> AppleCalendar {
3939
supported_event_availabilities,
4040
allowed_entity_types,
4141
source,
42-
id: String::new(),
42+
calendar_identifier: String::new(),
4343
title: String::new(),
4444
calendar_type: CalendarType::Local,
4545
color: None,

plugins/apple-calendar/src/apple/transforms/event.rs

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use objc2_event_kit::{EKAlarm, EKCalendarType, EKEvent, EKStructuredLocation};
33
use objc2_foundation::{NSArray, NSDate, NSString, NSTimeZone};
44

55
use crate::error::Error;
6-
use crate::types::{AppleEvent, CalendarRef, Participant, StructuredLocation};
6+
use crate::types::{AppleEvent, CalendarSummary, Participant, StructuredLocation};
77

88
use super::super::recurrence::{offset_date_time_from, parse_recurrence_info};
99
use super::alarm::transform_alarm;
@@ -14,7 +14,7 @@ use super::utils::get_url_string;
1414

1515
pub fn transform_event(event: &EKEvent) -> Result<AppleEvent, Error> {
1616
let identifiers = extract_event_identifiers(event);
17-
let calendar_ref = extract_event_calendar_ref(event);
17+
let calendar_summary = extract_event_calendar_summary(event);
1818
let basic_info = extract_event_basic_info(event);
1919
let dates = extract_event_dates(event);
2020
let status_info = extract_event_status_info(event);
@@ -23,13 +23,13 @@ pub fn transform_event(event: &EKEvent) -> Result<AppleEvent, Error> {
2323
let location_info = extract_event_location_info(event);
2424
let recurrence_info = extract_event_recurrence_info(event, flags.has_recurrence_rules);
2525
let alarm_info = extract_event_alarm_info(event);
26-
let birthday_info = extract_event_birthday_info(event, &calendar_ref);
26+
let birthday_info = extract_event_birthday_info(event, &calendar_summary);
2727

2828
Ok(AppleEvent {
2929
event_identifier: identifiers.event_identifier,
3030
calendar_item_identifier: identifiers.calendar_item_identifier,
31-
external_identifier: identifiers.external_identifier,
32-
calendar: calendar_ref,
31+
calendar_item_external_identifier: identifiers.calendar_item_external_identifier,
32+
calendar: calendar_summary,
3333
title: basic_info.title,
3434
location: basic_info.location,
3535
url: basic_info.url,
@@ -50,36 +50,31 @@ pub fn transform_event(event: &EKEvent) -> Result<AppleEvent, Error> {
5050
attendees: participants.attendees,
5151
structured_location: location_info.structured_location,
5252
recurrence: recurrence_info.recurrence,
53-
occurrence_date: recurrence_info.occurrence_date,
54-
is_detached: recurrence_info.is_detached,
5553
alarms: alarm_info.alarms,
5654
birthday_contact_identifier: birthday_info.birthday_contact_identifier,
5755
is_birthday: birthday_info.is_birthday,
5856
})
5957
}
6058

6159
struct EventIdentifiers {
62-
event_identifier: String,
60+
event_identifier: Option<String>,
6361
calendar_item_identifier: String,
64-
external_identifier: String,
62+
calendar_item_external_identifier: Option<String>,
6563
}
6664

6765
fn extract_event_identifiers(event: &EKEvent) -> EventIdentifiers {
6866
EventIdentifiers {
69-
event_identifier: unsafe { event.eventIdentifier() }
70-
.map(|s| s.to_string())
71-
.unwrap_or_default(),
67+
event_identifier: unsafe { event.eventIdentifier() }.map(|s| s.to_string()),
7268
calendar_item_identifier: unsafe { event.calendarItemIdentifier() }.to_string(),
73-
external_identifier: unsafe { event.calendarItemExternalIdentifier() }
74-
.map(|s| s.to_string())
75-
.unwrap_or_default(),
69+
calendar_item_external_identifier: unsafe { event.calendarItemExternalIdentifier() }
70+
.map(|s| s.to_string()),
7671
}
7772
}
7873

79-
fn extract_event_calendar_ref(event: &EKEvent) -> CalendarRef {
74+
fn extract_event_calendar_summary(event: &EKEvent) -> CalendarSummary {
8075
let calendar = unsafe { event.calendar() }.unwrap();
81-
CalendarRef {
82-
id: unsafe { calendar.calendarIdentifier() }.to_string(),
76+
CalendarSummary {
77+
calendar_identifier: unsafe { calendar.calendarIdentifier() }.to_string(),
8378
title: unsafe { calendar.title() }.to_string(),
8479
}
8580
}
@@ -198,8 +193,6 @@ fn extract_event_location_info(event: &EKEvent) -> EventLocationInfo {
198193

199194
struct EventRecurrenceInfo {
200195
recurrence: Option<crate::types::RecurrenceInfo>,
201-
occurrence_date: Option<chrono::DateTime<chrono::Utc>>,
202-
is_detached: bool,
203196
}
204197

205198
fn extract_event_recurrence_info(
@@ -208,8 +201,6 @@ fn extract_event_recurrence_info(
208201
) -> EventRecurrenceInfo {
209202
EventRecurrenceInfo {
210203
recurrence: parse_recurrence_info(event, has_recurrence_rules),
211-
occurrence_date: unsafe { event.occurrenceDate() }.map(offset_date_time_from),
212-
is_detached: unsafe { event.isDetached() },
213204
}
214205
}
215206

@@ -233,7 +224,10 @@ struct EventBirthdayInfo {
233224
is_birthday: bool,
234225
}
235226

236-
fn extract_event_birthday_info(event: &EKEvent, _calendar_ref: &CalendarRef) -> EventBirthdayInfo {
227+
fn extract_event_birthday_info(
228+
event: &EKEvent,
229+
_calendar_summary: &CalendarSummary,
230+
) -> EventBirthdayInfo {
237231
let birthday_contact_identifier = unsafe {
238232
let id: Option<Retained<NSString>> = msg_send![event, birthdayContactIdentifier];
239233
id.map(|s| s.to_string())

plugins/apple-calendar/src/types.rs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use specta::Type;
66
pub struct EventFilter {
77
pub from: DateTime<Utc>,
88
pub to: DateTime<Utc>,
9-
pub calendar_tracking_id: String,
9+
pub calendar_identifier: String,
1010
}
1111

1212
macro_rules! common_derives {
@@ -85,7 +85,7 @@ impl Default for CalendarSource {
8585

8686
common_derives! {
8787
pub struct AppleCalendar {
88-
pub id: String,
88+
pub calendar_identifier: String,
8989
pub title: String,
9090
pub calendar_type: CalendarType,
9191
pub color: Option<CalendarColor>,
@@ -152,7 +152,7 @@ common_derives! {
152152
common_derives! {
153153
pub struct Alarm {
154154
pub absolute_date: Option<DateTime<Utc>>,
155-
pub relative_offset: Option<f64>,
155+
pub relative_offset_seconds: Option<f64>,
156156
pub proximity: Option<AlarmProximity>,
157157
pub alarm_type: Option<AlarmType>,
158158
pub email_address: Option<String>,
@@ -292,18 +292,18 @@ common_derives! {
292292
}
293293

294294
common_derives! {
295-
pub struct CalendarRef {
296-
pub id: String,
295+
pub struct CalendarSummary {
296+
pub calendar_identifier: String,
297297
pub title: String,
298298
}
299299
}
300300

301301
common_derives! {
302302
pub struct AppleEvent {
303-
pub event_identifier: String,
303+
pub event_identifier: Option<String>,
304304
pub calendar_item_identifier: String,
305-
pub external_identifier: String,
306-
pub calendar: CalendarRef,
305+
pub calendar_item_external_identifier: Option<String>,
306+
pub calendar: CalendarSummary,
307307
pub title: String,
308308
pub location: Option<String>,
309309
pub url: Option<String>,
@@ -324,8 +324,6 @@ common_derives! {
324324
pub attendees: Vec<Participant>,
325325
pub structured_location: Option<StructuredLocation>,
326326
pub recurrence: Option<RecurrenceInfo>,
327-
pub occurrence_date: Option<DateTime<Utc>>,
328-
pub is_detached: bool,
329327
pub alarms: Vec<Alarm>,
330328
pub birthday_contact_identifier: Option<String>,
331329
pub is_birthday: bool,

0 commit comments

Comments
 (0)