mirror of
https://github.com/status-im/realm-js.git
synced 2025-02-22 11:18:15 +00:00
serialize Results like other types, use common method rpc call for objects()
This commit is contained in:
parent
ed3cf01432
commit
afa974ccc6
@ -112,24 +112,6 @@ static JSGlobalContextRef s_context;
|
||||
s_objects.erase(oid);
|
||||
return @{};
|
||||
};
|
||||
s_requests["/get_objects"] = [=](NSDictionary *dict) {
|
||||
RPCObjectID realmId = [dict[@"realmId"] longValue];
|
||||
|
||||
JSValueRef arguments[2];
|
||||
long argumentCount = 1;
|
||||
arguments[0] = RJSValueForString(s_context, [dict[@"type"] UTF8String]);
|
||||
|
||||
NSString *query = dict[@"predicate"];
|
||||
if (query) {
|
||||
arguments[1] = RJSValueForString(s_context, query.UTF8String);
|
||||
}
|
||||
|
||||
JSValueRef exception = NULL;
|
||||
JSValueRef results = RealmObjects(s_context, NULL, s_objects[realmId], argumentCount, arguments, &exception);
|
||||
RPCObjectID resultsId = [self storeObject:(JSObjectRef)results];
|
||||
size_t size = RJSGetInternal<realm::Results *>((JSObjectRef)results)->size();
|
||||
return @{@"result": @{@"resultsId": @(resultsId), @"size": @(size)}};
|
||||
};
|
||||
s_requests["/get_results_size"] = [=](NSDictionary *dict) {
|
||||
RPCObjectID resultsId = [dict[@"resultsId"] longValue];
|
||||
|
||||
@ -273,6 +255,15 @@ static JSGlobalContextRef s_context;
|
||||
@"schema": [self objectSchemaToJSONObject:array->object_schema]
|
||||
};
|
||||
}
|
||||
else if (JSValueIsObjectOfClass(s_context, value, RJSResultsClass())) {
|
||||
realm::Results *results = RJSGetInternal<realm::Results *>(jsObject);
|
||||
return @{
|
||||
@"type": @"PrivateTypesRESULTS",
|
||||
@"resultsId": @(oid),
|
||||
@"size": @(results->size()),
|
||||
@"schema": [self objectSchemaToJSONObject:results->object_schema]
|
||||
};
|
||||
}
|
||||
else if (RJSIsValueArray(s_context, value)) {
|
||||
JSObjectRef jsObject = JSValueToObject(s_context, value, NULL);
|
||||
size_t length = RJSValidatedArrayLength(s_context, jsObject);
|
||||
|
@ -13,6 +13,7 @@ let realmKey = util.realmKey;
|
||||
rpc.registerTypeConverter(types.DATE, (_, info) => new Date(info.value));
|
||||
rpc.registerTypeConverter(types.LIST, lists.create);
|
||||
rpc.registerTypeConverter(types.OBJECT, objects.create);
|
||||
rpc.registerTypeConverter(types.RESULTS, results.create);
|
||||
|
||||
class Realm {
|
||||
constructor(config) {
|
||||
@ -38,13 +39,6 @@ class Realm {
|
||||
// TODO
|
||||
}
|
||||
|
||||
objects(type, predicate) {
|
||||
let realmId = this[realmKey];
|
||||
let info = rpc.getObjects(realmId, type, predicate);
|
||||
|
||||
return results.create(realmId, info);
|
||||
}
|
||||
|
||||
write(callback) {
|
||||
if (typeof callback != 'function')
|
||||
throw new TypeError('Realm.write() must be passed a function!');
|
||||
@ -66,6 +60,7 @@ class Realm {
|
||||
'create',
|
||||
'delete',
|
||||
'deleteAll',
|
||||
'objects',
|
||||
].forEach(function(name) {
|
||||
Object.defineProperty(Realm.prototype, name, {
|
||||
value: function() {
|
||||
|
@ -21,7 +21,6 @@ exports.registerTypeConverter = registerTypeConverter;
|
||||
|
||||
exports.createRealm = createRealm;
|
||||
exports.callRealmMethod = callRealmMethod;
|
||||
exports.getObjects = getObjects;
|
||||
|
||||
exports.getObjectProperty = getObjectProperty;
|
||||
exports.setObjectProperty = setObjectProperty;
|
||||
@ -55,10 +54,6 @@ function callRealmMethod(realmId, name, args) {
|
||||
return deserialize(realmId, result);
|
||||
}
|
||||
|
||||
function getObjects(realmId, type, predicate) {
|
||||
return sendRequest('get_objects', {realmId, type, predicate});
|
||||
}
|
||||
|
||||
function getObjectProperty(realmId, objectId, name) {
|
||||
let result = sendRequest('get_property', {realmId, objectId, name});
|
||||
return deserialize(realmId, result);
|
||||
|
@ -16,4 +16,6 @@ let types = {};
|
||||
types[type] = 'PropTypes' + type;
|
||||
});
|
||||
|
||||
types['RESULTS'] = 'PrivateTypesRESULTS';
|
||||
|
||||
module.exports = Object.freeze(types);
|
||||
|
Loading…
x
Reference in New Issue
Block a user