diff options
author | Jake Petroules <jake.petroules@petroules.com> | 2014-02-26 14:20:23 -0500 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-02-27 11:03:15 +0100 |
commit | aa80a961eb81f02b9f73ce4997a68ae0c6c9a13e (patch) | |
tree | a456eac03928a288d012b16a55ccc90caea69f56 /src | |
parent | 33af12a26c7fcd0d6c97e541caaf1765f3daf049 (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.mm | 26 |
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 |