Commit 4bd00a90 by Daniel Dahan

development: renamed Event to Events and refined API

parent ff3a3716
...@@ -40,8 +40,12 @@ ...@@ -40,8 +40,12 @@
96328B9E1E05C24E009A4C90 /* TableView.swift in Headers */ = {isa = PBXBuildFile; fileRef = 96328B961E05C0BB009A4C90 /* TableView.swift */; settings = {ATTRIBUTES = (Public, ); }; }; 96328B9E1E05C24E009A4C90 /* TableView.swift in Headers */ = {isa = PBXBuildFile; fileRef = 96328B961E05C0BB009A4C90 /* TableView.swift */; settings = {ATTRIBUTES = (Public, ); }; };
96328B9F1E05C24E009A4C90 /* TableViewController.swift in Headers */ = {isa = PBXBuildFile; fileRef = 96328B981E05C0CE009A4C90 /* TableViewController.swift */; settings = {ATTRIBUTES = (Public, ); }; }; 96328B9F1E05C24E009A4C90 /* TableViewController.swift in Headers */ = {isa = PBXBuildFile; fileRef = 96328B981E05C0CE009A4C90 /* TableViewController.swift */; settings = {ATTRIBUTES = (Public, ); }; };
96334EF61C8B84660083986B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 96334EF51C8B84660083986B /* Assets.xcassets */; }; 96334EF61C8B84660083986B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 96334EF51C8B84660083986B /* Assets.xcassets */; };
9639526C1EC3882F004BA9DE /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9639526A1EC3882F004BA9DE /* Event.swift */; }; 9639526C1EC3882F004BA9DE /* Events.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9639526A1EC3882F004BA9DE /* Events.swift */; };
9639526D1EC3882F004BA9DE /* EventController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9639526B1EC3882F004BA9DE /* EventController.swift */; }; 9639526D1EC3882F004BA9DE /* EventsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9639526B1EC3882F004BA9DE /* EventsController.swift */; };
964335B71EC9432400FA9954 /* Events.swift in Headers */ = {isa = PBXBuildFile; fileRef = 9639526A1EC3882F004BA9DE /* Events.swift */; settings = {ATTRIBUTES = (Public, ); }; };
964335B81EC9432400FA9954 /* EventsController.swift in Headers */ = {isa = PBXBuildFile; fileRef = 9639526B1EC3882F004BA9DE /* EventsController.swift */; settings = {ATTRIBUTES = (Public, ); }; };
964335B91EC9432400FA9954 /* Material+MotionDynamics.swift in Headers */ = {isa = PBXBuildFile; fileRef = 960E35051EB0FC5700EB124A /* Material+MotionDynamics.swift */; settings = {ATTRIBUTES = (Public, ); }; };
964335BA1EC9432400FA9954 /* TabsController.swift in Headers */ = {isa = PBXBuildFile; fileRef = 9606CFAB1E957AC3006B4E74 /* TabsController.swift */; settings = {ATTRIBUTES = (Public, ); }; };
965E80CC1DD4C50600D61E4B /* Bar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96BCB7981CB40DC500C806FE /* Bar.swift */; }; 965E80CC1DD4C50600D61E4B /* Bar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96BCB7981CB40DC500C806FE /* Bar.swift */; };
965E80CD1DD4C50600D61E4B /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96BCB7701CB40DC500C806FE /* Button.swift */; }; 965E80CD1DD4C50600D61E4B /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96BCB7701CB40DC500C806FE /* Button.swift */; };
965E80CE1DD4C50600D61E4B /* FABButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96BCB75F1CB40DC500C806FE /* FABButton.swift */; }; 965E80CE1DD4C50600D61E4B /* FABButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96BCB75F1CB40DC500C806FE /* FABButton.swift */; };
...@@ -206,8 +210,8 @@ ...@@ -206,8 +210,8 @@
96328B981E05C0CE009A4C90 /* TableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewController.swift; sourceTree = "<group>"; }; 96328B981E05C0CE009A4C90 /* TableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewController.swift; sourceTree = "<group>"; };
96334EF51C8B84660083986B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; 96334EF51C8B84660083986B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
963832361B88DFD80015F710 /* Material.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Material.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 963832361B88DFD80015F710 /* Material.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Material.framework; sourceTree = BUILT_PRODUCTS_DIR; };
9639526A1EC3882F004BA9DE /* Event.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Event.swift; sourceTree = "<group>"; }; 9639526A1EC3882F004BA9DE /* Events.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Events.swift; sourceTree = "<group>"; };
9639526B1EC3882F004BA9DE /* EventController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventController.swift; sourceTree = "<group>"; }; 9639526B1EC3882F004BA9DE /* EventsController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventsController.swift; sourceTree = "<group>"; };
963FBEFC1D669510008F8512 /* Snackbar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Snackbar.swift; sourceTree = "<group>"; }; 963FBEFC1D669510008F8512 /* Snackbar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Snackbar.swift; sourceTree = "<group>"; };
965532281E47E388005C2792 /* SpringAnimation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SpringAnimation.swift; sourceTree = "<group>"; }; 965532281E47E388005C2792 /* SpringAnimation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SpringAnimation.swift; sourceTree = "<group>"; };
9658F2161CD6FA4700B902C1 /* IconButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IconButton.swift; sourceTree = "<group>"; }; 9658F2161CD6FA4700B902C1 /* IconButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IconButton.swift; sourceTree = "<group>"; };
...@@ -394,13 +398,12 @@ ...@@ -394,13 +398,12 @@
name = Products; name = Products;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
963952691EC3882F004BA9DE /* Event */ = { 963952691EC3882F004BA9DE /* Events */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
9639526A1EC3882F004BA9DE /* Event.swift */, 9639526A1EC3882F004BA9DE /* Events.swift */,
9639526B1EC3882F004BA9DE /* EventController.swift */, 9639526B1EC3882F004BA9DE /* EventsController.swift */,
); );
name = Event;
path = Events; path = Events;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
...@@ -509,7 +512,7 @@ ...@@ -509,7 +512,7 @@
96328B9A1E05C135009A4C90 /* Data */, 96328B9A1E05C135009A4C90 /* Data */,
96BCB80B1CB410CC00C806FE /* Device */, 96BCB80B1CB410CC00C806FE /* Device */,
96230AB61D6A51FD00AF47DC /* Divider */, 96230AB61D6A51FD00AF47DC /* Divider */,
963952691EC3882F004BA9DE /* Event */, 963952691EC3882F004BA9DE /* Events */,
96BCB80A1CB410A100C806FE /* Extension */, 96BCB80A1CB410A100C806FE /* Extension */,
963FBF021D6696D0008F8512 /* FABMenu */, 963FBF021D6696D0008F8512 /* FABMenu */,
96BCB8071CB4101C00C806FE /* Font */, 96BCB8071CB4101C00C806FE /* Font */,
...@@ -826,6 +829,10 @@ ...@@ -826,6 +829,10 @@
96BFC16D1E63C10A0075DE1F /* Material+Motion.swift in Headers */, 96BFC16D1E63C10A0075DE1F /* Material+Motion.swift in Headers */,
96BFC16E1E63C10A0075DE1F /* Material+MotionAnimation.swift in Headers */, 96BFC16E1E63C10A0075DE1F /* Material+MotionAnimation.swift in Headers */,
96BFC16F1E63C10A0075DE1F /* SpringAnimation.swift in Headers */, 96BFC16F1E63C10A0075DE1F /* SpringAnimation.swift in Headers */,
964335B71EC9432400FA9954 /* Events.swift in Headers */,
964335B81EC9432400FA9954 /* EventsController.swift in Headers */,
964335B91EC9432400FA9954 /* Material+MotionDynamics.swift in Headers */,
964335BA1EC9432400FA9954 /* TabsController.swift in Headers */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
...@@ -936,11 +943,11 @@ ...@@ -936,11 +943,11 @@
965E81191DD4D5C800D61E4B /* SnackbarController.swift in Sources */, 965E81191DD4D5C800D61E4B /* SnackbarController.swift in Sources */,
965E811A1DD4D5C800D61E4B /* StatusBarController.swift in Sources */, 965E811A1DD4D5C800D61E4B /* StatusBarController.swift in Sources */,
965E811B1DD4D5C800D61E4B /* Switch.swift in Sources */, 965E811B1DD4D5C800D61E4B /* Switch.swift in Sources */,
9639526C1EC3882F004BA9DE /* Event.swift in Sources */, 9639526C1EC3882F004BA9DE /* Events.swift in Sources */,
965E811C1DD4D5C800D61E4B /* TabBar.swift in Sources */, 965E811C1DD4D5C800D61E4B /* TabBar.swift in Sources */,
965E811D1DD4D5C800D61E4B /* TableViewCell.swift in Sources */, 965E811D1DD4D5C800D61E4B /* TableViewCell.swift in Sources */,
965E811E1DD4D5C800D61E4B /* TextField.swift in Sources */, 965E811E1DD4D5C800D61E4B /* TextField.swift in Sources */,
9639526D1EC3882F004BA9DE /* EventController.swift in Sources */, 9639526D1EC3882F004BA9DE /* EventsController.swift in Sources */,
965E811F1DD4D5C800D61E4B /* ErrorTextField.swift in Sources */, 965E811F1DD4D5C800D61E4B /* ErrorTextField.swift in Sources */,
965E81211DD4D5C800D61E4B /* TextStorage.swift in Sources */, 965E81211DD4D5C800D61E4B /* TextStorage.swift in Sources */,
965E81221DD4D5C800D61E4B /* TextView.swift in Sources */, 965E81221DD4D5C800D61E4B /* TextView.swift in Sources */,
......
...@@ -30,96 +30,96 @@ ...@@ -30,96 +30,96 @@
import EventKit import EventKit
@objc(EventReminderAuthorizationStatus) @objc(EventsReminderAuthorizationStatus)
public enum EventReminderAuthorizationStatus: Int { public enum EventsReminderAuthorizationStatus: Int {
case authorized case authorized
case denied case denied
} }
@objc(EventReminderPriority) @objc(EventsReminderPriority)
public enum EventReminderPriority: Int { public enum EventsReminderPriority: Int {
case none case none
case high = 1 case high = 1
case medium = 5 case medium = 5
case low = 9 case low = 9
} }
@objc(EventDelegate) @objc(EventsDelegate)
public protocol EventDelegate { public protocol EventsDelegate {
/** /**
A delegation method that is executed when the Reminders status is updated. A delegation method that is executed when the Reminders status is updated.
- Parameter event: A reference to the Reminders. - Parameter events: A reference to the Reminders.
- Parameter status: A reference to the EventReminderAuthorizationStatus. - Parameter status: A reference to the EventReminderAuthorizationStatus.
*/ */
@objc @objc
optional func event(event: Event, status: EventReminderAuthorizationStatus) optional func events(events: Events, status: EventsReminderAuthorizationStatus)
/** /**
A delegation method that is executed when event authorization is authorized. A delegation method that is executed when events authorization is authorized.
- Parameter event: A reference to the Reminders. - Parameter events: A reference to the Reminders.
*/ */
@objc @objc
optional func event(authorized event: Event) optional func eventsAuthorizedForReminders(events: Events)
/** /**
A delegation method that is executed when event authorization is denied. A delegation method that is executed when events authorization is denied.
- Parameter event: A reference to the Reminders. - Parameter events: A reference to the Reminders.
*/ */
@objc @objc
optional func event(denied event: Event) optional func eventsDeniedForReminders(events: Events)
/** /**
A delegation method that is executed when a new calendar is created A delegation method that is executed when a new calendar is created
- Parameter event: A reference to the Reminders. - Parameter events: A reference to the Reminders.
- Parameter calendar: An optional reference to the calendar created. - Parameter calendar: An optional reference to the calendar created.
- Parameter error: An optional error if the calendar failed to be created. - Parameter error: An optional error if the calendar failed to be created.
*/ */
@objc @objc
optional func event(event: Event, createdCalendar calendar: EKCalendar?, error: Error?) optional func events(events: Events, createdCalendar calendar: EKCalendar?, error: Error?)
/** /**
A delegation method that is executed when a new calendar is created. A delegation method that is executed when a new calendar is created.
- Parameter event: A reference to the Reminders. - Parameter events: A reference to the Reminders.
- Parameter removed calendar: A reference to the calendar created. - Parameter removed calendar: A reference to the calendar created.
- Parameter error: An optional error if the calendar failed to be removed. - Parameter error: An optional error if the calendar failed to be removed.
*/ */
@objc @objc
optional func event(event: Event, removedCalendar calendar: EKCalendar, error: Error?) optional func events(events: Events, removedCalendar calendar: EKCalendar, error: Error?)
/** /**
A delegation method that is executed when a new reminder is created. A delegation method that is executed when a new reminder is created.
- Parameter event: A reference to the Reminders. - Parameter events: A reference to the Reminders.
- Parameter calendar: An optional reference to the reminder created. - Parameter calendar: An optional reference to the reminder created.
- Parameter error: An optional error if the reminder failed to be created. - Parameter error: An optional error if the reminder failed to be created.
*/ */
@objc @objc
optional func event(event: Event, createdReminders reminder: EKReminder?, error: Error?) optional func events(events: Events, createdReminders reminder: EKReminder?, error: Error?)
/** /**
A delegation method that is executed when a new Reminders list is created A delegation method that is executed when a new Reminders list is created
- Parameter event: A reference to the Reminders. - Parameter events: A reference to the Reminders.
- Parameter deleted: A boolean describing if the operation succeeded or not. - Parameter deleted: A boolean describing if the operation succeeded or not.
- Parameter error: An optional error if the reminder failed to be removed. - Parameter error: An optional error if the reminder failed to be removed.
*/ */
@objc @objc
optional func event(event: Event, removedReminders reminder: EKReminder, error: Error?) optional func events(events: Events, removedReminders reminder: EKReminder, error: Error?)
} }
@objc(Event) @objc(Events)
open class Event: NSObject { open class Events: NSObject {
/// A reference to the eventStore. /// A reference to the eventsStore.
fileprivate let store = EKEventStore() fileprivate let eventStore = EKEventStore()
/// The current EventReminderAuthorizationStatus. /// The current EventsReminderAuthorizationStatus.
open var authorizationStatus: EventReminderAuthorizationStatus { open var authorizationStatusForReminders: EventsReminderAuthorizationStatus {
return .authorized == EKEventStore.authorizationStatus(for: .reminder) ? .authorized : .denied return .authorized == EKEventStore.authorizationStatus(for: .reminder) ? .authorized : .denied
} }
/// A reference to a RemindersDelegate. /// A reference to a EventsDelegate.
open weak var delegate: EventDelegate? open weak var delegate: EventsDelegate?
open func requestRemindersAuthorization(_ completion: ((EventReminderAuthorizationStatus) -> Void)? = nil) { open func requestAuthorizationForReminders(_ completion: ((EventsReminderAuthorizationStatus) -> Void)? = nil) {
store.requestAccess(to: .reminder) { [weak self, completion = completion] (isAuthorized, _) in eventStore.requestAccess(to: .reminder) { [weak self, completion = completion] (isAuthorized, _) in
DispatchQueue.main.async { [weak self, completion = completion] in DispatchQueue.main.async { [weak self, completion = completion] in
guard let s = self else { guard let s = self else {
return return
...@@ -127,63 +127,63 @@ open class Event: NSObject { ...@@ -127,63 +127,63 @@ open class Event: NSObject {
guard isAuthorized else { guard isAuthorized else {
completion?(.denied) completion?(.denied)
s.delegate?.event?(event: s, status: .denied) s.delegate?.events?(events: s, status: .denied)
s.delegate?.event?(denied: s) s.delegate?.eventsDeniedForReminders?(events: s)
return return
} }
completion?(.authorized) completion?(.authorized)
s.delegate?.event?(event: s, status: .authorized) s.delegate?.events?(events: s, status: .authorized)
s.delegate?.event?(authorized: s) s.delegate?.eventsAuthorizedForReminders?(events: s)
} }
} }
} }
} }
extension Event { extension Events {
/** /**
Creates a predicate for the event Array of calendars. Creates a predicate for the events Array of calendars.
- Parameter in calendars: An optional Array of EKCalendars. - Parameter in calendars: An optional Array of EKCalendars.
*/ */
open func predicateForReminders(in calendars: [EKCalendar]) -> NSPredicate { open func predicateForReminders(in calendars: [EKCalendar]) -> NSPredicate {
return store.predicateForReminders(in: calendars) return eventStore.predicateForReminders(in: calendars)
} }
/** /**
Creates a predicate for the event Array of calendars that Creates a predicate for the events Array of calendars that
are incomplete and have a given start and end date. are incomplete and have a given start and end date.
- Parameter starting: A Date. - Parameter starting: A Date.
- Parameter ending: A Date. - Parameter ending: A Date.
- Parameter calendars: An optional Array of [EKCalendar]. - Parameter calendars: An optional Array of [EKCalendar].
*/ */
open func predicateForIncompleteReminders(starting: Date, ending: Date, calendars: [EKCalendar]? = nil) -> NSPredicate { open func predicateForIncompleteReminders(starting: Date, ending: Date, calendars: [EKCalendar]? = nil) -> NSPredicate {
return store.predicateForIncompleteReminders(withDueDateStarting: starting, ending: ending, calendars: calendars) return eventStore.predicateForIncompleteReminders(withDueDateStarting: starting, ending: ending, calendars: calendars)
} }
/** /**
Creates a predicate for the event Array of calendars that Creates a predicate for the events Array of calendars that
are completed and have a given start and end date. are completed and have a given start and end date.
- Parameter starting: A Date. - Parameter starting: A Date.
- Parameter ending: A Date. - Parameter ending: A Date.
- Parameter calendars: An optional Array of [EKCalendar]. - Parameter calendars: An optional Array of [EKCalendar].
*/ */
open func predicateForCompletedReminders(starting: Date, ending: Date, calendars: [EKCalendar]? = nil) -> NSPredicate { open func predicateForCompletedReminders(starting: Date, ending: Date, calendars: [EKCalendar]? = nil) -> NSPredicate {
return store.predicateForCompletedReminders(withCompletionDateStarting: starting, ending: ending, calendars: calendars) return eventStore.predicateForCompletedReminders(withCompletionDateStarting: starting, ending: ending, calendars: calendars)
} }
} }
extension Event { extension Events {
/** /**
A method for retrieving reminder calendars in alphabetical order. A method for retrieving reminder calendars in alphabetical order.
- Parameter completion: A completion call back - Parameter completion: A completion call back
*/ */
open func calendarsForReminders(completion: @escaping ([EKCalendar]) -> Void) { open func fetchCalendarsForReminders(_ completion: @escaping ([EKCalendar]) -> Void) {
DispatchQueue.global(qos: .default).async { [weak self, completion = completion] in DispatchQueue.global(qos: .default).async { [weak self, completion = completion] in
guard let s = self else { guard let s = self else {
return return
} }
let calendar = s.store.calendars(for: .reminder).sorted(by: { (a, b) -> Bool in let calendar = s.eventStore.calendars(for: .reminder).sorted(by: { (a, b) -> Bool in
return a.title < b.title return a.title < b.title
}) })
...@@ -197,66 +197,66 @@ extension Event { ...@@ -197,66 +197,66 @@ extension Event {
A method for retrieving events with a predicate in date sorted order. A method for retrieving events with a predicate in date sorted order.
- Parameter predicate: A NSPredicate. - Parameter predicate: A NSPredicate.
- Parameter completion: A completion call back. - Parameter completion: A completion call back.
- Returns: A fetch event request identifier. - Returns: A fetch events request identifier.
*/ */
@discardableResult @discardableResult
open func reminders(matching predicate: NSPredicate, completion: @escaping ([EKReminder]) -> Void) -> Any { open func fetchReminders(matching predicate: NSPredicate, completion: @escaping ([EKReminder]) -> Void) -> Any {
return store.fetchReminders(matching: predicate, completion: { [completion = completion] (event) in return eventStore.fetchReminders(matching: predicate, completion: { [completion = completion] (events) in
DispatchQueue.main.async { [completion = completion] in DispatchQueue.main.async { [completion = completion] in
completion(event ?? []) completion(events ?? [])
} }
}) })
} }
/** /**
Fetch all the event in a given Array of calendars. Fetch all the events in a given Array of calendars.
- Parameter in calendars: An Array of EKCalendars. - Parameter in calendars: An Array of EKCalendars.
- Parameter completion: A completion call back. - Parameter completion: A completion call back.
- Returns: A fetch event request identifier. - Returns: A fetch events request identifier.
*/ */
@discardableResult @discardableResult
open func reminders(in calendars: [EKCalendar], completion: @escaping ([EKReminder]) -> Void) -> Any { open func fetchReminders(in calendars: [EKCalendar], completion: @escaping ([EKReminder]) -> Void) -> Any {
return reminders(matching: predicateForReminders(in: calendars), completion: completion) return fetchReminders(matching: predicateForReminders(in: calendars), completion: completion)
} }
/** /**
Fetch all the event in a given Array of calendars that Fetch all the events in a given Array of calendars that
are incomplete, given a start and end date. are incomplete, given a start and end date.
- Parameter starting: A Date. - Parameter starting: A Date.
- Parameter ending: A Date. - Parameter ending: A Date.
- Parameter calendars: An Array of EKCalendars. - Parameter calendars: An Array of EKCalendars.
- Parameter completion: A completion call back. - Parameter completion: A completion call back.
- Returns: A fetch event request identifier. - Returns: A fetch events request identifier.
*/ */
@discardableResult @discardableResult
open func incompleteReminders(starting: Date, ending: Date, calendars: [EKCalendar]? = nil, completion: @escaping ([EKReminder]) -> Void) -> Any { open func fetchIncompleteReminders(starting: Date, ending: Date, calendars: [EKCalendar]? = nil, completion: @escaping ([EKReminder]) -> Void) -> Any {
return reminders(matching: predicateForIncompleteReminders(starting: starting, ending: ending, calendars: calendars), completion: completion) return fetchReminders(matching: predicateForIncompleteReminders(starting: starting, ending: ending, calendars: calendars), completion: completion)
} }
/** /**
Fetch all the event in a given Array of calendars that Fetch all the events in a given Array of calendars that
are completed, given a start and end date. are completed, given a start and end date.
- Parameter starting: A Date. - Parameter starting: A Date.
- Parameter ending: A Date. - Parameter ending: A Date.
- Parameter calendars: An Array of EKCalendars. - Parameter calendars: An Array of EKCalendars.
- Parameter completion: A completion call back. - Parameter completion: A completion call back.
- Returns: A fetch event request identifier. - Returns: A fetch events request identifier.
*/ */
@discardableResult @discardableResult
open func completedReminders(starting: Date, ending: Date, calendars: [EKCalendar]? = nil, completion: @escaping ([EKReminder]) -> Void) -> Any { open func fetchCompletedReminders(starting: Date, ending: Date, calendars: [EKCalendar]? = nil, completion: @escaping ([EKReminder]) -> Void) -> Any {
return reminders(matching: predicateForCompletedReminders(starting: starting, ending: ending, calendars: calendars), completion: completion) return fetchReminders(matching: predicateForCompletedReminders(starting: starting, ending: ending, calendars: calendars), completion: completion)
} }
/** /**
Cancels an active event request. Cancels an active events request.
- Parameter _ identifier: An identifier. - Parameter _ identifier: An identifier.
*/ */
open func cancel(_ identifier: Any) { open func cancelFetchRequest(_ identifier: Any) {
store.cancelFetchRequest(identifier) eventStore.cancelFetchRequest(identifier)
} }
} }
extension Event { extension Events {
/** /**
A method for creating new Reminders calendar. A method for creating new Reminders calendar.
- Parameter calendar title: the name of the list. - Parameter calendar title: the name of the list.
...@@ -268,16 +268,16 @@ extension Event { ...@@ -268,16 +268,16 @@ extension Event {
return return
} }
let calendar = EKCalendar(for: .reminder, eventStore: s.store) let calendar = EKCalendar(for: .reminder, eventStore: s.eventStore)
calendar.title = title calendar.title = title
calendar.source = s.store.defaultCalendarForNewReminders().source calendar.source = s.eventStore.defaultCalendarForNewReminders().source
var success = false var success = false
var error: Error? var error: Error?
do { do {
try s.store.saveCalendar(calendar, commit: true) try s.eventStore.saveCalendar(calendar, commit: true)
success = true success = true
} catch let e { } catch let e {
error = e error = e
...@@ -289,7 +289,7 @@ extension Event { ...@@ -289,7 +289,7 @@ extension Event {
} }
completion?(success ? calendar : nil, error) completion?(success ? calendar : nil, error)
s.delegate?.event?(event: s, createdCalendar: success ? calendar : nil, error: error) s.delegate?.events?(events: s, createdCalendar: success ? calendar : nil, error: error)
} }
} }
} }
...@@ -308,18 +308,18 @@ extension Event { ...@@ -308,18 +308,18 @@ extension Event {
var success = false var success = false
var error: Error? var error: Error?
guard let calendar = s.store.calendar(withIdentifier: identifier) else { guard let calendar = s.eventStore.calendar(withIdentifier: identifier) else {
var userInfo = [String: Any]() var userInfo = [String: Any]()
userInfo[NSLocalizedDescriptionKey] = "[Material Error: Cannot fix remove calendar with identifier \(identifier).]" userInfo[NSLocalizedDescriptionKey] = "[Material Error: Cannot remove calendar with identifier \(identifier).]"
userInfo[NSLocalizedFailureReasonErrorKey] = "[Material Error: Cannot fix remove calendar with identifier \(identifier).]" userInfo[NSLocalizedFailureReasonErrorKey] = "[Material Error: Cannot remove calendar with identifier \(identifier).]"
error = NSError(domain: "com.cosmicmind.material.event", code: 0001, userInfo: userInfo) error = NSError(domain: "com.cosmicmind.material.events", code: 0001, userInfo: userInfo)
completion?(success, error) completion?(success, error)
return return
} }
do { do {
try s.store.removeCalendar(calendar, commit: true) try s.eventStore.removeCalendar(calendar, commit: true)
success = true success = true
} catch let e { } catch let e {
error = e error = e
...@@ -331,38 +331,38 @@ extension Event { ...@@ -331,38 +331,38 @@ extension Event {
} }
completion?(success, error) completion?(success, error)
s.delegate?.event?(event: s, removedCalendar: calendar, error: error) s.delegate?.events?(events: s, removedCalendar: calendar, error: error)
} }
} }
} }
} }
extension Event { extension Events {
// FIX ME: Should we use the calendar identifier here instead of the title for finding the right cal? // FIX ME: Should we use the calendar identifier here instead of the title for finding the right cal?
/** /**
A method for adding a new reminder to an optionally existing list. A method for adding a new reminder to an optionally existing list.
if the list does not exist it will be added to the default event list. if the list does not exist it will be added to the default events list.
- Parameter completion: optional A completion call back - Parameter completion: optional A completion call back
*/ */
open func createReminder(title: String, calendar: EKCalendar, startDateComponents: DateComponents? = nil, dueDateComponents: DateComponents? = nil, priority: EventReminderPriority? = .none, notes: String?, completion: ((EKReminder?, Error?) -> Void)? = nil) { open func createReminder(title: String, calendar: EKCalendar, startDateComponents: DateComponents? = nil, dueDateComponents: DateComponents? = nil, priority: EventsReminderPriority? = .none, notes: String?, completion: ((EKReminder?, Error?) -> Void)? = nil) {
DispatchQueue.global(qos: .default).async { [weak self, calendar = calendar, completion = completion] in DispatchQueue.global(qos: .default).async { [weak self, calendar = calendar, completion = completion] in
guard let s = self else { guard let s = self else {
return return
} }
let reminder = EKReminder(eventStore: s.store) let reminder = EKReminder(eventStore: s.eventStore)
reminder.title = title reminder.title = title
reminder.calendar = calendar reminder.calendar = calendar
reminder.startDateComponents = startDateComponents reminder.startDateComponents = startDateComponents
reminder.dueDateComponents = dueDateComponents reminder.dueDateComponents = dueDateComponents
reminder.priority = priority?.rawValue ?? EventReminderPriority.none.rawValue reminder.priority = priority?.rawValue ?? EventsReminderPriority.none.rawValue
reminder.notes = notes reminder.notes = notes
var success = false var success = false
var error: Error? var error: Error?
do { do {
try s.store.save(reminder, commit: true) try s.eventStore.save(reminder, commit: true)
success = true success = true
} catch let e { } catch let e {
error = e error = e
...@@ -374,7 +374,7 @@ extension Event { ...@@ -374,7 +374,7 @@ extension Event {
} }
completion?(success ? reminder : nil, error) completion?(success ? reminder : nil, error)
s.delegate?.event?(event: s, createdReminders: success ? reminder : nil, error: error) s.delegate?.events?(events: s, createdReminders: success ? reminder : nil, error: error)
} }
} }
} }
...@@ -393,18 +393,18 @@ extension Event { ...@@ -393,18 +393,18 @@ extension Event {
var success = false var success = false
var error: Error? var error: Error?
guard let reminder = s.store.calendarItem(withIdentifier: identifier) as? EKReminder else { guard let reminder = s.eventStore.calendarItem(withIdentifier: identifier) as? EKReminder else {
var userInfo = [String: Any]() var userInfo = [String: Any]()
userInfo[NSLocalizedDescriptionKey] = "[Material Error: Cannot fix remove calendar with identifier \(identifier).]" userInfo[NSLocalizedDescriptionKey] = "[Material Error: Cannot remove calendar with identifier \(identifier).]"
userInfo[NSLocalizedFailureReasonErrorKey] = "[Material Error: Cannot fix remove calendar with identifier \(identifier).]" userInfo[NSLocalizedFailureReasonErrorKey] = "[Material Error: Cannot remove calendar with identifier \(identifier).]"
error = NSError(domain: "com.cosmicmind.material.event", code: 0001, userInfo: userInfo) error = NSError(domain: "com.cosmicmind.material.events", code: 0001, userInfo: userInfo)
completion?(success, error) completion?(success, error)
return return
} }
do { do {
try s.store.remove(reminder, commit: true) try s.eventStore.remove(reminder, commit: true)
success = true success = true
} catch let e { } catch let e {
error = e error = e
...@@ -416,7 +416,7 @@ extension Event { ...@@ -416,7 +416,7 @@ extension Event {
} }
completion?(success, error) completion?(success, error)
s.delegate?.event?(event: s, removedReminders: reminder, error: error) s.delegate?.events?(events: s, removedReminders: reminder, error: error)
} }
} }
} }
......
...@@ -32,15 +32,15 @@ import UIKit ...@@ -32,15 +32,15 @@ import UIKit
extension UIViewController { extension UIViewController {
/** /**
A convenience property that provides access to the EventController. A convenience property that provides access to the EventsController.
This is the recommended method of accessing the EventController This is the recommended method of accessing the EventsController
through child UIViewControllers. through child UIViewControllers.
*/ */
public var eventController: EventController? { public var eventsController: EventsController? {
var viewController: UIViewController? = self var viewController: UIViewController? = self
while nil != viewController { while nil != viewController {
if viewController is EventController { if viewController is EventsController {
return viewController as? EventController return viewController as? EventsController
} }
viewController = viewController?.parent viewController = viewController?.parent
} }
...@@ -48,9 +48,9 @@ extension UIViewController { ...@@ -48,9 +48,9 @@ extension UIViewController {
} }
} }
open class EventController: UIViewController { open class EventsController: UIViewController {
/// A reference to an Event instance. /// A reference to an Events instance.
open let event = Event() open let events = Events()
open override func viewDidLoad() { open override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
...@@ -68,15 +68,15 @@ open class EventController: UIViewController { ...@@ -68,15 +68,15 @@ open class EventController: UIViewController {
view.clipsToBounds = true view.clipsToBounds = true
view.backgroundColor = .white view.backgroundColor = .white
view.contentScaleFactor = Screen.scale view.contentScaleFactor = Screen.scale
prepareEvent() prepareEvents()
} }
} }
extension EventController { extension EventsController {
/// Prepares the event instance. /// Prepares the events instance.
fileprivate func prepareEvent() { fileprivate func prepareEvents() {
event.delegate = self events.delegate = self
} }
} }
extension EventController: EventDelegate {} extension EventsController: EventsDelegate {}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment