diff --git a/Classes/MWFeedItem.h b/Classes/MWFeedItem.h index 936ce60..1e8318f 100644 --- a/Classes/MWFeedItem.h +++ b/Classes/MWFeedItem.h @@ -38,6 +38,7 @@ NSDate *updated; // Date the item was updated if available NSString *summary; // Description of item NSString *content; // More detailed content (if available) + NSArray *categories; // Categories the item belongs to (if available) // Enclosures: Holds 1 or more item enclosures (i.e. podcasts, mp3. pdf, etc) // - NSArray of NSDictionaries with the following keys: @@ -55,6 +56,7 @@ @property (nonatomic, copy) NSDate *updated; @property (nonatomic, copy) NSString *summary; @property (nonatomic, copy) NSString *content; +@property (nonatomic, copy) NSArray *categories; @property (nonatomic, copy) NSArray *enclosures; @end diff --git a/Classes/MWFeedItem.m b/Classes/MWFeedItem.m index 127a0e7..032f9ac 100644 --- a/Classes/MWFeedItem.m +++ b/Classes/MWFeedItem.m @@ -33,7 +33,7 @@ @implementation MWFeedItem -@synthesize identifier, title, link, date, updated, summary, content, enclosures; +@synthesize identifier, title, link, date, updated, summary, content, categories, enclosures; #pragma mark NSObject @@ -54,6 +54,7 @@ - (void)dealloc { [updated release]; [summary release]; [content release]; + [categories release]; [enclosures release]; [super dealloc]; } @@ -69,6 +70,7 @@ - (id)initWithCoder:(NSCoder *)decoder { updated = [[decoder decodeObjectForKey:@"updated"] retain]; summary = [[decoder decodeObjectForKey:@"summary"] retain]; content = [[decoder decodeObjectForKey:@"content"] retain]; + categories = [[decoder decodeObjectForKey:@"categories"] retain]; enclosures = [[decoder decodeObjectForKey:@"enclosures"] retain]; } return self; @@ -82,6 +84,7 @@ - (void)encodeWithCoder:(NSCoder *)encoder { if (updated) [encoder encodeObject:updated forKey:@"updated"]; if (summary) [encoder encodeObject:summary forKey:@"summary"]; if (content) [encoder encodeObject:content forKey:@"content"]; + if (categories) [encoder encodeObject:categories forKey:@"categories"]; if (enclosures) [encoder encodeObject:enclosures forKey:@"enclosures"]; } diff --git a/Classes/MWFeedParser.m b/Classes/MWFeedParser.m index 16ca275..94909ed 100644 --- a/Classes/MWFeedParser.m +++ b/Classes/MWFeedParser.m @@ -621,6 +621,7 @@ - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName else if ([currentPath isEqualToString:@"/rss/channel/item/content:encoded"]) { if (processedText.length > 0) item.content = processedText; processed = YES; } else if ([currentPath isEqualToString:@"/rss/channel/item/pubDate"]) { if (processedText.length > 0) item.date = [NSDate dateFromInternetDateTimeString:processedText formatHint:DateFormatHintRFC822]; processed = YES; } else if ([currentPath isEqualToString:@"/rss/channel/item/enclosure"]) { [self createEnclosureFromAttributes:currentElementAttributes andAddToItem:item]; processed = YES; } + else if ([currentPath isEqualToString:@"/rss/channel/item/category"]) { if (processedText.length > 0) [self addCategory:processedText toItem:item]; processed = YES; } else if ([currentPath isEqualToString:@"/rss/channel/item/dc:date"]) { if (processedText.length > 0) item.date = [NSDate dateFromInternetDateTimeString:processedText formatHint:DateFormatHintRFC3339]; processed = YES; } } @@ -664,6 +665,7 @@ - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName else if ([currentPath isEqualToString:@"/feed/entry/id"]) { if (processedText.length > 0) item.identifier = processedText; processed = YES; } else if ([currentPath isEqualToString:@"/feed/entry/summary"]) { if (processedText.length > 0) item.summary = processedText; processed = YES; } else if ([currentPath isEqualToString:@"/feed/entry/content"]) { if (processedText.length > 0) item.content = processedText; processed = YES; } + else if ([currentPath isEqualToString:@"/feed/entry/category"]) { if (processedText.length > 0) [self addCategory:processedText toItem:item]; processed = YES; } else if ([currentPath isEqualToString:@"/feed/entry/published"]) { if (processedText.length > 0) item.date = [NSDate dateFromInternetDateTimeString:processedText formatHint:DateFormatHintRFC3339]; processed = YES; } else if ([currentPath isEqualToString:@"/feed/entry/updated"]) { if (processedText.length > 0) item.updated = [NSDate dateFromInternetDateTimeString:processedText formatHint:DateFormatHintRFC3339]; processed = YES; } } @@ -958,4 +960,14 @@ - (BOOL)processAtomLink:(NSDictionary *)attributes andAddToMWObject:(id)MWObject return NO; } +- (void)addCategory:(NSString *)category toItem:(MWFeedItem *)currentItem +{ + if (currentItem.categories) { + currentItem.categories = [currentItem.categories arrayByAddingObject:category]; + } + else { + currentItem.categories = [NSArray arrayWithObject:category]; + } +} + @end \ No newline at end of file