Skip to content

Bugfix Parsequery Parsefile ParseGeopoint ParseEncoder #131

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 13 additions & 8 deletions lib/src/network/parse_query.dart
Original file line number Diff line number Diff line change
Expand Up @@ -283,19 +283,24 @@ class QueryBuilder<T extends ParseObject> {
/// Creates a query param using the column, the value and the queryOperator
/// that the column and value are being queried against
MapEntry<String, dynamic> _buildQueryWithColumnValueAndOperator(
MapEntry columnAndValue, String queryOperator) {
MapEntry<String, dynamic> columnAndValue, String queryOperator) {
final String key = columnAndValue.key;
final dynamic value = convertValueToCorrectType(parseEncode(columnAndValue.value));
final dynamic value =
convertValueToCorrectType(columnAndValue.value);

if (queryOperator == _NO_OPERATOR_NEEDED) {
return MapEntry<String, dynamic>(
_NO_OPERATOR_NEEDED, "\"${key}\": $value");
_NO_OPERATOR_NEEDED, '\"${key}\": $value');
} else {
String queryString = '\"$key\":';
final Map<String, dynamic> queryOperatorAndValueMap = Map<String, dynamic>();
queryOperatorAndValueMap[queryOperator] = parseEncode(value);
final String formattedQueryOperatorAndValue = jsonEncode(queryOperatorAndValueMap);

final Map<String, dynamic> queryOperatorAndValueMap =
Map<String, dynamic>();
queryOperatorAndValueMap[queryOperator] = value;
final String formattedQueryOperatorAndValue =
JsonEncoder().convert(queryOperatorAndValueMap);
queryString += '$formattedQueryOperatorAndValue';

return MapEntry<String, dynamic>(key, queryString);
}
}
Expand Down Expand Up @@ -334,8 +339,8 @@ class QueryBuilder<T extends ParseObject> {

// Compact all the queries in the correct format
for (MapEntry<String, dynamic> queryToCompact in listOfQueriesCompact) {
var queryToCompactValue = queryToCompact.value.toString();
queryToCompactValue = queryToCompactValue.replaceFirst("{", "");
String queryToCompactValue = queryToCompact.value.toString();
queryToCompactValue = queryToCompactValue.replaceFirst('{', '');
queryToCompactValue = queryToCompactValue.replaceRange(queryToCompactValue.length - 1, queryToCompactValue.length, "");
if (listOfQueriesCompact.first == queryToCompact) {
queryEnd += queryToCompactValue.replaceAll(queryStart, ' ');
Expand Down
6 changes: 0 additions & 6 deletions lib/src/objects/parse_base.dart
Original file line number Diff line number Diff line change
Expand Up @@ -205,10 +205,4 @@ abstract class ParseBase {
}
return null;
}

Map<String, String> toPointer() => <String, String>{
'__type': 'Pointer',
keyVarClassName: className,
keyVarObjectId: objectId
};
}
9 changes: 5 additions & 4 deletions lib/src/objects/parse_file.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ class ParseFile extends ParseObject {
securityContext: ParseCoreData().securityContext);

if (file != null) {
name = path.basename(file.path);
this.name = path.basename(file.path);
_path = '/files/$name';
} else {
name = name;
url = url;
this.name = name;
this.url = url;
}
}

Expand All @@ -42,7 +42,7 @@ class ParseFile extends ParseObject {
<String, String>{'__type': keyFile, 'name': name, 'url': url};

@override
String toString() => json.encode(toString());
String toString() => json.encode(toJson());

Future<ParseFile> loadStorage() async {
final Directory tempPath = await getTemporaryDirectory();
Expand Down Expand Up @@ -73,6 +73,7 @@ class ParseFile extends ParseObject {
final Directory tempPath = await getTemporaryDirectory();
file = File('${tempPath.path}/$name');
await file.create();

final Response response = await _client.get(url);
await file.writeAsBytes(response.bodyBytes);

Expand Down
4 changes: 2 additions & 2 deletions lib/src/objects/parse_geo_point.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ class ParseGeoPoint extends ParseObject {
bool autoSendSessionId})
: super(keyGeoPoint) {

latitude = latitude;
longitude = longitude;
this.latitude = latitude;
this.longitude = longitude;

_debug = isDebugEnabled(objectLevelDebug: debug);
_client = client ??
Expand Down
2 changes: 1 addition & 1 deletion lib/src/objects/parse_installation.dart
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ class ParseInstallation extends ParseObject {
(await ParseCoreData().getStore()).getString(keyParseStoreInstallation);

if (installationJson != null) {
final dynamic installationMap = parseDecode(json.decode(installationJson));
final dynamic installationMap = json.decode(installationJson);

if (installationMap != null) {
return ParseInstallation()..fromJson(installationMap);
Expand Down
3 changes: 3 additions & 0 deletions lib/src/objects/parse_object.dart
Original file line number Diff line number Diff line change
Expand Up @@ -272,4 +272,7 @@ class ParseObject extends ParseBase implements ParseCloneable {
return handleException(e, ParseApiRQ.delete, _debug, className);
}
}

/// Converts the object to a Pointer to be used ONLY in queries using Pointers
String toPointer() => json.encode(parseEncode(this));
}
23 changes: 20 additions & 3 deletions lib/src/utils/parse_encoder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,16 @@ dynamic parseEncode(dynamic value, {bool full}) {
return _encodeDate(value);
}

if (value is List) {
return value.map((v) {
return parseEncode(v);
}).toList();
}

if (value is ParseGeoPoint) {
return value;
}

if (value is ParseFile) {
return value;
}
Expand All @@ -32,7 +38,7 @@ dynamic parseEncode(dynamic value, {bool full}) {
if (full) {
return value.toJson(full: full);
} else {
return value.toPointer();
return _encodeObject(value);
}
}

Expand All @@ -44,5 +50,16 @@ Map<String, dynamic> _encodeUint8List(Uint8List value) {
}

Map<String, dynamic> _encodeDate(DateTime date) {
return <String, dynamic>{'__type': 'Date', 'iso': _parseDateFormat.format(date)};
return <String, dynamic>{
'__type': 'Date',
'iso': _parseDateFormat.format(date)
};
}

Map<String, dynamic> _encodeObject(ParseObject object) {
return {
'__type': 'Pointer',
keyVarClassName: object.className,
keyVarObjectId: object.objectId
};
}
5 changes: 2 additions & 3 deletions lib/src/utils/parse_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,8 @@ bool isDebugEnabled({bool objectLevelDebug}) {
dynamic convertValueToCorrectType(dynamic value) {
if (value is String && !value.contains('__type')) {
return '\"$value\"';
}

if (value is DateTime || value is ParseObject) {
}
if (value is DateTime || value is ParseObject || value is ParseUser) {
return parseEncode(value);
} else {
return value;
Expand Down