Monotone-Parent: 4ad21ea0342a626a99aabc213cf8ed9a827eb0c4
Monotone-Revision: d175e2ab17f0d56d2fdc9a046048a0302d9fd0f7 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-11-02T13:16:05 Monotone-Branch: ca.inverse.sogomaint-2.0.2
parent
29ffadc001
commit
5c811e36ca
|
@ -1,3 +1,9 @@
|
||||||
|
2010-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||||
|
|
||||||
|
* SoObjects/SOGo/NSDictionary+BSJSONAdditions.[hm]:
|
||||||
|
SoObjects/SOGo/NSScanner+BSJSONAdditions.[hm]: removed classes,
|
||||||
|
obsoleted by the use of the SBJson library.
|
||||||
|
|
||||||
2010-11-01 Francis Lachapelle <flachapelle@inverse.ca>
|
2010-11-01 Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
|
||||||
* UI/WebServerResources/MailerUI.js (mailListToggleMessagesRead):
|
* UI/WebServerResources/MailerUI.js (mailListToggleMessagesRead):
|
||||||
|
|
|
@ -56,9 +56,6 @@ SOGo_HEADER_FILES = \
|
||||||
SOGoGroup.h \
|
SOGoGroup.h \
|
||||||
SOGoUser.h \
|
SOGoUser.h \
|
||||||
\
|
\
|
||||||
NSDictionary+BSJSONAdditions.h \
|
|
||||||
NSScanner+BSJSONAdditions.h \
|
|
||||||
\
|
|
||||||
DOMNode+SOGo.h \
|
DOMNode+SOGo.h \
|
||||||
\
|
\
|
||||||
WORequest+SOGo.h \
|
WORequest+SOGo.h \
|
||||||
|
@ -121,9 +118,6 @@ SOGo_OBJC_FILES = \
|
||||||
SOGoGroup.m \
|
SOGoGroup.m \
|
||||||
SOGoUser.m \
|
SOGoUser.m \
|
||||||
\
|
\
|
||||||
NSDictionary+BSJSONAdditions.m \
|
|
||||||
NSScanner+BSJSONAdditions.m \
|
|
||||||
\
|
|
||||||
DOMNode+SOGo.m \
|
DOMNode+SOGo.m \
|
||||||
\
|
\
|
||||||
WORequest+SOGo.m \
|
WORequest+SOGo.m \
|
||||||
|
|
|
@ -20,7 +20,7 @@ SOGo_LIBRARIES_DEPEND_UPON += \
|
||||||
-lNGMime \
|
-lNGMime \
|
||||||
-lNGStreams -lNGExtensions -lEOControl \
|
-lNGStreams -lNGExtensions -lEOControl \
|
||||||
-lXmlRpc -lDOM -lSaxObjC -lcrypt \
|
-lXmlRpc -lDOM -lSaxObjC -lcrypt \
|
||||||
-lNGLdap
|
-lNGLdap -lSBJson
|
||||||
|
|
||||||
ADDITIONAL_TOOL_LIBS += \
|
ADDITIONAL_TOOL_LIBS += \
|
||||||
-L$(GNUSTEP_OBJ_DIR)/ \
|
-L$(GNUSTEP_OBJ_DIR)/ \
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
//
|
|
||||||
// BSJSONAdditions
|
|
||||||
//
|
|
||||||
// Created by Blake Seely on 2/1/06.
|
|
||||||
// Copyright 2006 Blake Seely - http://www.blakeseely.com All rights reserved.
|
|
||||||
// Permission to use this code:
|
|
||||||
//
|
|
||||||
// Feel free to use this code in your software, either as-is or
|
|
||||||
// in a modified form. Either way, please include a credit in
|
|
||||||
// your software's "About" box or similar, mentioning at least
|
|
||||||
// my name (Blake Seely).
|
|
||||||
//
|
|
||||||
// Permission to redistribute this code:
|
|
||||||
//
|
|
||||||
// You can redistribute this code, as long as you keep these
|
|
||||||
// comments. You can also redistribute modified versions of the
|
|
||||||
// code, as long as you add comments to say that you've made
|
|
||||||
// modifications (keeping these original comments too).
|
|
||||||
//
|
|
||||||
// If you do use or redistribute this code, an email would be
|
|
||||||
// appreciated, just to let me know that people are finding my
|
|
||||||
// code useful. You can reach me at blakeseely@mac.com
|
|
||||||
|
|
||||||
#import <Foundation/NSDictionary.h>
|
|
||||||
|
|
||||||
extern NSString *jsonIndentString;
|
|
||||||
extern const int jsonDoNotIndent;
|
|
||||||
|
|
||||||
@interface NSDictionary (BSJSONAdditions)
|
|
||||||
|
|
||||||
- (NSString *)jsonStringValue;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@interface NSDictionary (PrivateBSJSONAdditions)
|
|
||||||
|
|
||||||
- (NSString *)jsonStringValueWithIndentLevel:(int)level;
|
|
||||||
- (NSString *)jsonStringForValue:(id)value withIndentLevel:(int)level;
|
|
||||||
- (NSString *)jsonStringForArray:(NSArray *)array withIndentLevel:(int)level;
|
|
||||||
- (NSString *)jsonStringForString:(NSString *)string;
|
|
||||||
- (NSString *)jsonIndentStringForLevel:(int)level;
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,190 +0,0 @@
|
||||||
//
|
|
||||||
// BSJSONAdditions
|
|
||||||
//
|
|
||||||
// Created by Blake Seely on 2/1/06.
|
|
||||||
// Copyright 2006 Blake Seely - http://www.blakeseely.com All rights reserved.
|
|
||||||
// Permission to use this code:
|
|
||||||
//
|
|
||||||
// Feel free to use this code in your software, either as-is or
|
|
||||||
// in a modified form. Either way, please include a credit in
|
|
||||||
// your software's "About" box or similar, mentioning at least
|
|
||||||
// my name (Blake Seely).
|
|
||||||
//
|
|
||||||
// Permission to redistribute this code:
|
|
||||||
//
|
|
||||||
// You can redistribute this code, as long as you keep these
|
|
||||||
// comments. You can also redistribute modified versions of the
|
|
||||||
// code, as long as you add comments to say that you've made
|
|
||||||
// modifications (keeping these original comments too).
|
|
||||||
//
|
|
||||||
// If you do use or redistribute this code, an email would be
|
|
||||||
// appreciated, just to let me know that people are finding my
|
|
||||||
// code useful. You can reach me at blakeseely@mac.com
|
|
||||||
|
|
||||||
#import <Foundation/NSArray.h>
|
|
||||||
#import <Foundation/NSDecimalNumber.h>
|
|
||||||
#import <Foundation/NSEnumerator.h>
|
|
||||||
#import <Foundation/NSNull.h>
|
|
||||||
#import <Foundation/NSValue.h>
|
|
||||||
|
|
||||||
#import "NSDictionary+BSJSONAdditions.h"
|
|
||||||
#import "NSScanner+BSJSONAdditions.h"
|
|
||||||
|
|
||||||
NSString *jsonIndentString = @"\t"; // Modify this string to change how the output formats.
|
|
||||||
const int jsonDoNotIndent = -1;
|
|
||||||
|
|
||||||
@implementation NSDictionary (BSJSONAdditions)
|
|
||||||
|
|
||||||
- (NSString *)jsonStringValue
|
|
||||||
{
|
|
||||||
return [self jsonStringValueWithIndentLevel:0];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation NSDictionary (PrivateBSJSONAdditions)
|
|
||||||
|
|
||||||
- (NSString *)jsonStringValueWithIndentLevel:(int)level
|
|
||||||
{
|
|
||||||
NSMutableString *jsonString = [[NSMutableString alloc] init];
|
|
||||||
[jsonString appendString:jsonObjectStartString];
|
|
||||||
|
|
||||||
NSEnumerator *keyEnum = [self keyEnumerator];
|
|
||||||
NSString *keyString = [keyEnum nextObject];
|
|
||||||
NSString *valueString;
|
|
||||||
if (keyString != nil) {
|
|
||||||
valueString = [self jsonStringForValue:[self objectForKey:keyString] withIndentLevel:level];
|
|
||||||
if (level != jsonDoNotIndent) { // indent before each key
|
|
||||||
[jsonString appendString:[self jsonIndentStringForLevel:level]];
|
|
||||||
}
|
|
||||||
[jsonString appendFormat:@" %@ %@ %@", [self jsonStringForString:keyString], jsonKeyValueSeparatorString, valueString];
|
|
||||||
}
|
|
||||||
|
|
||||||
while ((keyString = [keyEnum nextObject])) {
|
|
||||||
valueString = [self jsonStringForValue:[self objectForKey:keyString] withIndentLevel:level]; // TODO bail if valueString is nil? How to bail successfully from here?
|
|
||||||
[jsonString appendString:jsonValueSeparatorString];
|
|
||||||
if (level != jsonDoNotIndent) { // indent before each key
|
|
||||||
[jsonString appendFormat:@"%@", [self jsonIndentStringForLevel:level]];
|
|
||||||
}
|
|
||||||
[jsonString appendFormat:@" %@ %@ %@", [self jsonStringForString:keyString], jsonKeyValueSeparatorString, valueString];
|
|
||||||
}
|
|
||||||
|
|
||||||
//[jsonString appendString:@"\n"];
|
|
||||||
[jsonString appendString:jsonObjectEndString];
|
|
||||||
|
|
||||||
return [jsonString autorelease];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)jsonStringForValue:(id)value withIndentLevel:(int)level
|
|
||||||
{
|
|
||||||
NSString *jsonString;
|
|
||||||
if ([value respondsToSelector:@selector(characterAtIndex:)]) // String
|
|
||||||
jsonString = [self jsonStringForString:(NSString *)value];
|
|
||||||
else if ([value respondsToSelector:@selector(keyEnumerator)]) // Dictionary
|
|
||||||
jsonString = [(NSDictionary *)value jsonStringValueWithIndentLevel:(level + 1)];
|
|
||||||
else if ([value respondsToSelector:@selector(objectAtIndex:)]) // Array
|
|
||||||
jsonString = [self jsonStringForArray:(NSArray *)value withIndentLevel:level];
|
|
||||||
else if (value == [NSNull null]) // null
|
|
||||||
jsonString = jsonNullString;
|
|
||||||
else if ([value respondsToSelector:@selector(objCType)]) { // NSNumber - representing true, false, and any form of numeric
|
|
||||||
NSNumber *number = (NSNumber *)value;
|
|
||||||
const char *t = [number objCType];
|
|
||||||
if (((*t == 'c') || *t == 'C') && ([number boolValue] == YES)) // true
|
|
||||||
jsonString = jsonTrueString;
|
|
||||||
else if (((*t == 'c') || *t == 'C') && ([number boolValue] == NO)) // false
|
|
||||||
jsonString = jsonFalseString;
|
|
||||||
else // attempt to handle as a decimal number - int, fractional, exponential
|
|
||||||
// TODO: values converted from exponential json to dict and back to json do not format as exponential again
|
|
||||||
jsonString = [[NSDecimalNumber decimalNumberWithDecimal:[number decimalValue]] stringValue];
|
|
||||||
} else {
|
|
||||||
// TODO: error condition - it's not any of the types that I know about.
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
return jsonString;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)jsonStringForArray:(NSArray *)array withIndentLevel:(int)level
|
|
||||||
{
|
|
||||||
NSMutableString *jsonString = [[NSMutableString alloc] init];
|
|
||||||
[jsonString appendString:jsonArrayStartString];
|
|
||||||
|
|
||||||
if ([array count] > 0) {
|
|
||||||
[jsonString appendString:[self jsonStringForValue:[array objectAtIndex:0] withIndentLevel:level]];
|
|
||||||
}
|
|
||||||
|
|
||||||
int i;
|
|
||||||
for (i = 1; i < [array count]; i++) {
|
|
||||||
[jsonString appendFormat:@"%@ %@", jsonValueSeparatorString, [self jsonStringForValue:[array objectAtIndex:i] withIndentLevel:level]];
|
|
||||||
}
|
|
||||||
|
|
||||||
[jsonString appendString:jsonArrayEndString];
|
|
||||||
return [jsonString autorelease];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)jsonStringForString:(NSString *)string
|
|
||||||
{
|
|
||||||
NSMutableString *jsonString = [[NSMutableString alloc] init];
|
|
||||||
[jsonString appendString:jsonStringDelimiterString];
|
|
||||||
|
|
||||||
// Build the result one character at a time, inserting escaped characters as necessary
|
|
||||||
int i;
|
|
||||||
unichar nextChar;
|
|
||||||
for (i = 0; i < [string length]; i++) {
|
|
||||||
nextChar = [string characterAtIndex:i];
|
|
||||||
switch (nextChar) {
|
|
||||||
case '\"':
|
|
||||||
[jsonString appendString:@"\\\""];
|
|
||||||
break;
|
|
||||||
case '\\':
|
|
||||||
[jsonString appendString:@"\\\\"];
|
|
||||||
break;
|
|
||||||
/* TODO: email out to json group on this - spec says to handlt his, examples and example code don't handle this.
|
|
||||||
case '\/':
|
|
||||||
[jsonString appendString:@"\\/"];
|
|
||||||
break;
|
|
||||||
*/
|
|
||||||
case '\b':
|
|
||||||
[jsonString appendString:@"\\b"];
|
|
||||||
break;
|
|
||||||
case '\f':
|
|
||||||
[jsonString appendString:@"\\f"];
|
|
||||||
break;
|
|
||||||
case '\n':
|
|
||||||
[jsonString appendString:@"\\n"];
|
|
||||||
break;
|
|
||||||
case '\r':
|
|
||||||
[jsonString appendString:@"\\r"];
|
|
||||||
break;
|
|
||||||
case '\t':
|
|
||||||
[jsonString appendString:@"\\t"];
|
|
||||||
break;
|
|
||||||
/* TODO: Find and encode unicode characters here?
|
|
||||||
case '\u':
|
|
||||||
[jsonString appendString:@"\\n"];
|
|
||||||
break;
|
|
||||||
*/
|
|
||||||
default:
|
|
||||||
[jsonString appendString:[NSString stringWithCharacters:&nextChar length:1]];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[jsonString appendString:jsonStringDelimiterString];
|
|
||||||
return [jsonString autorelease];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)jsonIndentStringForLevel:(int)level
|
|
||||||
{
|
|
||||||
NSMutableString *indentString = [[NSMutableString alloc] init];
|
|
||||||
if (level != jsonDoNotIndent) {
|
|
||||||
[indentString appendString:@"\n"];
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < level; i++) {
|
|
||||||
[indentString appendString:jsonIndentString];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return [indentString autorelease];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,64 +0,0 @@
|
||||||
//
|
|
||||||
// BSJSONAdditions
|
|
||||||
//
|
|
||||||
// Created by Blake Seely on 2/1/06.
|
|
||||||
// Copyright 2006 Blake Seely - http://www.blakeseely.com All rights reserved.
|
|
||||||
// Permission to use this code:
|
|
||||||
//
|
|
||||||
// Feel free to use this code in your software, either as-is or
|
|
||||||
// in a modified form. Either way, please include a credit in
|
|
||||||
// your software's "About" box or similar, mentioning at least
|
|
||||||
// my name (Blake Seely).
|
|
||||||
//
|
|
||||||
// Permission to redistribute this code:
|
|
||||||
//
|
|
||||||
// You can redistribute this code, as long as you keep these
|
|
||||||
// comments. You can also redistribute modified versions of the
|
|
||||||
// code, as long as you add comments to say that you've made
|
|
||||||
// modifications (keeping these original comments too).
|
|
||||||
//
|
|
||||||
// If you do use or redistribute this code, an email would be
|
|
||||||
// appreciated, just to let me know that people are finding my
|
|
||||||
// code useful. You can reach me at blakeseely@mac.com
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Foundation/NSScanner.h>
|
|
||||||
|
|
||||||
@class NSArray;
|
|
||||||
@class NSDictionary;
|
|
||||||
@class NSNumber;
|
|
||||||
@class NSString;
|
|
||||||
|
|
||||||
extern NSString *jsonObjectStartString;
|
|
||||||
extern NSString *jsonObjectEndString;
|
|
||||||
extern NSString *jsonArrayStartString;
|
|
||||||
extern NSString *jsonArrayEndString;
|
|
||||||
extern NSString *jsonKeyValueSeparatorString;
|
|
||||||
extern NSString *jsonValueSeparatorString;
|
|
||||||
extern NSString *jsonStringDelimiterString;
|
|
||||||
extern NSString *jsonStringEscapedDoubleQuoteString;
|
|
||||||
extern NSString *jsonStringEscapedSlashString;
|
|
||||||
extern NSString *jsonTrueString;
|
|
||||||
extern NSString *jsonFalseString;
|
|
||||||
extern NSString *jsonNullString;
|
|
||||||
|
|
||||||
|
|
||||||
@interface NSScanner (PrivateBSJSONAdditions)
|
|
||||||
|
|
||||||
- (BOOL)scanJSONObject:(NSMutableDictionary **)dictionary;
|
|
||||||
- (BOOL)scanJSONArray:(NSArray **)array;
|
|
||||||
- (BOOL)scanJSONString:(NSString **)string;
|
|
||||||
- (BOOL)scanJSONValue:(id *)value;
|
|
||||||
- (BOOL)scanJSONNumber:(NSNumber **)number;
|
|
||||||
|
|
||||||
- (BOOL)scanJSONWhiteSpace;
|
|
||||||
- (BOOL)scanJSONKeyValueSeparator;
|
|
||||||
- (BOOL)scanJSONValueSeparator;
|
|
||||||
- (BOOL)scanJSONObjectStartString;
|
|
||||||
- (BOOL)scanJSONObjectEndString;
|
|
||||||
- (BOOL)scanJSONArrayStartString;
|
|
||||||
- (BOOL)scanJSONArrayEndString;
|
|
||||||
- (BOOL)scanJSONArrayEndString;
|
|
||||||
- (BOOL)scanJSONStringDelimiterString;
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,347 +0,0 @@
|
||||||
//
|
|
||||||
// BSJSONAdditions
|
|
||||||
//
|
|
||||||
// Created by Blake Seely on 2/1/06.
|
|
||||||
// Copyright 2006 Blake Seely - http://www.blakeseely.com All rights reserved.
|
|
||||||
// Permission to use this code:
|
|
||||||
//
|
|
||||||
// Feel free to use this code in your software, either as-is or
|
|
||||||
// in a modified form. Either way, please include a credit in
|
|
||||||
// your software's "About" box or similar, mentioning at least
|
|
||||||
// my name (Blake Seely).
|
|
||||||
//
|
|
||||||
// Permission to redistribute this code:
|
|
||||||
//
|
|
||||||
// You can redistribute this code, as long as you keep these
|
|
||||||
// comments. You can also redistribute modified versions of the
|
|
||||||
// code, as long as you add comments to say that you've made
|
|
||||||
// modifications (keeping these original comments too).
|
|
||||||
//
|
|
||||||
// If you do use or redistribute this code, an email would be
|
|
||||||
// appreciated, just to let me know that people are finding my
|
|
||||||
// code useful. You can reach me at blakeseely@mac.com
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Version 1.2: Includes modifications by Bill Garrison: http://www.standardorbit.com , which included
|
|
||||||
// Unit Tests adapted from Jonathan Wight's CocoaJSON code: http://www.toxicsoftware.com
|
|
||||||
// I have included those adapted unit tests in this package.
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
#import <Foundation/NSArray.h>
|
|
||||||
#import <Foundation/NSDecimalNumber.h>
|
|
||||||
#import <Foundation/NSNull.h>
|
|
||||||
#import <Foundation/NSValue.h>
|
|
||||||
|
|
||||||
#import "NSScanner+BSJSONAdditions.h"
|
|
||||||
|
|
||||||
NSString *jsonObjectStartString = @"{";
|
|
||||||
NSString *jsonObjectEndString = @"}";
|
|
||||||
NSString *jsonArrayStartString = @"[";
|
|
||||||
NSString *jsonArrayEndString = @"]";
|
|
||||||
NSString *jsonKeyValueSeparatorString = @":";
|
|
||||||
NSString *jsonValueSeparatorString = @",";
|
|
||||||
NSString *jsonStringDelimiterString = @"\"";
|
|
||||||
NSString *jsonStringEscapedDoubleQuoteString = @"\\\"";
|
|
||||||
NSString *jsonStringEscapedSlashString = @"\\\\";
|
|
||||||
NSString *jsonTrueString = @"true";
|
|
||||||
NSString *jsonFalseString = @"false";
|
|
||||||
NSString *jsonNullString = @"null";
|
|
||||||
|
|
||||||
@implementation NSScanner (PrivateBSJSONAdditions)
|
|
||||||
|
|
||||||
- (BOOL)scanJSONObject:(NSMutableDictionary **)dictionary
|
|
||||||
{
|
|
||||||
//[self setCharactersToBeSkipped:nil];
|
|
||||||
|
|
||||||
BOOL result = NO;
|
|
||||||
|
|
||||||
/* START - April 21, 2006 - Updated to bypass irrelevant characters at the beginning of a JSON string */
|
|
||||||
NSString *ignoredString;
|
|
||||||
[self scanUpToString:jsonObjectStartString intoString:&ignoredString];
|
|
||||||
/* END - April 21, 2006 */
|
|
||||||
|
|
||||||
if (![self scanJSONObjectStartString]) {
|
|
||||||
// TODO: Error condition. For now, return false result, do nothing with the dictionary handle
|
|
||||||
} else {
|
|
||||||
NSMutableDictionary *jsonKeyValues = [[[NSMutableDictionary alloc] init] autorelease];
|
|
||||||
NSString *key = nil;
|
|
||||||
id value;
|
|
||||||
[self scanJSONWhiteSpace];
|
|
||||||
while (([self scanJSONString:&key]) && ([self scanJSONKeyValueSeparator]) && ([self scanJSONValue:&value])) {
|
|
||||||
[jsonKeyValues setObject:value forKey:key];
|
|
||||||
[self scanJSONWhiteSpace];
|
|
||||||
// check to see if the character at scan location is a value separator. If it is, do nothing.
|
|
||||||
if ([[[self string] substringWithRange:NSMakeRange([self scanLocation], 1)] isEqualToString:jsonValueSeparatorString]) {
|
|
||||||
[self scanJSONValueSeparator];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ([self scanJSONObjectEndString]) {
|
|
||||||
// whether or not we found a key-val pair, we found open and close brackets - completing an object
|
|
||||||
result = YES;
|
|
||||||
*dictionary = jsonKeyValues;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)scanJSONArray:(NSArray **)array
|
|
||||||
{
|
|
||||||
BOOL result = NO;
|
|
||||||
NSMutableArray *values = [[[NSMutableArray alloc] init] autorelease];
|
|
||||||
[self scanJSONArrayStartString];
|
|
||||||
id value = nil;
|
|
||||||
|
|
||||||
while ([self scanJSONValue:&value]) {
|
|
||||||
[values addObject:value];
|
|
||||||
[self scanJSONWhiteSpace];
|
|
||||||
if ([[[self string] substringWithRange:NSMakeRange([self scanLocation], 1)] isEqualToString:jsonValueSeparatorString]) {
|
|
||||||
[self scanJSONValueSeparator];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ([self scanJSONArrayEndString]) {
|
|
||||||
result = YES;
|
|
||||||
*array = values;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)scanJSONString:(NSString **)string
|
|
||||||
{
|
|
||||||
BOOL result = NO;
|
|
||||||
if ([self scanJSONStringDelimiterString]) {
|
|
||||||
NSMutableString *chars = [[[NSMutableString alloc] init] autorelease];
|
|
||||||
NSString *characterFormat = @"%C";
|
|
||||||
|
|
||||||
// process character by character until we finish the string or reach another double-quote
|
|
||||||
while ((![self isAtEnd]) && ([[self string] characterAtIndex:[self scanLocation]] != '\"')) {
|
|
||||||
unichar currentChar = [[self string] characterAtIndex:[self scanLocation]];
|
|
||||||
unichar nextChar;
|
|
||||||
if (currentChar != '\\') {
|
|
||||||
[chars appendFormat:characterFormat, currentChar];
|
|
||||||
[self setScanLocation:([self scanLocation] + 1)];
|
|
||||||
} else {
|
|
||||||
nextChar = [[self string] characterAtIndex:([self scanLocation] + 1)];
|
|
||||||
switch (nextChar) {
|
|
||||||
case '\"':
|
|
||||||
[chars appendString:@"\""];
|
|
||||||
[self setScanLocation:([self scanLocation] + 2)];
|
|
||||||
break;
|
|
||||||
case '\\':
|
|
||||||
[chars appendString:@"\\"]; // debugger shows result as having two slashes, but final output is correct. Possible debugger error?
|
|
||||||
[self setScanLocation:([self scanLocation] + 2)];
|
|
||||||
break;
|
|
||||||
/* TODO: json.org docs mention this seq, so does yahoo, but not recognized here by xcode, note from crockford: not a required escape
|
|
||||||
case '\/':
|
|
||||||
[chars appendString:@"\/"];
|
|
||||||
[self setScanLocation:([self scanLocation] + 2)];
|
|
||||||
break;
|
|
||||||
*/
|
|
||||||
case 'b':
|
|
||||||
[chars appendString:@"\b"];
|
|
||||||
[self setScanLocation:([self scanLocation] + 2)];
|
|
||||||
break;
|
|
||||||
case 'f':
|
|
||||||
[chars appendString:@"\f"];
|
|
||||||
[self setScanLocation:([self scanLocation] + 2)];
|
|
||||||
break;
|
|
||||||
case 'n':
|
|
||||||
[chars appendString:@"\n"];
|
|
||||||
[self setScanLocation:([self scanLocation] + 2)];
|
|
||||||
break;
|
|
||||||
case 'r':
|
|
||||||
[chars appendString:@"\r"];
|
|
||||||
[self setScanLocation:([self scanLocation] + 2)];
|
|
||||||
break;
|
|
||||||
case 't':
|
|
||||||
[chars appendString:@"\t"];
|
|
||||||
[self setScanLocation:([self scanLocation] + 2)];
|
|
||||||
break;
|
|
||||||
case 'u': // unicode sequence - get string of hex chars, convert to int, convert to unichar, append
|
|
||||||
[self setScanLocation:([self scanLocation] + 2)]; // advance past '\u'
|
|
||||||
NSString *digits = [[self string] substringWithRange:NSMakeRange([self scanLocation], 4)];
|
|
||||||
/* START Updated code modified from code fix submitted by Bill Garrison - March 28, 2006 - http://www.standardorbit.net */
|
|
||||||
NSScanner *hexScanner = [NSScanner scannerWithString:digits];
|
|
||||||
NSString *verifiedHexDigits;
|
|
||||||
NSCharacterSet *hexDigitSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789ABCDEFabcdef"];
|
|
||||||
if (NO == [hexScanner scanCharactersFromSet:hexDigitSet intoString:&verifiedHexDigits])
|
|
||||||
return NO;
|
|
||||||
if (4 != [verifiedHexDigits length])
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
// Read in the hex value
|
|
||||||
[hexScanner setScanLocation:0];
|
|
||||||
unsigned unicodeHexValue;
|
|
||||||
if (NO == [hexScanner scanHexInt:&unicodeHexValue]) {
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
[chars appendFormat:characterFormat, unicodeHexValue];
|
|
||||||
/* END update - March 28, 2006 */
|
|
||||||
[self setScanLocation:([self scanLocation] + 4)];
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
[chars appendFormat:@"\\%C", nextChar];
|
|
||||||
[self setScanLocation:([self scanLocation] + 2)];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (![self isAtEnd]) {
|
|
||||||
result = [self scanJSONStringDelimiterString];
|
|
||||||
*string = chars;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
|
|
||||||
/* this code is more appropriate if you have a separate method to unescape the found string
|
|
||||||
for example, between inputting json and outputting it, it may make more sense to have a category on NSString to perform
|
|
||||||
escaping and unescaping. Keeping this code and looking into this for a future update.
|
|
||||||
unsigned int searchLength = [[self string] length] - [self scanLocation];
|
|
||||||
unsigned int quoteLocation = [[self string] rangeOfString:jsonStringDelimiterString options:0 range:NSMakeRange([self scanLocation], searchLength)].location;
|
|
||||||
searchLength = [[self string] length] - quoteLocation;
|
|
||||||
while (([[[self string] substringWithRange:NSMakeRange((quoteLocation - 1), 2)] isEqualToString:jsonStringEscapedDoubleQuoteString]) &&
|
|
||||||
(quoteLocation != NSNotFound) &&
|
|
||||||
(![[[self string] substringWithRange:NSMakeRange((quoteLocation -2), 2)] isEqualToString:jsonStringEscapedSlashString])){
|
|
||||||
searchLength = [[self string] length] - (quoteLocation + 1);
|
|
||||||
quoteLocation = [[self string] rangeOfString:jsonStringDelimiterString options:0 range:NSMakeRange((quoteLocation + 1), searchLength)].location;
|
|
||||||
}
|
|
||||||
|
|
||||||
*string = [[self string] substringWithRange:NSMakeRange([self scanLocation], (quoteLocation - [self scanLocation]))];
|
|
||||||
// TODO: process escape sequences out of the string - replacing with their actual characters. a function that does just this belongs
|
|
||||||
// in another class. So it may make more sense to change this whole implementation to just go character by character instead.
|
|
||||||
[self setScanLocation:(quoteLocation + 1)];
|
|
||||||
*/
|
|
||||||
result = YES;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)scanJSONValue:(id *)value
|
|
||||||
{
|
|
||||||
BOOL result = NO;
|
|
||||||
|
|
||||||
[self scanJSONWhiteSpace];
|
|
||||||
NSString *substring = [[self string] substringWithRange:NSMakeRange([self scanLocation], 1)];
|
|
||||||
NSUInteger trueLocation = [[self string] rangeOfString:jsonTrueString options:0 range:NSMakeRange([self scanLocation], ([[self string] length] - [self scanLocation]))].location;
|
|
||||||
NSUInteger falseLocation = [[self string] rangeOfString:jsonFalseString options:0 range:NSMakeRange([self scanLocation], ([[self string] length] - [self scanLocation]))].location;
|
|
||||||
NSUInteger nullLocation = [[self string] rangeOfString:jsonNullString options:0 range:NSMakeRange([self scanLocation], ([[self string] length] - [self scanLocation]))].location;
|
|
||||||
|
|
||||||
if ([substring isEqualToString:jsonStringDelimiterString]) {
|
|
||||||
result = [self scanJSONString:value];
|
|
||||||
} else if ([substring isEqualToString:jsonObjectStartString]) {
|
|
||||||
result = [self scanJSONObject:value];
|
|
||||||
} else if ([substring isEqualToString:jsonArrayStartString]) {
|
|
||||||
result = [self scanJSONArray:value];
|
|
||||||
} else if ([self scanLocation] == trueLocation) {
|
|
||||||
result = YES;
|
|
||||||
*value = [NSNumber numberWithBool:YES];
|
|
||||||
[self setScanLocation:([self scanLocation] + [jsonTrueString length])];
|
|
||||||
} else if ([self scanLocation] == falseLocation) {
|
|
||||||
result = YES;
|
|
||||||
*value = [NSNumber numberWithBool:NO];
|
|
||||||
[self setScanLocation:([self scanLocation] + [jsonFalseString length])];
|
|
||||||
} else if ([self scanLocation] == nullLocation) {
|
|
||||||
result = YES;
|
|
||||||
*value = [NSNull null];
|
|
||||||
[self setScanLocation:([self scanLocation] + [jsonNullString length])];
|
|
||||||
} else if (([[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[[self string] characterAtIndex:[self scanLocation]]]) ||
|
|
||||||
([[self string] characterAtIndex:[self scanLocation]] == '-')){ // check to make sure it's a digit or -
|
|
||||||
result = [self scanJSONNumber:value];
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)scanJSONNumber:(NSNumber **)number
|
|
||||||
{
|
|
||||||
//NSDecimal decimal;
|
|
||||||
//BOOL result = [self scanDecimal:&decimal];
|
|
||||||
//*number = [NSDecimalNumber decimalNumberWithDecimal:decimal];
|
|
||||||
long long intValue, commaValue;
|
|
||||||
double doubleValue;
|
|
||||||
NSUInteger curLocation, length;
|
|
||||||
NSString *stringValue;
|
|
||||||
|
|
||||||
stringValue = [self string];
|
|
||||||
|
|
||||||
BOOL result = [self scanLongLong: &intValue];
|
|
||||||
if (result)
|
|
||||||
{
|
|
||||||
curLocation = [self scanLocation];
|
|
||||||
if (curLocation < [stringValue length]
|
|
||||||
&& [stringValue characterAtIndex: curLocation] == '.')
|
|
||||||
{
|
|
||||||
[self scanString: @"." intoString: NULL];
|
|
||||||
if ([self scanLongLong: &commaValue])
|
|
||||||
{
|
|
||||||
result = YES;
|
|
||||||
length = [self scanLocation] - curLocation - 1;
|
|
||||||
if (intValue < 0)
|
|
||||||
commaValue = -commaValue;
|
|
||||||
doubleValue = intValue + commaValue / pow(10.0, length);
|
|
||||||
*number = [NSNumber numberWithDouble: doubleValue];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
*number = [NSNumber numberWithLongLong: intValue];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
*number = [NSNumber numberWithLongLong: intValue];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
*number = nil;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)scanJSONWhiteSpace
|
|
||||||
{
|
|
||||||
//NSLog(@"Scanning white space - here are the next ten chars ---%@---", [[self string] substringWithRange:NSMakeRange([self scanLocation], 10)]);
|
|
||||||
BOOL result = NO;
|
|
||||||
NSCharacterSet *space = [NSCharacterSet whitespaceAndNewlineCharacterSet];
|
|
||||||
while ([space characterIsMember:[[self string] characterAtIndex:[self scanLocation]]]) {
|
|
||||||
[self setScanLocation:([self scanLocation] + 1)];
|
|
||||||
result = YES;
|
|
||||||
}
|
|
||||||
//NSLog(@"Done Scanning white space - here are the next ten chars ---%@---", [[self string] substringWithRange:NSMakeRange([self scanLocation], 10)]);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)scanJSONKeyValueSeparator
|
|
||||||
{
|
|
||||||
return [self scanString:jsonKeyValueSeparatorString intoString:NULL];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)scanJSONValueSeparator
|
|
||||||
{
|
|
||||||
return [self scanString:jsonValueSeparatorString intoString:NULL];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)scanJSONObjectStartString
|
|
||||||
{
|
|
||||||
return [self scanString:jsonObjectStartString intoString:NULL];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)scanJSONObjectEndString
|
|
||||||
{
|
|
||||||
return [self scanString:jsonObjectEndString intoString:NULL];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)scanJSONArrayStartString
|
|
||||||
{
|
|
||||||
return [self scanString:jsonArrayStartString intoString:NULL];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)scanJSONArrayEndString
|
|
||||||
{
|
|
||||||
return [self scanString:jsonArrayEndString intoString:NULL];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)scanJSONStringDelimiterString;
|
|
||||||
{
|
|
||||||
return [self scanString:jsonStringDelimiterString intoString:NULL];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -29,12 +29,13 @@
|
||||||
#import <EOControl/EOQualifier.h>
|
#import <EOControl/EOQualifier.h>
|
||||||
|
|
||||||
#import <NGExtensions/NSDictionary+misc.h>
|
#import <NGExtensions/NSDictionary+misc.h>
|
||||||
|
#import <NGExtensions/NSObject+Logs.h>
|
||||||
|
|
||||||
#import <NGMime/NGMimeHeaderFieldGenerator.h>
|
#import <NGMime/NGMimeHeaderFieldGenerator.h>
|
||||||
|
#import <SBJson/SBJsonParser.h>
|
||||||
|
|
||||||
#import "NSArray+Utilities.h"
|
#import "NSArray+Utilities.h"
|
||||||
#import "NSDictionary+BSJSONAdditions.h"
|
|
||||||
#import "NSDictionary+URL.h"
|
#import "NSDictionary+URL.h"
|
||||||
#import "NSScanner+BSJSONAdditions.h"
|
|
||||||
|
|
||||||
#import "NSString+Utilities.h"
|
#import "NSString+Utilities.h"
|
||||||
|
|
||||||
|
@ -513,17 +514,24 @@ static NSMutableCharacterSet *safeLDIFStartChars = nil;
|
||||||
|
|
||||||
- (id) objectFromJSONString
|
- (id) objectFromJSONString
|
||||||
{
|
{
|
||||||
NSScanner *scanner;
|
SBJsonParser *parser;
|
||||||
NSObject *object;
|
NSObject *object;
|
||||||
|
NSError *error;
|
||||||
|
|
||||||
object = nil;
|
object = nil;
|
||||||
|
|
||||||
if ([self length] > 0)
|
if ([self length] > 0)
|
||||||
{
|
{
|
||||||
scanner = [[NSScanner alloc] initWithString: self];
|
parser = [SBJsonParser new];
|
||||||
if (![scanner scanJSONValue: &object])
|
[parser autorelease];
|
||||||
object = nil;
|
error = nil;
|
||||||
[scanner autorelease];
|
object = [parser objectWithString: self
|
||||||
|
error: &error];
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
[self errorWithFormat: @"json parser: %@", error];
|
||||||
|
object = nil;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return object;
|
return object;
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
#import <NGObjWeb/WOResponse.h>
|
#import <NGObjWeb/WOResponse.h>
|
||||||
#import <NGExtensions/NSObject+Logs.h>
|
#import <NGExtensions/NSObject+Logs.h>
|
||||||
|
|
||||||
#import "NSDictionary+BSJSONAdditions.h"
|
#import "NSDictionary+Utilities.h"
|
||||||
#import "NSString+Utilities.h"
|
#import "NSString+Utilities.h"
|
||||||
#import "SOGoCache.h"
|
#import "SOGoCache.h"
|
||||||
#import "SOGoObject.h"
|
#import "SOGoObject.h"
|
||||||
|
@ -167,7 +167,7 @@
|
||||||
[sessionDict setObject: identifier forKey: @"identifier"];
|
[sessionDict setObject: identifier forKey: @"identifier"];
|
||||||
if ([proxyTickets count])
|
if ([proxyTickets count])
|
||||||
[sessionDict setObject: proxyTickets forKey: @"proxyTickets"];
|
[sessionDict setObject: proxyTickets forKey: @"proxyTickets"];
|
||||||
jsonSession = [sessionDict jsonStringValue];
|
jsonSession = [sessionDict jsonRepresentation];
|
||||||
[cache setCASSession: jsonSession
|
[cache setCASSession: jsonSession
|
||||||
withTicket: ticket
|
withTicket: ticket
|
||||||
forIdentifier: identifier];
|
forIdentifier: identifier];
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
#import <NGObjWeb/SoObject.h>
|
#import <NGObjWeb/SoObject.h>
|
||||||
#import <NGExtensions/NSObject+Logs.h>
|
#import <NGExtensions/NSObject+Logs.h>
|
||||||
|
|
||||||
#import "NSDictionary+BSJSONAdditions.h"
|
#import "NSDictionary+Utilities.h"
|
||||||
#import "NSString+Utilities.h"
|
#import "NSString+Utilities.h"
|
||||||
#import "SOGoObject.h"
|
#import "SOGoObject.h"
|
||||||
#import "SOGoSystemDefaults.h"
|
#import "SOGoSystemDefaults.h"
|
||||||
|
@ -484,7 +484,7 @@ static memcached_st *handle = NULL;
|
||||||
forPath: (NSString *) thePath
|
forPath: (NSString *) thePath
|
||||||
{
|
{
|
||||||
if (theACLs)
|
if (theACLs)
|
||||||
[self _cacheValues: [theACLs jsonStringValue]
|
[self _cacheValues: [theACLs jsonRepresentation]
|
||||||
ofType: @"acl"
|
ofType: @"acl"
|
||||||
forKey: thePath];
|
forKey: thePath];
|
||||||
else
|
else
|
||||||
|
|
|
@ -30,8 +30,8 @@
|
||||||
#import <NGExtensions/NSObject+Logs.h>
|
#import <NGExtensions/NSObject+Logs.h>
|
||||||
|
|
||||||
#import "NSArray+Utilities.h"
|
#import "NSArray+Utilities.h"
|
||||||
#import "NSDictionary+BSJSONAdditions.h"
|
|
||||||
#import "NSString+Utilities.h"
|
#import "NSString+Utilities.h"
|
||||||
|
#import "NSObject+Utilities.h"
|
||||||
#import "SOGoDomainDefaults.h"
|
#import "SOGoDomainDefaults.h"
|
||||||
#import "SOGoSource.h"
|
#import "SOGoSource.h"
|
||||||
#import "SOGoSystemDefaults.h"
|
#import "SOGoSystemDefaults.h"
|
||||||
|
@ -440,7 +440,7 @@
|
||||||
// internal cache.
|
// internal cache.
|
||||||
[currentUser setObject: _pwd forKey: @"password"];
|
[currentUser setObject: _pwd forKey: @"password"];
|
||||||
[[SOGoCache sharedCache]
|
[[SOGoCache sharedCache]
|
||||||
setUserAttributes: [currentUser jsonStringValue]
|
setUserAttributes: [currentUser jsonRepresentation]
|
||||||
forLogin: _login];
|
forLogin: _login];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -481,7 +481,7 @@
|
||||||
// internal cache.
|
// internal cache.
|
||||||
[currentUser setObject: newPassword forKey: @"password"];
|
[currentUser setObject: newPassword forKey: @"password"];
|
||||||
[[SOGoCache sharedCache]
|
[[SOGoCache sharedCache]
|
||||||
setUserAttributes: [currentUser jsonStringValue]
|
setUserAttributes: [currentUser jsonRepresentation]
|
||||||
forLogin: login];
|
forLogin: login];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -595,13 +595,13 @@
|
||||||
key = [newUser objectForKey: @"c_uid"];
|
key = [newUser objectForKey: @"c_uid"];
|
||||||
if (key)
|
if (key)
|
||||||
[[SOGoCache sharedCache]
|
[[SOGoCache sharedCache]
|
||||||
setUserAttributes: [newUser jsonStringValue]
|
setUserAttributes: [newUser jsonRepresentation]
|
||||||
forLogin: key];
|
forLogin: key];
|
||||||
|
|
||||||
emails = [[newUser objectForKey: @"emails"] objectEnumerator];
|
emails = [[newUser objectForKey: @"emails"] objectEnumerator];
|
||||||
while ((key = [emails nextObject]))
|
while ((key = [emails nextObject]))
|
||||||
[[SOGoCache sharedCache]
|
[[SOGoCache sharedCache]
|
||||||
setUserAttributes: [newUser jsonStringValue]
|
setUserAttributes: [newUser jsonRepresentation]
|
||||||
forLogin: key];
|
forLogin: key];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import <Foundation/NSCalendarDate.h>
|
#import <Foundation/NSCalendarDate.h>
|
||||||
|
#import <Foundation/NSDictionary.h>
|
||||||
#import <Foundation/NSPropertyList.h>
|
#import <Foundation/NSPropertyList.h>
|
||||||
#import <Foundation/NSValue.h>
|
#import <Foundation/NSValue.h>
|
||||||
|
|
||||||
|
@ -30,7 +31,6 @@
|
||||||
#import "NSObject+Utilities.h"
|
#import "NSObject+Utilities.h"
|
||||||
#import "NSString+Utilities.h"
|
#import "NSString+Utilities.h"
|
||||||
|
|
||||||
#import "NSDictionary+BSJSONAdditions.h"
|
|
||||||
#import "SOGoCache.h"
|
#import "SOGoCache.h"
|
||||||
|
|
||||||
#import "SOGoUserProfile.h"
|
#import "SOGoUserProfile.h"
|
||||||
|
@ -139,7 +139,7 @@
|
||||||
{
|
{
|
||||||
[self logWithFormat: @"database value for %@"
|
[self logWithFormat: @"database value for %@"
|
||||||
@" (uid: '%@') is a plist", [self profileTypeName], uid];
|
@" (uid: '%@') is a plist", [self profileTypeName], uid];
|
||||||
jsonValue = [plist jsonStringValue];
|
jsonValue = [plist jsonRepresentation];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -223,7 +223,7 @@
|
||||||
SOGoCache *cache;
|
SOGoCache *cache;
|
||||||
BOOL rc;
|
BOOL rc;
|
||||||
|
|
||||||
jsonRepresentation = [values jsonStringValue];
|
jsonRepresentation = [values jsonRepresentation];
|
||||||
if (jsonRepresentation)
|
if (jsonRepresentation)
|
||||||
{
|
{
|
||||||
rc = [self storeJSONProfileInDB: jsonRepresentation];
|
rc = [self storeJSONProfileInDB: jsonRepresentation];
|
||||||
|
|
|
@ -32,6 +32,6 @@ BUNDLE_LIBS += \
|
||||||
-lNGObjWeb \
|
-lNGObjWeb \
|
||||||
-lNGCards -lNGMime -lNGLdap \
|
-lNGCards -lNGMime -lNGLdap \
|
||||||
-lNGStreams -lNGExtensions -lEOControl \
|
-lNGStreams -lNGExtensions -lEOControl \
|
||||||
-lXmlRpc -lDOM -lSaxObjC
|
-lXmlRpc -lDOM -lSaxObjC -lSBJson
|
||||||
|
|
||||||
ADDITIONAL_BUNDLE_LIBS += $(BUNDLE_LIBS)
|
ADDITIONAL_BUNDLE_LIBS += $(BUNDLE_LIBS)
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
#import <NGExtensions/NSObject+Logs.h>
|
#import <NGExtensions/NSObject+Logs.h>
|
||||||
|
|
||||||
#import <SOGo/NSArray+Utilities.h>
|
#import <SOGo/NSArray+Utilities.h>
|
||||||
#import <SOGo/NSDictionary+BSJSONAdditions.h>
|
|
||||||
#import <SOGo/NSDictionary+Utilities.h>
|
#import <SOGo/NSDictionary+Utilities.h>
|
||||||
#import <SOGo/NSString+Utilities.h>
|
#import <SOGo/NSString+Utilities.h>
|
||||||
#import <SOGo/SOGoUser.h>
|
#import <SOGo/SOGoUser.h>
|
||||||
|
@ -659,9 +658,7 @@
|
||||||
[capabilities retain];
|
[capabilities retain];
|
||||||
}
|
}
|
||||||
|
|
||||||
return [[NSDictionary dictionary]
|
return [capabilities jsonRepresentation];
|
||||||
jsonStringForArray: capabilities
|
|
||||||
withIndentLevel: 0];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) isVacationEnabled
|
- (BOOL) isVacationEnabled
|
||||||
|
@ -683,9 +680,7 @@
|
||||||
|
|
||||||
- (NSString *) sieveFiltersValue
|
- (NSString *) sieveFiltersValue
|
||||||
{
|
{
|
||||||
return [[NSDictionary dictionary]
|
return [sieveFilters jsonRepresentation];
|
||||||
jsonStringForArray: sieveFilters
|
|
||||||
withIndentLevel: 0];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setEnableVacation: (BOOL) enableVacation
|
- (void) setEnableVacation: (BOOL) enableVacation
|
||||||
|
|
Loading…
Reference in New Issue