From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001 From: 单军华 Date: Wed, 11 Jul 2018 10:47:42 +0800 Subject: [PATCH] 首次上传 --- screendisplay/screendisplay/Classes/Helpers/LMJEventTool.m | 242 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 242 insertions(+), 0 deletions(-) diff --git a/screendisplay/screendisplay/Classes/Helpers/LMJEventTool.m b/screendisplay/screendisplay/Classes/Helpers/LMJEventTool.m new file mode 100755 index 0000000..5a421d8 --- /dev/null +++ b/screendisplay/screendisplay/Classes/Helpers/LMJEventTool.m @@ -0,0 +1,242 @@ + +#import "LMJEventTool.h" + +@implementation LMJEventModel + +@end + + +#define yyyyMMddHHmm @"yyyy-MM-dd HH:mm" +#define SavedLMJEventsIdenti @"SavedLMJEventsIdenti" + +@interface LMJEventTool () + +@property (nonatomic, strong) EKEventStore *myEventStore; + +@end + + +@implementation LMJEventTool + + +static LMJEventTool *eventTool = nil; ++ (instancetype)sharedEventTool { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + eventTool = [[LMJEventTool alloc]init]; + }); + return eventTool; +} + + +/** + * ������������ + */ +- (void )createEventWithEventModel:(LMJEventModel *)eventModel { + + EKEventStore * eventStore = [[EKEventStore alloc]init]; + + if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) { + [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError * _Nullable error) { + + dispatch_async(dispatch_get_main_queue(), ^{ + if (error) { + NSLog(@"������������"); + } else if (!granted) { + NSLog(@"���������"); + } else { + + //��������������������������������������������������� + EKEvent *event = [self getEventWithEKEventModel:eventModel]; + + if (event == nil) { + + event = [EKEvent eventWithEventStore:self.myEventStore]; + event.title = eventModel.title; + event.location = eventModel.location; + + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; + [dateFormatter setDateFormat:yyyyMMddHHmm]; + + NSDate *startDate = [dateFormatter dateFromString:eventModel.startDateStr]; + NSDate *endDate = [dateFormatter dateFromString:eventModel.endDateStr]; + event.startDate = startDate; + event.endDate = endDate; + event.allDay = eventModel.allDay; + event.notes = eventModel.notes; + if (eventModel.alarmStr.length) { + NSInteger alarmTime = [self getAlarmWithStr:eventModel.alarmStr]; + if (alarmTime != 0) { + [event addAlarm:[EKAlarm alarmWithRelativeOffset:alarmTime]]; + } + } + + [event setCalendar:[self.myEventStore defaultCalendarForNewEvents]]; + NSError *err; + BOOL isSave; + isSave = [self.myEventStore saveEvent:event span:EKSpanThisEvent error:&err]; + if (isSave) { + NSString *identifer = event.eventIdentifier; + + NSMutableArray *tmpArr = [NSMutableArray arrayWithObject:identifer]; + + + NSMutableArray *arr = [[NSUserDefaults standardUserDefaults] objectForKey:SavedLMJEventsIdenti]; + if (!arr) { + [[NSUserDefaults standardUserDefaults] setObject:tmpArr forKey:SavedLMJEventsIdenti]; + } else { + [tmpArr addObjectsFromArray:arr]; + [[NSUserDefaults standardUserDefaults] setObject:tmpArr forKey:SavedLMJEventsIdenti]; + } + } + } + } + + }) ; + }]; + } +} + + + +/** + * ������������ + */ +- (BOOL)deleteEvent:(LMJEventModel *)eventModel { + + + BOOL isDeleted = NO; + NSString *eventIdentif; + + EKEvent * event = [self getEventWithEKEventModel:eventModel]; + eventIdentif = event.eventIdentifier; + NSError *err = nil; + isDeleted = [self.myEventStore removeEvent:event span:EKSpanThisEvent commit:YES error:&err]; + + if (isDeleted) { + [self clearIdentifier:eventIdentif]; + } + + return isDeleted; +} + +//������������������ NSUserDefaults ������ identifier +- (void)clearIdentifier:(NSString *)identifier { + NSMutableArray<NSString *> *savedArr = [[NSUserDefaults standardUserDefaults] objectForKey:SavedLMJEventsIdenti]; + + NSArray<NSString *> *newArray = [savedArr filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF != %@", identifier]]; + + [[NSUserDefaults standardUserDefaults] setObject:newArray forKey:SavedLMJEventsIdenti]; +} + +/** + * ������ identifier������ + */ +-(void)deleteWithIdentifier:(NSString *)identifier { + if (!self.myEventStore) { + self.myEventStore = [[EKEventStore alloc]init]; + } + + EKEvent *event = [self.myEventStore eventWithIdentifier:identifier]; + NSLog(@"eventtitle == %@", event.title); + + BOOL isDeleted = NO; + + NSError *err = nil; + isDeleted = [self.myEventStore removeEvent:event span:EKSpanThisEvent commit:YES error:&err]; + + if (isDeleted) { + [self clearIdentifier:event.eventIdentifier]; + } +} + +/** + * ��������������������� + */ +- (void)deleteAllCreatedEvent { + + NSMutableArray *savedArr = [[NSUserDefaults standardUserDefaults] objectForKey:SavedLMJEventsIdenti]; + + for (int i = 0; i < savedArr.count; i++) { + NSString *eventIdentifier = savedArr[i]; + [self deleteWithIdentifier:eventIdentifier]; + } + + [[NSUserDefaults standardUserDefaults] removeObjectForKey:SavedLMJEventsIdenti]; +} + +/** + * ������������������������������������ + */ +- (EKEvent *)getEventWithEKEventModel:(LMJEventModel *)eventModel { + + EKEventStore * eventStore = [[EKEventStore alloc]init]; + self.myEventStore = eventStore; + + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; + [dateFormatter setDateFormat:yyyyMMddHHmm]; + + NSDate *startDate = [dateFormatter dateFromString:eventModel.startDateStr]; + NSDate *endDate = [dateFormatter dateFromString:eventModel.endDateStr]; + + NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:@[[eventStore defaultCalendarForNewEvents]]]; + + NSArray *events = [eventStore eventsMatchingPredicate:predicate]; + + EKEvent *resultEvent = nil; + if (events) { + for (EKEvent *event in events) { + if ([self checkEvent:event sameWithEvent:eventModel]) { + resultEvent = event; + } + } + } + return resultEvent; +} + +/** + * ������������������������������ + */ +- (BOOL)checkEvent:(EKEvent *)event sameWithEvent:(LMJEventModel *)eventModel { + + NSInteger modelAlarm = [self getAlarmWithStr:eventModel.alarmStr]; + + EKAlarm *eventAlarm = event.alarms[0]; + NSInteger alarmInt = eventAlarm.relativeOffset; + + //��������������� ������ ��������� ������ ��������������� ������������������������ + if ([event.title isEqualToString: eventModel.title] && (modelAlarm == alarmInt)) { + return YES; + } else { + return NO; + } +} + +/** + * ������������ NSinteger + */ +- (NSInteger)getAlarmWithStr:(NSString *)alarmStr { + + NSInteger alarmTime; + if (alarmStr.length == 0) { + alarmTime = 0; + } else if ([alarmStr isEqualToString:@"���������"]) { + alarmTime = 0; + } else if ([alarmStr isEqualToString:@"1���������"]) { + alarmTime = 60.0 * -1.0f; + } else if ([alarmStr isEqualToString:@"10���������"]) { + alarmTime = 60.0 * -10.f; + } else if ([alarmStr isEqualToString:@"30���������"]) { + alarmTime = 60.0 * -30.f; + } else if ([alarmStr isEqualToString:@"1���������"]) { + alarmTime = 60.0 * -60.f; + } else if ([alarmStr isEqualToString:@"1������"]) { + alarmTime = 60.0 * - 60.f * 24; + }else { + alarmTime = 0; + } + return alarmTime; +} + + +@end -- Gitblit v1.8.0