From 5753cf33840f1b040bfa82d43eeb1d21385dcaee Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 19 Apr 2012 02:49:25 +0000 Subject: [PATCH 1/2] Monotone-Parent: 2b7803f8e993e96ff4490197722ef0a2a5faad70 Monotone-Revision: 7d9ee580367f7631b0793eae0e55ae9255d331bc Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-19T02:49:25 --- SOPE/NGCards/CardElement.h | 3 ++ SOPE/NGCards/CardElement.m | 10 +++++++ SOPE/NGCards/CardVersitRenderer.m | 8 ++++-- SOPE/NGCards/ChangeLog | 12 ++++++++ SOPE/NGCards/NSDictionary+NGCards.h | 1 + SOPE/NGCards/NSDictionary+NGCards.m | 28 +++++++++++++++++-- .../iCalRepeatableEntityObject+SOGo.m | 1 + 7 files changed, 58 insertions(+), 5 deletions(-) diff --git a/SOPE/NGCards/CardElement.h b/SOPE/NGCards/CardElement.h index af94a5c49..b15b2175d 100644 --- a/SOPE/NGCards/CardElement.h +++ b/SOPE/NGCards/CardElement.h @@ -106,6 +106,9 @@ - (void) addType: (NSString *) aType; +- (NSArray *) orderOfAttributeKeys; +- (NSArray *) orderOfValueKeys; + - (NSString *) versitString; - (CardGroup *) searchParentOfClass: (Class) parentClass; diff --git a/SOPE/NGCards/CardElement.m b/SOPE/NGCards/CardElement.m index 7064c81f9..959c37f12 100644 --- a/SOPE/NGCards/CardElement.m +++ b/SOPE/NGCards/CardElement.m @@ -471,6 +471,16 @@ _orderedValuesAreVoid (NSArray *orderedValues) return result; } +- (NSArray *) orderOfAttributeKeys +{ + return nil; +} + +- (NSArray *) orderOfValueKeys +{ + return nil; +} + - (NSString *) versitString { NSString *string; diff --git a/SOPE/NGCards/CardVersitRenderer.m b/SOPE/NGCards/CardVersitRenderer.m index 35e50d0e7..50894a831 100644 --- a/SOPE/NGCards/CardVersitRenderer.m +++ b/SOPE/NGCards/CardVersitRenderer.m @@ -78,13 +78,17 @@ if ([attributes count]) { [rendering appendString: @";"]; - [attributes versitRenderInString: rendering asAttributes: YES]; + [attributes versitRenderInString: rendering + withKeyOrdering: [anElement orderOfAttributeKeys] + asAttributes: YES]; } /* values */ values = [anElement values]; [rendering appendString: @":"]; - [values versitRenderInString: rendering asAttributes: NO]; + [values versitRenderInString: rendering + withKeyOrdering: [anElement orderOfValueKeys] + asAttributes: NO]; if ([rendering length] > 0) [rendering appendString: @"\r\n"]; diff --git a/SOPE/NGCards/ChangeLog b/SOPE/NGCards/ChangeLog index 359a14592..545f692da 100644 --- a/SOPE/NGCards/ChangeLog +++ b/SOPE/NGCards/ChangeLog @@ -1,3 +1,15 @@ +2012-04-18 Wolfgang Sourdeau + + * NSDictionary+NGCards.m + (-versitRenderInString:withKeyOrdering:asAttributes:): now takes + an "ordering" parameter resulting from the methods below and + reorder the dictionary keys as specified. + + * CardElement.m (-orderOfAttributeKeys, -orderOfValueKeys): new + methods that return an ordered array of value keys, used for + rendering data in a way that is acceptable to certain picky + clients. + 2012-04-11 Francis Lachapelle * iCalWeeklyRecurrenceCalculator.m diff --git a/SOPE/NGCards/NSDictionary+NGCards.h b/SOPE/NGCards/NSDictionary+NGCards.h index 8def7d6a1..cac3be8b5 100644 --- a/SOPE/NGCards/NSDictionary+NGCards.h +++ b/SOPE/NGCards/NSDictionary+NGCards.h @@ -30,6 +30,7 @@ - (id) objectForCaseInsensitiveKey: (NSString *) aKey; - (void) versitRenderInString: (NSMutableString *) aString + withKeyOrdering: (NSArray *) ordering asAttributes: (BOOL) asAttribute; /* handling of ":" */ @end diff --git a/SOPE/NGCards/NSDictionary+NGCards.m b/SOPE/NGCards/NSDictionary+NGCards.m index 9360154bd..109db067c 100644 --- a/SOPE/NGCards/NSDictionary+NGCards.m +++ b/SOPE/NGCards/NSDictionary+NGCards.m @@ -123,15 +123,37 @@ } - (void) versitRenderInString: (NSMutableString *) aString + withKeyOrdering: (NSArray *) ordering asAttributes: (BOOL) asAttributes { - NSArray *keys; - NSUInteger count, max, rendered = 0; + NSMutableArray *keys; + NSUInteger count, max, rendered = 0, keyIndex, newKeyIndex; NSArray *orderedValues; NSString *key; NSMutableString *substring; - keys = [self allKeys]; + keys = [[self allKeys] mutableCopy]; + [keys autorelease]; + + /* We reorder the fields based on the "ordering" array, by first placing + those that are specified and then the rest of them. */ + newKeyIndex = 0; + max = [ordering count]; + for (count = 0; count < max; count++) + { + key = [ordering objectAtIndex: count]; + keyIndex = [keys indexOfObject: key]; + if (keyIndex != NSNotFound) + { + if (keyIndex != newKeyIndex) + { + [keys removeObjectAtIndex: keyIndex]; + [keys insertObject: key atIndex: newKeyIndex]; + } + newKeyIndex++; + } + } + max = [keys count]; for (count = 0; count < max; count++) { diff --git a/SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.m b/SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.m index e57d02faf..04e6f93b3 100644 --- a/SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.m +++ b/SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.m @@ -59,6 +59,7 @@ rule = [rules objectAtIndex:i]; ruleString = [NSMutableString new]; [[rule values] versitRenderInString: ruleString + withKeyOrdering: [rule orderOfValueKeys] asAttributes: NO]; [ma addObject: ruleString]; [ruleString release]; From 3713513e5185372956af2ad9d88bdba78e5eb2b8 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 19 Apr 2012 02:49:57 +0000 Subject: [PATCH 2/2] Monotone-Parent: 7d9ee580367f7631b0793eae0e55ae9255d331bc Monotone-Revision: e93a01f806a40f4a4ff41e64bf05eae122e0eb6a Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-19T02:49:57 --- SOPE/NGCards/ChangeLog | 2 ++ SOPE/NGCards/iCalRecurrenceRule.m | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/SOPE/NGCards/ChangeLog b/SOPE/NGCards/ChangeLog index 545f692da..684eb0857 100644 --- a/SOPE/NGCards/ChangeLog +++ b/SOPE/NGCards/ChangeLog @@ -1,5 +1,7 @@ 2012-04-18 Wolfgang Sourdeau + * iCalRecurrenceRule.m (-orderOfValueKeys): overrriden method. + * NSDictionary+NGCards.m (-versitRenderInString:withKeyOrdering:asAttributes:): now takes an "ordering" parameter resulting from the methods below and diff --git a/SOPE/NGCards/iCalRecurrenceRule.m b/SOPE/NGCards/iCalRecurrenceRule.m index ff66370ab..fdc3a54bd 100644 --- a/SOPE/NGCards/iCalRecurrenceRule.m +++ b/SOPE/NGCards/iCalRecurrenceRule.m @@ -854,6 +854,15 @@ NSString *iCalWeekDayString[] = { @"SU", @"MO", @"TU", @"WE", @"TH", @"FR", // } // } +/* versit key ordering */ +- (NSArray *) orderOfValueKeys +{ + return [NSArray arrayWithObjects: @"freq", @"interval", @"count", @"until", + @"bymonth", @"byweekno", @"byyearday", @"bymonthday", + @"byday", @"byhour", @"byminute", @"bysecond", @"bysetpos", + nil]; +} + /* key/value coding */ - (void) handleTakeValue: (id) _value