|
|
|
@@ -76,127 +76,62 @@ inline NSURL* createNSURLFromFile (const File& f) |
|
|
|
|
|
|
|
inline NSArray* createNSArrayFromStringArray (const StringArray& strings)
|
|
|
|
{
|
|
|
|
auto array = [[NSMutableArray alloc] init];
|
|
|
|
auto array = [[NSMutableArray alloc] initWithCapacity: (NSUInteger) strings.size()];
|
|
|
|
|
|
|
|
for (auto string: strings)
|
|
|
|
[array addObject:juceStringToNS (string)];
|
|
|
|
for (const auto& string: strings)
|
|
|
|
[array addObject: juceStringToNS (string)];
|
|
|
|
|
|
|
|
return [array autorelease];
|
|
|
|
}
|
|
|
|
|
|
|
|
inline NSArray* varArrayToNSArray (const var& varToParse);
|
|
|
|
|
|
|
|
inline NSDictionary* varObjectToNSDictionary (const var& varToParse)
|
|
|
|
inline NSData* varToJsonData (const var& varToParse)
|
|
|
|
{
|
|
|
|
auto dictionary = [NSMutableDictionary dictionary];
|
|
|
|
|
|
|
|
if (varToParse.isObject())
|
|
|
|
{
|
|
|
|
auto* dynamicObject = varToParse.getDynamicObject();
|
|
|
|
|
|
|
|
auto& properties = dynamicObject->getProperties();
|
|
|
|
|
|
|
|
for (int i = 0; i < properties.size(); ++i)
|
|
|
|
{
|
|
|
|
auto* keyString = juceStringToNS (properties.getName (i).toString());
|
|
|
|
|
|
|
|
const var& valueVar = properties.getValueAt (i);
|
|
|
|
|
|
|
|
if (valueVar.isObject())
|
|
|
|
{
|
|
|
|
auto* valueDictionary = varObjectToNSDictionary (valueVar);
|
|
|
|
|
|
|
|
[dictionary setObject: valueDictionary forKey: keyString];
|
|
|
|
}
|
|
|
|
else if (valueVar.isArray())
|
|
|
|
{
|
|
|
|
auto* valueArray = varArrayToNSArray (valueVar);
|
|
|
|
|
|
|
|
[dictionary setObject: valueArray forKey: keyString];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
auto* valueString = juceStringToNS (valueVar.toString());
|
|
|
|
|
|
|
|
[dictionary setObject: valueString forKey: keyString];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return dictionary;
|
|
|
|
return [juceStringToNS (JSON::toString (varToParse)) dataUsingEncoding: NSUTF8StringEncoding];
|
|
|
|
}
|
|
|
|
|
|
|
|
inline NSArray* varArrayToNSArray (const var& varToParse)
|
|
|
|
inline var jsonDataToVar (NSData* jsonData)
|
|
|
|
{
|
|
|
|
jassert (varToParse.isArray());
|
|
|
|
auto* jsonString = [[NSString alloc] initWithData: jsonData
|
|
|
|
encoding: NSUTF8StringEncoding];
|
|
|
|
|
|
|
|
if (! varToParse.isArray())
|
|
|
|
return nil;
|
|
|
|
|
|
|
|
const auto* varArray = varToParse.getArray();
|
|
|
|
|
|
|
|
auto array = [NSMutableArray arrayWithCapacity: (NSUInteger) varArray->size()];
|
|
|
|
|
|
|
|
for (const auto& aVar : *varArray)
|
|
|
|
{
|
|
|
|
if (aVar.isObject())
|
|
|
|
{
|
|
|
|
auto* valueDictionary = varObjectToNSDictionary (aVar);
|
|
|
|
|
|
|
|
[array addObject: valueDictionary];
|
|
|
|
}
|
|
|
|
else if (aVar.isArray())
|
|
|
|
{
|
|
|
|
auto* valueArray = varArrayToNSArray (aVar);
|
|
|
|
|
|
|
|
[array addObject: valueArray];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
auto* valueString = juceStringToNS (aVar.toString());
|
|
|
|
|
|
|
|
[array addObject: valueString];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return array;
|
|
|
|
jassert (jsonString != nullptr);
|
|
|
|
return JSON::parse (nsStringToJuce ([jsonString autorelease]));
|
|
|
|
}
|
|
|
|
|
|
|
|
var nsObjectToVar (NSObject* array);
|
|
|
|
|
|
|
|
inline var nsDictionaryToVar (NSDictionary* dictionary)
|
|
|
|
inline NSDictionary* varObjectToNSDictionary (const var& varToParse)
|
|
|
|
{
|
|
|
|
DynamicObject::Ptr dynamicObject (new DynamicObject());
|
|
|
|
jassert (varToParse.isObject());
|
|
|
|
|
|
|
|
if (! varToParse.isObject())
|
|
|
|
return nullptr;
|
|
|
|
|
|
|
|
NSError* error { nullptr };
|
|
|
|
NSDictionary* dictionary = [NSJSONSerialization JSONObjectWithData: varToJsonData (varToParse)
|
|
|
|
options: NSJSONReadingMutableContainers
|
|
|
|
error: &error];
|
|
|
|
|
|
|
|
for (NSString* key in dictionary)
|
|
|
|
dynamicObject->setProperty (nsStringToJuce (key), nsObjectToVar ([dictionary objectForKey: key]));
|
|
|
|
jassert (error == nullptr);
|
|
|
|
jassert (dictionary != nullptr);
|
|
|
|
|
|
|
|
return var (dynamicObject.get());
|
|
|
|
return dictionary;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline var nsArrayToVar (NSArray* array)
|
|
|
|
inline NSData* jsonObjectToData (const NSObject* jsonObject)
|
|
|
|
{
|
|
|
|
Array<var> resultArray;
|
|
|
|
NSError* error { nullptr };
|
|
|
|
auto* jsonData = [NSJSONSerialization dataWithJSONObject: jsonObject
|
|
|
|
options: 0
|
|
|
|
error: &error];
|
|
|
|
|
|
|
|
for (id value in array)
|
|
|
|
resultArray.add (nsObjectToVar (value));
|
|
|
|
jassert (error == nullptr);
|
|
|
|
jassert (jsonData != nullptr);
|
|
|
|
|
|
|
|
return var (resultArray);
|
|
|
|
return jsonData;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline var nsObjectToVar (NSObject* obj)
|
|
|
|
inline var nsDictionaryToVar (NSDictionary* dictionary)
|
|
|
|
{
|
|
|
|
if ([obj isKindOfClass: [NSString class]]) return nsStringToJuce ((NSString*) obj);
|
|
|
|
else if ([obj isKindOfClass: [NSNumber class]]) return nsStringToJuce ([(NSNumber*) obj stringValue]);
|
|
|
|
else if ([obj isKindOfClass: [NSDictionary class]]) return nsDictionaryToVar ((NSDictionary*) obj);
|
|
|
|
else if ([obj isKindOfClass: [NSArray class]]) return nsArrayToVar ((NSArray*) obj);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// Unsupported yet, add here!
|
|
|
|
jassertfalse;
|
|
|
|
}
|
|
|
|
|
|
|
|
return {};
|
|
|
|
return jsonDataToVar (jsonObjectToData (dictionary));
|
|
|
|
}
|
|
|
|
|
|
|
|
#if JUCE_MAC
|
|
|
|
|