I have a schedule cache stored in an NSDictionary
.
For the example below, I have a schedule time of January 13, 20120 2:00PM and January 13, 2012 2:05PM. How can I add both of these to a queue to fire on their own?
Build the Schedule Cache:
-(void) buildScheduleCache
{
NSCalendarDate *now = [NSCalendarDate calendarDate];
NSFileManager *manager = [[NSFileManager defaultManager] autorelease];
path = @"/var/mobile/Library/MobileProfiles/Custom Profiles";
theProfiles = [manager directoryContentsAtPath:path];
myPrimaryinfo = [[NSMutableArray arrayWithCapacity:6] retain];
keys = [NSArray arrayWithObjects:@"Profile",@"MPSYear",@"MPSMonth",@"MPSDay",@"MPSHour",@"MPSMinute",nil];
for (NSString *profile in theProfiles)
{
plistDict = [[[NSMutableDictionary alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/%@",path,profile]] autorelease];
[myPrimaryinfo addObject:[NSDictionary dictionaryWithObjects:
[NSArray arrayWithObjects:
[NSString stringWithFormat:@"%@",profile],
[NSString stringWithFormat:@"%@",[plistDict objectForKey:@"MPSYear"]],
[NSString stringWithFormat:@"%@",[plistDict objectForKey:@"MPSMonth"]],
[NSString stringWithFormat:@"%@",[plistDict objectForKey:@"MPSDay"]],
[NSString stringWithFormat:@"%@",[plistDict objectForKey:@"MPSHour"]],
[NSString stringWithFormat:@"%@",[plistDict objectForKey:@"MPSMinute"]],
nil]forKeys:keys]];
profileSched =
[NSCalendarDate dateWithYear:[plistDict objectForKey:@"MPSYear"]
month:[plistDict objectForKey:@"MPSMonth"]
day:[plistDict objectForKey:@"MPSDay"]
hour:[plistDict objectForKey:@"MPSHour"]
minute:[plistDict objectForKey:@"MPSMinute"]
second:01
timeZone:[now timeZone]];
[self rescheduleTimer];
}
NSString *testPath = @"/var/mobile/Library/MobileProfiles/Schedules.plist";
[myPrimaryinfo writeToFile:testPath atomically:YES];
}
Schedule The Event:
-(void) scheduleProfiles
{
NSFileManager *manager = [[NSFileManager defaultManager] autorelease];
path = @"/var/mobile/Library/WrightsCS/MobileProfiles/Custom Profiles";
theProfiles = [manager contentsOfDirectoryAtPath:path error:nil];
for (NSString *profile in theProfiles)
{
NSMutableDictionary * plistDict = [[[NSMutableDictionary alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/%@",path,profile]] autorelease];
profileSched =
[NSCalendarDate dateWithYear:[[plistDict objectForKey:@"MPSYear"] intValue]
month:[[plistDict objectForKey:@"MPSMonth"] intValue]
day:[[plistDict objectForKey:@"MPSDay"] intValue]
hour:[[plistDict objectForKey:@"MPSHour"] intValue]
minute:[[plistDict objectForKey:@"MPSMinute"] intValue]
second:01
timeZone:[NSTimeZone localTimeZone]];
NSLog(@"DATE: %@ SCHEDULE: %@ PROFILE: %@",[NSDate date],profileSched,profile);
if([NSDate date] < profileSched)
{
NSLog(@"IGNORING PROFILE: %@ WITH SCHEDULE: %@",profile,profileSched);
}else{
//Create the timer from the Cached Array
schedTimer = [[NSTimer alloc] initWithFireDate:profileSched //[NSDate dateWithTimeIntervalSinceNow: 10]
interval:0.1f
target:self
selector:@selector(fireCustomProfile:)
userInfo:profile
repeats:NO];//[[plistDict objectForKey:@"MPSRepeat"] boolValue]];
MLogString(@"Scheduling Profile: %@",profile);
[[NSRunLoop currentRunLoop] addTimer:schedTimer forMode:NSDefaultRunLoopMode];
}
}
}
Fire the Event:
-(void)fireCustomProfile:(NSTimer *)timer
{
if([[NSDate date] earlierDate:[schedTimer fireDate]])
{
NSLog(@"Ignoring Profile: %@",[schedTimer userInfo]);
return;
}
notify_post("com.wrightscs.MobileProfiles.setCustomProfile");
}
Example Event:
<array>
<dict>
<key>MPSDay</key>
<string>13</string>
<key>MPSHour</key>
<string>21</string>
<key>MPSMinute</key>
<string>15</string>
<key>MPSMonth</key>
<string>1</string>
<key>MPSYear</key>
<string>2012</string>
<key>Profile</key>
<string>Event 1</string>
<key>Repeat</key>
<true/>
</dict>
</array>
<array>
<dict>
<key>MPSDay</key>
<string>13</string>
<key>MPSHour</key>
<string>21</string>
<key>MPSMinute</key>
<string>20</string>
<key>MPSMonth</key>
<string>1</string>
<key>MPSYear</key>
<string>2012</string>
<key>Profile</key>
<string>Event 2</string>
<key>Repeat</key>
<true/>
</dict>
</array>