#import <Foundation/Foundation.h>
#import <AppKit/NSColor.h>
#import <Addresses/Addresses.h>
#import "MemoryStore.h"
#import "ConfigManager.h"
#import "StoreManager.h"
#import "Event.h"
#import "RecurrenceRule.h"
#import "defines.h"
@interface ABStore : MemoryStore
{
}
@end
@implementation ABStore
- (NSDictionary *)defaults
{
return [NSDictionary dictionaryWithObjectsAndKeys:[[NSColor purpleColor] description], ST_COLOR,
[[NSColor whiteColor] description], ST_TEXT_COLOR,
[NSNumber numberWithBool:NO], ST_RW,
[NSNumber numberWithBool:YES], ST_DISPLAY,
[NSNumber numberWithBool:YES], ST_ENABLED,
nil, nil];
}
+ (NSString *)storeName
{
return _(@"My address book");
}
+ (NSString *)storeTypeName
{
return @"Address book store";
}
- (void)loadData
{
ADPerson *person;
NSEnumerator *enumerator;
id value;
Date *date;
Event *event;
RecurrenceRule *rrule;
enumerator = [[[ADAddressBook sharedAddressBook] people] objectEnumerator];
rrule = [[RecurrenceRule alloc] initWithFrequency:recurrenceFrequenceYearly];
while ((person = [enumerator nextObject])) {
value = [person valueForProperty:ADBirthdayProperty];
if (value && [value isMemberOfClass:[NSCalendarDate class]]) {
date = [Date today];
[date setYear:[value yearOfCommonEra]];
[date setMonth:[(NSCalendarDate *)value monthOfYear]];
[date setDay:[(NSCalendarDate *)value dayOfMonth]];
event = [[Event alloc] initWithStartDate:date duration:0 title:[person screenName]];
[event setAllDay:YES];
[event setRRule:rrule];
[event setText:AUTORELEASE([[NSAttributedString alloc] initWithString:_(@"Birthday")])];
[self add:event];
[event release];
}
}
NSLog(@"ABStore : found %lu contact(s) with a birthdate", [[self events] count]);
[rrule release];
}
- (id)initWithName:(NSString *)name
{
self = [super initWithName:name];
if (self) {
[self loadData];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(databaseChanged:) name:ADDatabaseChangedExternallyNotification object:nil];
}
return self;
}
- (void)databaseChanged:(NSNotification *)not
{
[_data removeAllObjects];
[self loadData];
}
- (BOOL)writable
{
return NO;
}
@end