Commit ff3a3716 by Daniel Dahan

development: renamed Reminders to Event

parent 4b41d8fb
...@@ -40,8 +40,8 @@ ...@@ -40,8 +40,8 @@
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 /* Reminders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9639526A1EC3882F004BA9DE /* Reminders.swift */; }; 9639526C1EC3882F004BA9DE /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9639526A1EC3882F004BA9DE /* Event.swift */; };
9639526D1EC3882F004BA9DE /* RemindersController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9639526B1EC3882F004BA9DE /* RemindersController.swift */; }; 9639526D1EC3882F004BA9DE /* EventController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9639526B1EC3882F004BA9DE /* EventController.swift */; };
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 +206,8 @@ ...@@ -206,8 +206,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 /* Reminders.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Reminders.swift; sourceTree = "<group>"; }; 9639526A1EC3882F004BA9DE /* Event.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Event.swift; sourceTree = "<group>"; };
9639526B1EC3882F004BA9DE /* RemindersController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RemindersController.swift; sourceTree = "<group>"; }; 9639526B1EC3882F004BA9DE /* EventController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventController.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,12 +394,13 @@ ...@@ -394,12 +394,13 @@
name = Products; name = Products;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
963952691EC3882F004BA9DE /* Events */ = { 963952691EC3882F004BA9DE /* Event */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
9639526A1EC3882F004BA9DE /* Reminders.swift */, 9639526A1EC3882F004BA9DE /* Event.swift */,
9639526B1EC3882F004BA9DE /* RemindersController.swift */, 9639526B1EC3882F004BA9DE /* EventController.swift */,
); );
name = Event;
path = Events; path = Events;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
...@@ -508,7 +509,7 @@ ...@@ -508,7 +509,7 @@
96328B9A1E05C135009A4C90 /* Data */, 96328B9A1E05C135009A4C90 /* Data */,
96BCB80B1CB410CC00C806FE /* Device */, 96BCB80B1CB410CC00C806FE /* Device */,
96230AB61D6A51FD00AF47DC /* Divider */, 96230AB61D6A51FD00AF47DC /* Divider */,
963952691EC3882F004BA9DE /* Events */, 963952691EC3882F004BA9DE /* Event */,
96BCB80A1CB410A100C806FE /* Extension */, 96BCB80A1CB410A100C806FE /* Extension */,
963FBF021D6696D0008F8512 /* FABMenu */, 963FBF021D6696D0008F8512 /* FABMenu */,
96BCB8071CB4101C00C806FE /* Font */, 96BCB8071CB4101C00C806FE /* Font */,
...@@ -935,11 +936,11 @@ ...@@ -935,11 +936,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 /* Reminders.swift in Sources */, 9639526C1EC3882F004BA9DE /* Event.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 /* RemindersController.swift in Sources */, 9639526D1EC3882F004BA9DE /* EventController.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(RemindersAuthorizationStatus) @objc(EventReminderAuthorizationStatus)
public enum RemindersAuthorizationStatus: Int { public enum EventReminderAuthorizationStatus: Int {
case authorized case authorized
case denied case denied
} }
@objc(RemindersPriority) @objc(EventReminderPriority)
public enum RemindersPriority: Int { public enum EventReminderPriority: Int {
case none case none
case high = 1 case high = 1
case medium = 5 case medium = 5
case low = 9 case low = 9
} }
@objc(RemindersDelegate) @objc(EventDelegate)
public protocol RemindersDelegate { public protocol EventDelegate {
/** /**
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 reminders: A reference to the Reminders. - Parameter event: A reference to the Reminders.
- Parameter status: A reference to the ReminderAuthorizationStatus. - Parameter status: A reference to the EventReminderAuthorizationStatus.
*/ */
@objc @objc
optional func reminders(reminders: Reminders, status: RemindersAuthorizationStatus) optional func event(event: Event, status: EventReminderAuthorizationStatus)
/** /**
A delegation method that is executed when reminders authorization is authorized. A delegation method that is executed when event authorization is authorized.
- Parameter reminders: A reference to the Reminders. - Parameter event: A reference to the Reminders.
*/ */
@objc @objc
optional func reminders(authorized reminders: Reminders) optional func event(authorized event: Event)
/** /**
A delegation method that is executed when reminders authorization is denied. A delegation method that is executed when event authorization is denied.
- Parameter reminders: A reference to the Reminders. - Parameter event: A reference to the Reminders.
*/ */
@objc @objc
optional func reminders(denied reminders: Reminders) optional func event(denied event: Event)
/** /**
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 reminders: A reference to the Reminders. - Parameter event: 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 reminders(reminders: Reminders, createdCalendar calendar: EKCalendar?, error: Error?) optional func event(event: Event, 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 reminders: A reference to the Reminder. - Parameter event: 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 reminders(reminders: Reminders, removedCalendar calendar: EKCalendar, error: Error?) optional func event(event: Event, 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 reminders: A reference to the Reminders. - Parameter event: 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 reminders(reminders: Reminders, createdReminder reminder: EKReminder?, error: Error?) optional func event(event: Event, 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 reminders: A reference to the Reminder. - Parameter event: 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 reminders(reminders: Reminders, removedReminder reminder: EKReminder, error: Error?) optional func event(event: Event, removedReminders reminder: EKReminder, error: Error?)
} }
@objc(Reminders) @objc(Event)
open class Reminders: NSObject { open class Event: NSObject {
/// A reference to the eventStore. /// A reference to the eventStore.
fileprivate let eventStore = EKEventStore() fileprivate let store = EKEventStore()
/// The current ReminderAuthorizationStatus. /// The current EventReminderAuthorizationStatus.
open var authorizationStatus: RemindersAuthorizationStatus { open var authorizationStatus: EventReminderAuthorizationStatus {
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 RemindersDelegate.
open weak var delegate: RemindersDelegate? open weak var delegate: EventDelegate?
open func requestAuthorization(_ completion: ((RemindersAuthorizationStatus) -> Void)? = nil) { open func requestRemindersAuthorization(_ completion: ((EventReminderAuthorizationStatus) -> Void)? = nil) {
eventStore.requestAccess(to: .reminder) { [weak self, completion = completion] (isAuthorized, _) in store.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 Reminders: NSObject { ...@@ -127,63 +127,63 @@ open class Reminders: NSObject {
guard isAuthorized else { guard isAuthorized else {
completion?(.denied) completion?(.denied)
s.delegate?.reminders?(reminders: s, status: .denied) s.delegate?.event?(event: s, status: .denied)
s.delegate?.reminders?(denied: s) s.delegate?.event?(denied: s)
return return
} }
completion?(.authorized) completion?(.authorized)
s.delegate?.reminders?(reminders: s, status: .authorized) s.delegate?.event?(event: s, status: .authorized)
s.delegate?.reminders?(authorized: s) s.delegate?.event?(authorized: s)
} }
} }
} }
} }
extension Reminders { extension Event {
/** /**
Creates a predicate for the reminders Array of calendars. Creates a predicate for the event 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 eventStore.predicateForReminders(in: calendars) return store.predicateForReminders(in: calendars)
} }
/** /**
Creates a predicate for the reminders Array of calendars that Creates a predicate for the event 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 eventStore.predicateForIncompleteReminders(withDueDateStarting: starting, ending: ending, calendars: calendars) return store.predicateForIncompleteReminders(withDueDateStarting: starting, ending: ending, calendars: calendars)
} }
/** /**
Creates a predicate for the reminders Array of calendars that Creates a predicate for the event 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 eventStore.predicateForCompletedReminders(withCompletionDateStarting: starting, ending: ending, calendars: calendars) return store.predicateForCompletedReminders(withCompletionDateStarting: starting, ending: ending, calendars: calendars)
} }
} }
extension Reminders { extension Event {
/** /**
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 calendars(completion: @escaping ([EKCalendar]) -> Void) { open func calendarsForReminders(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.eventStore.calendars(for: .reminder).sorted(by: { (a, b) -> Bool in let calendar = s.store.calendars(for: .reminder).sorted(by: { (a, b) -> Bool in
return a.title < b.title return a.title < b.title
}) })
...@@ -197,22 +197,22 @@ extension Reminders { ...@@ -197,22 +197,22 @@ extension Reminders {
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 reminders request identifier. - Returns: A fetch event request identifier.
*/ */
@discardableResult @discardableResult
open func reminders(matching predicate: NSPredicate, completion: @escaping ([EKReminder]) -> Void) -> Any { open func reminders(matching predicate: NSPredicate, completion: @escaping ([EKReminder]) -> Void) -> Any {
return eventStore.fetchReminders(matching: predicate, completion: { [completion = completion] (reminders) in return store.fetchReminders(matching: predicate, completion: { [completion = completion] (event) in
DispatchQueue.main.async { [completion = completion] in DispatchQueue.main.async { [completion = completion] in
completion(reminders ?? []) completion(event ?? [])
} }
}) })
} }
/** /**
Fetch all the reminders in a given Array of calendars. Fetch all the event 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 reminders request identifier. - Returns: A fetch event request identifier.
*/ */
@discardableResult @discardableResult
open func reminders(in calendars: [EKCalendar], completion: @escaping ([EKReminder]) -> Void) -> Any { open func reminders(in calendars: [EKCalendar], completion: @escaping ([EKReminder]) -> Void) -> Any {
...@@ -220,64 +220,64 @@ extension Reminders { ...@@ -220,64 +220,64 @@ extension Reminders {
} }
/** /**
Fetch all the reminders in a given Array of calendars that Fetch all the event 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 reminders request identifier. - Returns: A fetch event request identifier.
*/ */
@discardableResult @discardableResult
open func incomplete(starting: Date, ending: Date, calendars: [EKCalendar]? = nil, completion: @escaping ([EKReminder]) -> Void) -> Any { open func incompleteReminders(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 reminders(matching: predicateForIncompleteReminders(starting: starting, ending: ending, calendars: calendars), completion: completion)
} }
/** /**
Fetch all the reminders in a given Array of calendars that Fetch all the event 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 reminders request identifier. - Returns: A fetch event request identifier.
*/ */
@discardableResult @discardableResult
open func completed(starting: Date, ending: Date, calendars: [EKCalendar]? = nil, completion: @escaping ([EKReminder]) -> Void) -> Any { open func completedReminders(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 reminders(matching: predicateForCompletedReminders(starting: starting, ending: ending, calendars: calendars), completion: completion)
} }
/** /**
Cancels an active reminders request. Cancels an active event request.
- Parameter _ identifier: An identifier. - Parameter _ identifier: An identifier.
*/ */
open func cancel(_ identifier: Any) { open func cancel(_ identifier: Any) {
eventStore.cancelFetchRequest(identifier) store.cancelFetchRequest(identifier)
} }
} }
extension Reminders { extension Event {
/** /**
A method for creating new Reminder calendar. A method for creating new Reminders calendar.
- Parameter calendar title: the name of the list. - Parameter calendar title: the name of the list.
- Parameter completion: An optional completion call back. - Parameter completion: An optional completion call back.
*/ */
open func create(calendar title: String, completion: ((EKCalendar?, Error?) -> Void)? = nil) { open func createCalendarForReminders(title: String, completion: ((EKCalendar?, Error?) -> Void)? = nil) {
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 = EKCalendar(for: .reminder, eventStore: s.eventStore) let calendar = EKCalendar(for: .reminder, eventStore: s.store)
calendar.title = title calendar.title = title
calendar.source = s.eventStore.defaultCalendarForNewReminders().source calendar.source = s.store.defaultCalendarForNewReminders().source
var success = false var success = false
var error: Error? var error: Error?
do { do {
try s.eventStore.saveCalendar(calendar, commit: true) try s.store.saveCalendar(calendar, commit: true)
success = true success = true
} catch let e { } catch let e {
error = e error = e
...@@ -289,7 +289,7 @@ extension Reminders { ...@@ -289,7 +289,7 @@ extension Reminders {
} }
completion?(success ? calendar : nil, error) completion?(success ? calendar : nil, error)
s.delegate?.reminders?(reminders: s, createdCalendar: success ? calendar : nil, error: error) s.delegate?.event?(event: s, createdCalendar: success ? calendar : nil, error: error)
} }
} }
} }
...@@ -299,7 +299,7 @@ extension Reminders { ...@@ -299,7 +299,7 @@ extension Reminders {
- Parameter calendar identifier: The EKCalendar identifier String. - Parameter calendar identifier: The EKCalendar identifier String.
- Parameter completion: An optional completion call back. - Parameter completion: An optional completion call back.
*/ */
open func remove(calendar identifier: String, completion: ((Bool, Error?) -> Void)? = nil) { open func removeCalendar(identifier: String, completion: ((Bool, Error?) -> Void)? = nil) {
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
...@@ -308,18 +308,18 @@ extension Reminders { ...@@ -308,18 +308,18 @@ extension Reminders {
var success = false var success = false
var error: Error? var error: Error?
guard let calendar = s.eventStore.calendar(withIdentifier: identifier) else { guard let calendar = s.store.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 fix remove calendar with identifier \(identifier).]"
userInfo[NSLocalizedFailureReasonErrorKey] = "[Material Error: Cannot fix remove calendar with identifier \(identifier).]" userInfo[NSLocalizedFailureReasonErrorKey] = "[Material Error: Cannot fix remove calendar with identifier \(identifier).]"
error = NSError(domain: "com.cosmicmind.material.reminders", code: 0001, userInfo: userInfo) error = NSError(domain: "com.cosmicmind.material.event", code: 0001, userInfo: userInfo)
completion?(success, error) completion?(success, error)
return return
} }
do { do {
try s.eventStore.removeCalendar(calendar, commit: true) try s.store.removeCalendar(calendar, commit: true)
success = true success = true
} catch let e { } catch let e {
error = e error = e
...@@ -331,38 +331,38 @@ extension Reminders { ...@@ -331,38 +331,38 @@ extension Reminders {
} }
completion?(success, error) completion?(success, error)
s.delegate?.reminders?(reminders: s, removedCalendar: calendar, error: error) s.delegate?.event?(event: s, removedCalendar: calendar, error: error)
} }
} }
} }
} }
extension Reminders { extension Event {
// 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 reminders list. if the list does not exist it will be added to the default event list.
- Parameter completion: optional A completion call back - Parameter completion: optional A completion call back
*/ */
open func create(reminder title: String, calendar: EKCalendar, startDateComponents: DateComponents? = nil, dueDateComponents: DateComponents? = nil, priority: RemindersPriority? = .none, notes: String?, completion: ((EKReminder?, Error?) -> Void)? = nil) { open func createReminder(title: String, calendar: EKCalendar, startDateComponents: DateComponents? = nil, dueDateComponents: DateComponents? = nil, priority: EventReminderPriority? = .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.eventStore) let reminder = EKReminder(eventStore: s.store)
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 ?? RemindersPriority.none.rawValue reminder.priority = priority?.rawValue ?? EventReminderPriority.none.rawValue
reminder.notes = notes reminder.notes = notes
var success = false var success = false
var error: Error? var error: Error?
do { do {
try s.eventStore.save(reminder, commit: true) try s.store.save(reminder, commit: true)
success = true success = true
} catch let e { } catch let e {
error = e error = e
...@@ -374,17 +374,17 @@ extension Reminders { ...@@ -374,17 +374,17 @@ extension Reminders {
} }
completion?(success ? reminder : nil, error) completion?(success ? reminder : nil, error)
s.delegate?.reminders?(reminders: s, createdReminder: success ? reminder : nil, error: error) s.delegate?.event?(event: s, createdReminders: success ? reminder : nil, error: error)
} }
} }
} }
/** /**
A method for removing existing reminder, A method for removing existing reminder,
- Parameter reminder identifier: The EKReminder identifier String. - Parameter reminder identifier: The EKReminders identifier String.
- Parameter completion: An optional completion call back. - Parameter completion: An optional completion call back.
*/ */
open func remove(reminder identifier: String, completion: ((Bool, Error?) -> Void)? = nil) { open func removeReminder(identifier: String, completion: ((Bool, Error?) -> Void)? = nil) {
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
...@@ -393,18 +393,18 @@ extension Reminders { ...@@ -393,18 +393,18 @@ extension Reminders {
var success = false var success = false
var error: Error? var error: Error?
guard let reminder = s.eventStore.calendarItem(withIdentifier: identifier) as? EKReminder else { guard let reminder = s.store.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 fix remove calendar with identifier \(identifier).]"
userInfo[NSLocalizedFailureReasonErrorKey] = "[Material Error: Cannot fix remove calendar with identifier \(identifier).]" userInfo[NSLocalizedFailureReasonErrorKey] = "[Material Error: Cannot fix remove calendar with identifier \(identifier).]"
error = NSError(domain: "com.cosmicmind.material.reminders", code: 0001, userInfo: userInfo) error = NSError(domain: "com.cosmicmind.material.event", code: 0001, userInfo: userInfo)
completion?(success, error) completion?(success, error)
return return
} }
do { do {
try s.eventStore.remove(reminder, commit: true) try s.store.remove(reminder, commit: true)
success = true success = true
} catch let e { } catch let e {
error = e error = e
...@@ -416,7 +416,7 @@ extension Reminders { ...@@ -416,7 +416,7 @@ extension Reminders {
} }
completion?(success, error) completion?(success, error)
s.delegate?.reminders?(reminders: s, removedReminder: reminder, error: error) s.delegate?.event?(event: 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 RemindersController. A convenience property that provides access to the EventController.
This is the recommended method of accessing the RemindersController This is the recommended method of accessing the EventController
through child UIViewControllers. through child UIViewControllers.
*/ */
public var remindersController: RemindersController? { public var eventController: EventController? {
var viewController: UIViewController? = self var viewController: UIViewController? = self
while nil != viewController { while nil != viewController {
if viewController is RemindersController { if viewController is EventController {
return viewController as? RemindersController return viewController as? EventController
} }
viewController = viewController?.parent viewController = viewController?.parent
} }
...@@ -48,9 +48,9 @@ extension UIViewController { ...@@ -48,9 +48,9 @@ extension UIViewController {
} }
} }
open class RemindersController: UIViewController { open class EventController: UIViewController {
/// A reference to a Reminder. /// A reference to an Event instance.
open let reminders = Reminders() open let event = Event()
open override func viewDidLoad() { open override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
...@@ -68,15 +68,15 @@ open class RemindersController: UIViewController { ...@@ -68,15 +68,15 @@ open class RemindersController: UIViewController {
view.clipsToBounds = true view.clipsToBounds = true
view.backgroundColor = .white view.backgroundColor = .white
view.contentScaleFactor = Screen.scale view.contentScaleFactor = Screen.scale
prepareReminders() prepareEvent()
} }
} }
extension RemindersController { extension EventController {
/// Prepares the reminders. /// Prepares the event instance.
fileprivate func prepareReminders() { fileprivate func prepareEvent() {
reminders.delegate = self event.delegate = self
} }
} }
extension RemindersController: RemindersDelegate {} extension EventController: EventDelegate {}
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