Skip to content

Commit

Permalink
Fixed the calendar bug, changed iCal Parser
Browse files Browse the repository at this point in the history
  • Loading branch information
= committed May 3, 2014
1 parent 1b43683 commit 0ca1ea6
Show file tree
Hide file tree
Showing 17 changed files with 1,670 additions and 127 deletions.
6 changes: 3 additions & 3 deletions Files/AnimalQuestionsTableView.m
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,14 @@ - (id)initWithStyle:(UITableViewStyle)style forAnimal:(Animal*)anAnimal
self.tableView.backgroundColor = UIColorFromRGB(0xF8EDDF);

// Whether the built-in pull-to-refresh is enabled
self.pullToRefreshEnabled = YES;
self.pullToRefreshEnabled = NO;

self.loadingViewEnabled = NO;
// Whether the built-in pagination is enabled
self.paginationEnabled = YES;

// The number of objects to show per page
self.objectsPerPage = 6;
self.objectsPerPage = 3;

askingQuestion = NO;

Expand Down Expand Up @@ -104,7 +104,7 @@ - (PFQuery *)queryForTable {

[query orderByDescending:@"createdAt"];
if(self.animal!=nil){
[query whereKey:@"animal_en_name" equalTo:self.animal.nameEn];
[query whereKey:@"animal_en_name" equalTo:self.animal.nameEn];
}

NSString *key = [Helper appLang]==kHebrew? @"visible":@"visible_en";
Expand Down
2 changes: 2 additions & 0 deletions Files/Event.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@

+(EventTypes)eventTypeFromString:(NSString*)string;
+(void)parseEventsFromArray:(NSArray*)events forClendarName:(NSString*)calendarName completion:(void (^)(BOOL finished))completion;
+(NSString*)localStringFromDoubleLangString:(NSString*)title;
+(NSDate*)finalDateFromGeneratedStartDate:(NSDate*)sDate originalDate:(NSDate*)originalDate;
-(NSString*)dateToStringForSectionTitels;
-(NSString*)timeAsString;
-(NSString*)dateAsString;
Expand Down
10 changes: 4 additions & 6 deletions Files/Event.m
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
#import "CGICalendar.h"

@interface Event(Private)

@end

@implementation Event
Expand All @@ -39,6 +38,7 @@ @implementation Event
#define REAPET_UNTIL @"UNTIL"
#define REPEAT_COUNT @"COUNT"


+(void)createEvent:(CGICalendarComponent*)eventComponent calendarName:(NSString*)calendarName startDate:(NSDate*)startDate isReapeater:(BOOL)reapeter{
//set the start date
NSDate * sDate = [self dateFromICSString:[[eventComponent propertyForName:START_DATE] value]];
Expand Down Expand Up @@ -76,6 +76,7 @@ +(void)createEvent:(CGICalendarComponent*)eventComponent calendarName:(NSString*

}


+(void)parseEventsFromArray:(NSArray*)events forClendarName:(NSString*)calendarName completion:(void (^)(BOOL finished))completion{
NSInteger counter =0;
for (CGICalendarComponent *eventComp in events) {
Expand Down Expand Up @@ -273,7 +274,6 @@ +(NSDate*)nextDayInWeekForDay:(NSInteger)dayInteger{

+(NSDate*)finalDateFromGeneratedStartDate:(NSDate*)sDate originalDate:(NSDate*)originalDate{


NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *weekdayComponents = [[NSDateComponents alloc] init];
Expand Down Expand Up @@ -342,7 +342,7 @@ -(NSString*)timeAsString{

NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
[timeFormat setDateFormat:@"HH:mm"];

NSString *theTime = [timeFormat stringFromDate:startDate];
return theTime;

Expand All @@ -352,14 +352,14 @@ -(NSString*)dateAsString{

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd-MM-yy"];
[dateFormat setTimeZone:[NSTimeZone localTimeZone]];

NSString *theDate = [dateFormat stringFromDate:startDate];
return theDate;

}



+(EventTypes)eventTypeFromString:(NSString*)string{
EventTypes returnedType = 0;
if ([string isEqualToString:@"Feeding"]) {
Expand Down Expand Up @@ -472,8 +472,6 @@ -(NSString*)dateToStringForSectionTitels{
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:[Helper appLang]==kHebrew?@"he":@"en"]];
[dateFormatter setDateStyle:NSDateFormatterFullStyle];
formattedDateString = [dateFormatter stringFromDate:localDate];



return formattedDateString;
}
Expand Down
8 changes: 1 addition & 7 deletions Files/EventTableViewCell.m
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,6 @@ - (void)setAnEvent:(Event *)anEvent{
//get the localized title from the string

NSString * title = [Helper languageSelectedStringForKey:event.typeString];

self.labelView.text = title;
self.detailLableView.text = [event title];
self.locationLableView.text = [event location];
Expand All @@ -179,12 +178,7 @@ - (void)setAnEvent:(Event *)anEvent{

[self.cellImageView setImage:cellImage];

// Set the colors for the gradient layer.
CAGradientLayer *gradientLayer_ = (CAGradientLayer *)self.layer;
[gradientLayer_ setContentsScale:[[UIScreen mainScreen] scale]];
NSArray *cellColors = [event colors];
gradientLayer_.colors =@[cellColors[0],
cellColors[1]];



[labelView setNeedsDisplay];
Expand Down
16 changes: 16 additions & 0 deletions Files/EventsController.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//
// EventsController.h
// JerusalemBiblicalZoo
//
// Created by shani hajbi on 5/2/14.
//
//

#import <Foundation/Foundation.h>
typedef void (^requestCompletioHandler)(BOOL success);

@interface EventsController : NSObject

+ (id)sharedController;
- (void)fetchEventsWithCompletionHandler:(requestCompletioHandler)handler;
@end
164 changes: 164 additions & 0 deletions Files/EventsController.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
//
// EventsController.m
// JerusalemBiblicalZoo
//
// Created by shani hajbi on 5/2/14.
//
//

#import "EventsController.h"
#import "MXLCalendarManager.h"
#import "Event.h"
#import "NSDate-Utilities.h"


@interface EventsController()
@property (nonatomic,strong) MXLCalendarManager *calendarManager;
@property (nonatomic,strong) NSArray *calendarURLs;
@property (nonatomic,strong) NSDictionary *calendarsName;

@property (nonatomic,strong) NSTimer *timeout;
@property (nonatomic, copy) requestCompletioHandler completionHandler;


@end

@implementation EventsController

+ (id)sharedController {
static EventsController *sharedController = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedController = [[self alloc] init];
});
return sharedController;
}

- (id)init {
if (self = [super init]) {

}
return self;
}

- (NSArray*)calendarURLs
{
if (!_calendarURLs) {
_calendarURLs = @[
@{@"url":@"https://www.google.com/calendar/ical/h6e63v9e90ekuv35jbhh8qmgbc%40group.calendar.google.com/public/basic.ics",@"name":@"Feeding"},
@{@"url":@"https://www.google.com/calendar/ical/r3mos73aqqvud1du3bn42mpsmo%40group.calendar.google.com/public/basic.ics",@"name":@"Music"},
@{@"url":@"https://www.google.com/calendar/ical/hvft2h1m5dpgui1o8lgueoemto%40group.calendar.google.com/public/basic.ics",@"name":@"Show"},
@{@"url":@"https://www.google.com/calendar/ical/36f9lqe80tg3f23peaid7m4asc%40group.calendar.google.com/public/basic.ics",@"name":@"Talk"},
@{@"url":@"https://www.google.com/calendar/ical/k2nk1v47vt0dk8l0pkufdigrug%40group.calendar.google.com/public/basic.ics",@"name":@"Exhibition"},
@{@"url":@"https://www.google.com/calendar/ical/biblicalzoo%40gmail.com/public/basic.ics",@"name":@"Feeding"},
@{@"url":@"https://www.google.com/calendar/ical/eh8h86b49r6hjp9nc31orrjpb8%40group.calendar.google.com/public/basic.ics",@"name":@"Lion"},//lion
];
}

return _calendarURLs;
}

- (MXLCalendarManager*)calendarManager
{
if(!_calendarManager)
{
_calendarManager = [[MXLCalendarManager alloc] init];
}
return _calendarManager;
}

- (void)startTimeoutTimer
{
self.timeout = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(stopRequest:) userInfo:nil repeats:NO];
}

- (void)fetchEventsWithCompletionHandler:(requestCompletioHandler)handler
{
self.completionHandler = handler;
[Event truncateAll];
[[NSManagedObjectContext defaultContext] saveInBackgroundErrorHandler:^(NSError *error) {
if (self.completionHandler)
{
self.completionHandler(NO);
}
} completion:^{
[self startTimeoutTimer];
__block NSUInteger counter = 0;
[self.calendarURLs enumerateObjectsUsingBlock:^(NSDictionary* obj, NSUInteger idx, BOOL *stop) {
NSURL *url = [NSURL URLWithString:obj[@"url"]];
[self.calendarManager scanICSFileAtRemoteURL:url withCompletionHandler:^(MXLCalendar *calendar, NSError *error) {
[self storeWeeklyEventsForCalendar:calendar calendarName:obj[@"name"] completionBlock:^{
counter += 1;
if (counter == _calendarURLs.count) {
[self.timeout invalidate];
if (self.completionHandler) {
self.completionHandler(YES);
}

}

}];
}];

}];
}];
}

- (void)stopRequest:(NSTimer*)timer
{
[timer invalidate];
if (self.completionHandler)
{
self.completionHandler(NO);
self.completionHandler = nil;
}
}


- (void)storeWeeklyEventsForCalendar:(MXLCalendar*)calendar calendarName:(NSString*)calendarName completionBlock:(void(^)(void))completionBlock
{

// Run on a background thread

// If the day hasn't already loaded events...
NSUInteger dayNumber = 0;
while (dayNumber < 7) {
NSDate *date = [NSDate dateWithDaysFromNow:dayNumber];
if (![calendar hasLoadedAllEventsForDate:date]) {
// Loop through each event and check whether it occurs on the selected date
for (MXLCalendarEvent *event in calendar.events) {
// If it does, save it for the date
if ([event checkDate:date]) {
[calendar addEvent:event onDate:date];
}
}
// Set that the calendar HAS loaded all the events for today
[calendar loadedAllEventsForDate:date];
}

// load up the events for today
NSMutableArray * arr = [calendar eventsForDate:date];
[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
MXLCalendarEvent *calendarEvent = (MXLCalendarEvent*)obj;
Event *event = [Event createInContext:[NSManagedObjectContext defaultContext]];
event.startDate = [Event finalDateFromGeneratedStartDate:date originalDate:calendarEvent.eventStartDate];
event.eventDescription = [Event localStringFromDoubleLangString:calendarEvent.eventDescription];
event.location = [Event localStringFromDoubleLangString:calendarEvent.eventLocation];
event.title = [Event localStringFromDoubleLangString:calendarEvent.eventSummary];
event.type = @([Event eventTypeFromString:calendarName]);
event.typeString = calendarName;


}];

dayNumber ++;
}
completionBlock();
}






@end
Loading

0 comments on commit 0ca1ea6

Please sign in to comment.