Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
Material
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Dmitriy Stepanets
Material
Commits
4bd00a90
Unverified
Commit
4bd00a90
authored
May 14, 2017
by
Daniel Dahan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
development: renamed Event to Events and refined API
parent
ff3a3716
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
121 additions
and
114 deletions
+121
-114
Material.xcodeproj/project.pbxproj
+18
-11
Sources/iOS/Events/Events.swift
+89
-89
Sources/iOS/Events/EventsController.swift
+14
-14
No files found.
Material.xcodeproj/project.pbxproj
View file @
4bd00a90
...
@@ -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
/* Event
s.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
Events
.swift
;
sourceTree
=
"<group>"
;
};
9639526B1EC3882F004BA9DE
/* Event
Controller.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
Event
Controller.swift
;
sourceTree
=
"<group>"
;
};
9639526B1EC3882F004BA9DE
/* Event
sController.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
Events
Controller.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
/* Event
s
*/
=
{
isa
=
PBXGroup
;
isa
=
PBXGroup
;
children
=
(
children
=
(
9639526A1EC3882F004BA9DE
/* Event.swift */
,
9639526A1EC3882F004BA9DE
/* Event
s
.swift */
,
9639526B1EC3882F004BA9DE
/* EventController.swift */
,
9639526B1EC3882F004BA9DE
/* Event
s
Controller.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
/* Event
s
*/
,
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
/* Event
s
.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
/* Event
s
Controller.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 */
,
...
...
Sources/iOS/Events/Event.swift
→
Sources/iOS/Events/Event
s
.swift
View file @
4bd00a90
...
@@ -30,96 +30,96 @@
...
@@ -30,96 +30,96 @@
import
EventKit
import
EventKit
@objc(EventReminderAuthorizationStatus)
@objc(Event
s
ReminderAuthorizationStatus)
public
enum
EventReminderAuthorizationStatus
:
Int
{
public
enum
Event
s
ReminderAuthorizationStatus
:
Int
{
case
authorized
case
authorized
case
denied
case
denied
}
}
@objc(EventReminderPriority)
@objc(Event
s
ReminderPriority)
public
enum
EventReminderPriority
:
Int
{
public
enum
Event
s
ReminderPriority
:
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(Event
s
Delegate)
public
protocol
EventDelegate
{
public
protocol
Event
s
Delegate
{
/**
/**
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 event
s
: 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
:
Event
ReminderAuthorizationStatus
)
optional
func
event
s
(
events
:
Events
,
status
:
Events
ReminderAuthorizationStatus
)
/**
/**
A delegation method that is executed when event authorization is authorized.
A delegation method that is executed when event
s
authorization is authorized.
- Parameter event: A reference to the Reminders.
- Parameter event
s
: A reference to the Reminders.
*/
*/
@objc
@objc
optional
func
event
(
authorized
event
:
Event
)
optional
func
event
sAuthorizedForReminders
(
events
:
Events
)
/**
/**
A delegation method that is executed when event authorization is denied.
A delegation method that is executed when event
s
authorization is denied.
- Parameter event: A reference to the Reminders.
- Parameter event
s
: A reference to the Reminders.
*/
*/
@objc
@objc
optional
func
event
(
denied
event
:
Event
)
optional
func
event
sDeniedForReminders
(
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 event
s
: 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
event
s
(
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 event
s
: 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
event
s
(
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 event
s
: 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
event
s
(
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 event
s
: 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
event
s
(
events
:
Events
,
removedReminders
reminder
:
EKReminder
,
error
:
Error
?)
}
}
@objc(Event)
@objc(Event
s
)
open
class
Event
:
NSObject
{
open
class
Event
s
:
NSObject
{
/// A reference to the eventStore.
/// A reference to the event
s
Store.
fileprivate
let
s
tore
=
EKEventStore
()
fileprivate
let
eventS
tore
=
EKEventStore
()
/// The current EventReminderAuthorizationStatus.
/// The current Event
s
ReminderAuthorizationStatus.
open
var
authorizationStatus
:
Event
ReminderAuthorizationStatus
{
open
var
authorizationStatus
ForReminders
:
Events
ReminderAuthorizationStatus
{
return
.
authorized
==
EKEventStore
.
authorizationStatus
(
for
:
.
reminder
)
?
.
authorized
:
.
denied
return
.
authorized
==
EKEventStore
.
authorizationStatus
(
for
:
.
reminder
)
?
.
authorized
:
.
denied
}
}
/// A reference to a
Reminder
sDelegate.
/// A reference to a
Event
sDelegate.
open
weak
var
delegate
:
EventDelegate
?
open
weak
var
delegate
:
Event
s
Delegate
?
open
func
request
RemindersAuthorization
(
_
completion
:
((
Event
ReminderAuthorizationStatus
)
->
Void
)?
=
nil
)
{
open
func
request
AuthorizationForReminders
(
_
completion
:
((
Events
ReminderAuthorizationStatus
)
->
Void
)?
=
nil
)
{
s
tore
.
requestAccess
(
to
:
.
reminder
)
{
[
weak
self
,
completion
=
completion
]
(
isAuthorized
,
_
)
in
eventS
tore
.
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
?
.
event
s
?(
events
:
s
,
status
:
.
denied
)
s
.
delegate
?
.
event
?(
denied
:
s
)
s
.
delegate
?
.
event
sDeniedForReminders
?(
events
:
s
)
return
return
}
}
completion
?(
.
authorized
)
completion
?(
.
authorized
)
s
.
delegate
?
.
event
?(
event
:
s
,
status
:
.
authorized
)
s
.
delegate
?
.
event
s
?(
events
:
s
,
status
:
.
authorized
)
s
.
delegate
?
.
event
?(
authorized
:
s
)
s
.
delegate
?
.
event
sAuthorizedForReminders
?(
events
:
s
)
}
}
}
}
}
}
}
}
extension
Event
{
extension
Event
s
{
/**
/**
Creates a predicate for the event Array of calendars.
Creates a predicate for the event
s
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
s
tore
.
predicateForReminders
(
in
:
calendars
)
return
eventS
tore
.
predicateForReminders
(
in
:
calendars
)
}
}
/**
/**
Creates a predicate for the event Array of calendars that
Creates a predicate for the event
s
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
s
tore
.
predicateForIncompleteReminders
(
withDueDateStarting
:
starting
,
ending
:
ending
,
calendars
:
calendars
)
return
eventS
tore
.
predicateForIncompleteReminders
(
withDueDateStarting
:
starting
,
ending
:
ending
,
calendars
:
calendars
)
}
}
/**
/**
Creates a predicate for the event Array of calendars that
Creates a predicate for the event
s
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
s
tore
.
predicateForCompletedReminders
(
withCompletionDateStarting
:
starting
,
ending
:
ending
,
calendars
:
calendars
)
return
eventS
tore
.
predicateForCompletedReminders
(
withCompletionDateStarting
:
starting
,
ending
:
ending
,
calendars
:
calendars
)
}
}
}
}
extension
Event
{
extension
Event
s
{
/**
/**
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
.
s
tore
.
calendars
(
for
:
.
reminder
)
.
sorted
(
by
:
{
(
a
,
b
)
->
Bool
in
let
calendar
=
s
.
eventS
tore
.
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 event
s
request identifier.
*/
*/
@discardableResult
@discardableResult
open
func
r
eminders
(
matching
predicate
:
NSPredicate
,
completion
:
@escaping
([
EKReminder
])
->
Void
)
->
Any
{
open
func
fetchR
eminders
(
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
(
event
s
??
[])
}
}
})
})
}
}
/**
/**
Fetch all the event in a given Array of calendars.
Fetch all the event
s
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 event
s
request identifier.
*/
*/
@discardableResult
@discardableResult
open
func
r
eminders
(
in
calendars
:
[
EKCalendar
],
completion
:
@escaping
([
EKReminder
])
->
Void
)
->
Any
{
open
func
fetchR
eminders
(
in
calendars
:
[
EKCalendar
],
completion
:
@escaping
([
EKReminder
])
->
Void
)
->
Any
{
return
r
eminders
(
matching
:
predicateForReminders
(
in
:
calendars
),
completion
:
completion
)
return
fetchR
eminders
(
matching
:
predicateForReminders
(
in
:
calendars
),
completion
:
completion
)
}
}
/**
/**
Fetch all the event in a given Array of calendars that
Fetch all the event
s
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 event
s
request identifier.
*/
*/
@discardableResult
@discardableResult
open
func
i
ncompleteReminders
(
starting
:
Date
,
ending
:
Date
,
calendars
:
[
EKCalendar
]?
=
nil
,
completion
:
@escaping
([
EKReminder
])
->
Void
)
->
Any
{
open
func
fetchI
ncompleteReminders
(
starting
:
Date
,
ending
:
Date
,
calendars
:
[
EKCalendar
]?
=
nil
,
completion
:
@escaping
([
EKReminder
])
->
Void
)
->
Any
{
return
r
eminders
(
matching
:
predicateForIncompleteReminders
(
starting
:
starting
,
ending
:
ending
,
calendars
:
calendars
),
completion
:
completion
)
return
fetchR
eminders
(
matching
:
predicateForIncompleteReminders
(
starting
:
starting
,
ending
:
ending
,
calendars
:
calendars
),
completion
:
completion
)
}
}
/**
/**
Fetch all the event in a given Array of calendars that
Fetch all the event
s
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 event
s
request identifier.
*/
*/
@discardableResult
@discardableResult
open
func
c
ompletedReminders
(
starting
:
Date
,
ending
:
Date
,
calendars
:
[
EKCalendar
]?
=
nil
,
completion
:
@escaping
([
EKReminder
])
->
Void
)
->
Any
{
open
func
fetchC
ompletedReminders
(
starting
:
Date
,
ending
:
Date
,
calendars
:
[
EKCalendar
]?
=
nil
,
completion
:
@escaping
([
EKReminder
])
->
Void
)
->
Any
{
return
r
eminders
(
matching
:
predicateForCompletedReminders
(
starting
:
starting
,
ending
:
ending
,
calendars
:
calendars
),
completion
:
completion
)
return
fetchR
eminders
(
matching
:
predicateForCompletedReminders
(
starting
:
starting
,
ending
:
ending
,
calendars
:
calendars
),
completion
:
completion
)
}
}
/**
/**
Cancels an active event request.
Cancels an active event
s
request.
- Parameter _ identifier: An identifier.
- Parameter _ identifier: An identifier.
*/
*/
open
func
cancel
(
_
identifier
:
Any
)
{
open
func
cancel
FetchRequest
(
_
identifier
:
Any
)
{
s
tore
.
cancelFetchRequest
(
identifier
)
eventS
tore
.
cancelFetchRequest
(
identifier
)
}
}
}
}
extension
Event
{
extension
Event
s
{
/**
/**
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
.
s
tore
)
let
calendar
=
EKCalendar
(
for
:
.
reminder
,
eventStore
:
s
.
eventS
tore
)
calendar
.
title
=
title
calendar
.
title
=
title
calendar
.
source
=
s
.
s
tore
.
defaultCalendarForNewReminders
()
.
source
calendar
.
source
=
s
.
eventS
tore
.
defaultCalendarForNewReminders
()
.
source
var
success
=
false
var
success
=
false
var
error
:
Error
?
var
error
:
Error
?
do
{
do
{
try
s
.
s
tore
.
saveCalendar
(
calendar
,
commit
:
true
)
try
s
.
eventS
tore
.
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
?
.
event
s
?(
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
.
s
tore
.
calendar
(
withIdentifier
:
identifier
)
else
{
guard
let
calendar
=
s
.
eventS
tore
.
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.event
s
"
,
code
:
0001
,
userInfo
:
userInfo
)
completion
?(
success
,
error
)
completion
?(
success
,
error
)
return
return
}
}
do
{
do
{
try
s
.
s
tore
.
removeCalendar
(
calendar
,
commit
:
true
)
try
s
.
eventS
tore
.
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
?
.
event
s
?(
events
:
s
,
removedCalendar
:
calendar
,
error
:
error
)
}
}
}
}
}
}
}
}
extension
Event
{
extension
Event
s
{
// 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 event
s
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
:
Event
s
ReminderPriority
?
=
.
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
.
s
tore
)
let
reminder
=
EKReminder
(
eventStore
:
s
.
eventS
tore
)
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
??
Event
s
ReminderPriority
.
none
.
rawValue
reminder
.
notes
=
notes
reminder
.
notes
=
notes
var
success
=
false
var
success
=
false
var
error
:
Error
?
var
error
:
Error
?
do
{
do
{
try
s
.
s
tore
.
save
(
reminder
,
commit
:
true
)
try
s
.
eventS
tore
.
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
?
.
event
s
?(
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
.
s
tore
.
calendarItem
(
withIdentifier
:
identifier
)
as?
EKReminder
else
{
guard
let
reminder
=
s
.
eventS
tore
.
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.event
s
"
,
code
:
0001
,
userInfo
:
userInfo
)
completion
?(
success
,
error
)
completion
?(
success
,
error
)
return
return
}
}
do
{
do
{
try
s
.
s
tore
.
remove
(
reminder
,
commit
:
true
)
try
s
.
eventS
tore
.
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
?
.
event
s
?(
events
:
s
,
removedReminders
:
reminder
,
error
:
error
)
}
}
}
}
}
}
...
...
Sources/iOS/Events/EventController.swift
→
Sources/iOS/Events/Event
s
Controller.swift
View file @
4bd00a90
...
@@ -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 Event
s
Controller.
This is the recommended method of accessing the EventController
This is the recommended method of accessing the Event
s
Controller
through child UIViewControllers.
through child UIViewControllers.
*/
*/
public
var
event
Controller
:
Event
Controller
?
{
public
var
event
sController
:
Events
Controller
?
{
var
viewController
:
UIViewController
?
=
self
var
viewController
:
UIViewController
?
=
self
while
nil
!=
viewController
{
while
nil
!=
viewController
{
if
viewController
is
EventController
{
if
viewController
is
Event
s
Controller
{
return
viewController
as?
EventController
return
viewController
as?
Event
s
Controller
}
}
viewController
=
viewController
?
.
parent
viewController
=
viewController
?
.
parent
}
}
...
@@ -48,9 +48,9 @@ extension UIViewController {
...
@@ -48,9 +48,9 @@ extension UIViewController {
}
}
}
}
open
class
EventController
:
UIViewController
{
open
class
Event
s
Controller
:
UIViewController
{
/// A reference to an Event instance.
/// A reference to an Event
s
instance.
open
let
event
=
Event
()
open
let
event
s
=
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
()
prepareEvent
s
()
}
}
}
}
extension
EventController
{
extension
Event
s
Controller
{
/// Prepares the event instance.
/// Prepares the event
s
instance.
fileprivate
func
prepareEvent
()
{
fileprivate
func
prepareEvent
s
()
{
event
.
delegate
=
self
event
s
.
delegate
=
self
}
}
}
}
extension
Event
Controller
:
Event
Delegate
{}
extension
Event
sController
:
Events
Delegate
{}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment