Untitled

 avatar
unknown
plain_text
a year ago
3.8 kB
3
Indexable

    func AddToCalender(store:EKEventStore) {
            DispatchQueue.main.async {
                guard self.arrAgendaDetail.count > 0 else { return }

                let event = EKEvent(eventStore: store)
                let model = self.arrAgendaDetail[0]

                event.title = String(format: "%@ - %@", App_Name, model.Heading ?? "")
                event.location = model.custom_location

                // Event details
                let strStartDate = model.Start_date_cal ?? ""
                let strEndDate = model.End_date_cal ?? ""
                let strStartTime = model.Start_time ?? ""
                let strEndTime = model.End_time ?? ""
                let eventTimeZoneAbbreviation = model.Event_show_time_zone ?? "UTC"

                // Date formatter for parsing event date-time
                let eventDateFormatter = DateFormatter()
                eventDateFormatter.dateFormat = "MM/dd/yyyy HH:mm"
                eventDateFormatter.locale = Locale(identifier: "en_US_POSIX")
                eventDateFormatter.timeZone = TimeZone(abbreviation: eventTimeZoneAbbreviation)

                let startDateTimeString = "\(strStartDate) \(strStartTime)"
                let endDateTimeString = "\(strEndDate) \(strEndTime)"
                
                guard let startDateInEventTimeZone = eventDateFormatter.date(from: startDateTimeString),
                      let endDateInEventTimeZone = eventDateFormatter.date(from: endDateTimeString) else {
                    print("Error parsing event dates")
                    return
                }

                // Convert event time to the user's current time zone
                let userTimeZone = TimeZone.current
                let userDateFormatter = DateFormatter()
                userDateFormatter.dateFormat = "MM/dd/yyyy HH:mm"
                userDateFormatter.locale = Locale(identifier: "en_US_POSIX")
                userDateFormatter.timeZone = userTimeZone

                // Convert start and end dates to user's time zone
                let startDateInUserTimeZone = userDateFormatter.string(from: startDateInEventTimeZone)
                let endDateInUserTimeZone = userDateFormatter.string(from: endDateInEventTimeZone)
                
                let newuserDateFormatter = DateFormatter()
                newuserDateFormatter.dateFormat = "MM/dd/yyyy HH:mm"
                
                guard let startDate = newuserDateFormatter.date(from: startDateInUserTimeZone),
                      let endDate = newuserDateFormatter.date(from: endDateInUserTimeZone) else {
                    print("Error converting event dates to user time zone")
                    return
                }

                // Configure and save the event
                event.startDate = startDate
                event.endDate = endDate
                event.calendar = store.defaultCalendarForNewEvents

                let alarm = EKAlarm(relativeOffset: -60 * 60) // 1 hour before
                event.addAlarm(alarm)

                if Utility.fetchExistedEventState(forStart: startDate, andEnd: endDate, andEvent: event) {
                    DispatchQueue.main.async {
                        Utility.showAlert(withTitle: App_Name, andMessage: CALENDAR_EVENT_ALREADY_EXIST_MSG)
                    }
                } else {
                    do {
                        try store.save(event, span: .thisEvent)
                        DispatchQueue.main.async {
                            Utility.showAlert(withTitle: App_Name, andMessage: CALENDAR_EVENT_SAVED_MSG)
                        }
                    } catch {
                        print("Error saving event to calendar: \(error)")
                    }
                }
            }
        }
Editor is loading...
Leave a Comment