From 7964ceed9ecab458ebba0366e442b69f37bdd0ac Mon Sep 17 00:00:00 2001 From: Rens Verhage Date: Mon, 13 May 2013 18:11:10 +0200 Subject: [PATCH 1/3] added item category (multiple) support --- Classes/MWFeedItem.h | 2 ++ Classes/MWFeedItem.m | 2 +- Classes/MWFeedParser.m | 11 +++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) 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..15430ef 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 diff --git a/Classes/MWFeedParser.m b/Classes/MWFeedParser.m index 16ca275..bbccabe 100644 --- a/Classes/MWFeedParser.m +++ b/Classes/MWFeedParser.m @@ -621,6 +621,17 @@ - (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) { + if (item.categories) { + item.categories = [item.categories arrayByAddingObject:processedText]; + } + else { + item.categories = [NSArray arrayWithObject:processedText]; + } + } + processed = YES; + } else if ([currentPath isEqualToString:@"/rss/channel/item/dc:date"]) { if (processedText.length > 0) item.date = [NSDate dateFromInternetDateTimeString:processedText formatHint:DateFormatHintRFC3339]; processed = YES; } } From 34e81317274377e22b137c7bc673bd787c791e3d Mon Sep 17 00:00:00 2001 From: Rens Verhage Date: Sat, 25 May 2013 15:59:11 +0200 Subject: [PATCH 2/3] added categories release in dealloc, decoding and encoding of categories --- Classes/MWFeedItem.m | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Classes/MWFeedItem.m b/Classes/MWFeedItem.m index 15430ef..032f9ac 100644 --- a/Classes/MWFeedItem.m +++ b/Classes/MWFeedItem.m @@ -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"]; } From 703f3677720510378ec4ab9d00b820fb27e8f8e9 Mon Sep 17 00:00:00 2001 From: Rens Verhage Date: Sat, 25 May 2013 16:46:44 +0200 Subject: [PATCH 3/3] added categories support for atom feeds --- Classes/MWFeedParser.m | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/Classes/MWFeedParser.m b/Classes/MWFeedParser.m index bbccabe..94909ed 100644 --- a/Classes/MWFeedParser.m +++ b/Classes/MWFeedParser.m @@ -621,17 +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) { - if (item.categories) { - item.categories = [item.categories arrayByAddingObject:processedText]; - } - else { - item.categories = [NSArray arrayWithObject:processedText]; - } - } - 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; } } @@ -675,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; } } @@ -969,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