aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@petroules.com>2014-02-26 14:20:23 -0500
committerJoerg Bornemann <joerg.bornemann@digia.com>2014-02-27 11:03:15 +0100
commitaa80a961eb81f02b9f73ce4997a68ae0c6c9a13e (patch)
treea456eac03928a288d012b16a55ccc90caea69f56 /src
parent33af12a26c7fcd0d6c97e541caaf1765f3daf049 (diff)
Add support for reading JSON plists in the PropertyList extension.
Change-Id: I3e0386373c2b4a530a9c4c77f5db6d84c7d0043f Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/lib/corelib/jsextensions/propertylist.mm26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/lib/corelib/jsextensions/propertylist.mm b/src/lib/corelib/jsextensions/propertylist.mm
index 76dce37c2..cb9b37bca 100644
--- a/src/lib/corelib/jsextensions/propertylist.mm
+++ b/src/lib/corelib/jsextensions/propertylist.mm
@@ -130,31 +130,47 @@ void PropertyList::readFromFile(const QString &filePath)
void PropertyListPrivate::readFromData(QScriptContext *context, NSData *data)
{
NSError *error = nil;
+ NSString *errorString = nil;
id plist = nil;
+
if ([NSPropertyListSerialization
respondsToSelector:@selector(propertyListWithData:options:format:error:)]) {
error = nil;
+ errorString = nil;
plist = [NSPropertyListSerialization propertyListWithData:data
options:0
format:NULL error:&error];
if (Q_UNLIKELY(!plist)) {
- context->throwError(fromNSString([error localizedDescription]));
+ errorString = [error localizedDescription];
}
}
else
{
- NSString *errorString = nil;
+ error = nil;
+ errorString = nil;
plist = [NSPropertyListSerialization propertyListFromData:data
mutabilityOption:NSPropertyListImmutable
format:NULL
errorDescription:&errorString];
+ }
+
+#if __MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_7
+ if (!plist && NSClassFromString(@"NSJSONSerialization")) {
+ error = nil;
+ errorString = nil;
+ plist = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
if (Q_UNLIKELY(!plist)) {
- context->throwError(fromNSString(errorString));
+ errorString = [error localizedDescription];
}
}
+#endif
- [propertyListObject release];
- propertyListObject = [plist retain];
+ if (Q_UNLIKELY(!plist)) {
+ context->throwError(fromNSString(errorString));
+ } else {
+ [propertyListObject release];
+ propertyListObject = [plist retain];
+ }
}
QString PropertyList::toXMLString() const