Skip to content

Commit 06f9f69

Browse files
authored
Merge branch 'master' into master
2 parents f56250d + b07ce8c commit 06f9f69

40 files changed

+1334
-406
lines changed

packages/dart/CHANGELOG.md

+60
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,63 @@
1+
## [3.1.13](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.12...dart-3.1.13) (2023-02-15)
2+
3+
### Bug Fixes
4+
5+
* `ParseUser.save` fails when user is logged in ([#819](https://github.com/parse-community/Parse-SDK-Flutter/issues/819))
6+
7+
## [3.1.12](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.11...dart-3.1.12) (2023-02-01)
8+
9+
### Bug Fixes
10+
11+
* `ParseObject.fromJson` does not send proper payload to server ([#688](https://github.com/parse-community/Parse-SDK-Flutter/issues/688))
12+
13+
## [3.1.11](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.10...dart-3.1.11) (2023-01-21)
14+
15+
### Features
16+
17+
* Add query constraint `wherePolygonContains` to determine whether a point in within a polygon ([#777](https://github.com/parse-community/Parse-SDK-Flutter/issues/777))
18+
19+
## [3.1.10](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.9...dart-3.1.10) (2023-01-16)
20+
21+
### Bug Fixes
22+
23+
* Time zone data not set in `ParseInstallation` ([#96](https://github.com/parse-community/Parse-SDK-Flutter/issues/96))
24+
25+
## [3.1.9](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.8...dart-3.1.9) (2022-12-25)
26+
27+
### Bug Fixes
28+
29+
* Include option in `getObject` feature is not working ([#813](https://github.com/parse-community/Parse-SDK-Flutter/issues/813))
30+
31+
## [3.1.8](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.7...dart-3.1.8) (2022-12-23)
32+
33+
### Features
34+
35+
* Add `ParseObject.toJson()` to create a JSON representation ([#616](https://github.com/parse-community/Parse-SDK-Flutter/issues/616))
36+
37+
## [3.1.7](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.6...dart-3.1.7) (2022-12-22)
38+
39+
### Features
40+
41+
* Add `include` option to `getObject` and `fetch` ([#798](https://github.com/parse-community/Parse-SDK-Flutter/issues/798))
42+
43+
## [3.1.6](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.5...dart-3.1.6) (2022-12-21)
44+
45+
### Bug Fixes
46+
47+
* Add `and`, `nor` operators in QueryBuilder ([#795](https://github.com/parse-community/Parse-SDK-Flutter/issues/795))
48+
49+
## [3.1.5](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.4...dart-3.1.5) (2022-12-16)
50+
51+
### Bug Fixes
52+
53+
* Add upload / download cancel and progress callback for ParseFile ([#807](https://github.com/parse-community/Parse-SDK-Flutter/issues/807))
54+
55+
## [3.1.4](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.3...dart-3.1.4) (2022-12-14)
56+
57+
### Bug Fixes
58+
59+
* SDK crashes due to missing error code property in `ParseNetworkResponse.data` ([#799](https://github.com/parse-community/Parse-SDK-Flutter/issues/799))
60+
161
## [3.1.3](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.2...dart-3.1.3) (2022-11-15)
262

363
### Bug Fixes

packages/dart/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,8 @@ QueryBuilder<ParseObject> mainQuery = QueryBuilder.or(
313313
var apiResponse = await mainQuery.query();
314314
```
315315

316+
To find objects that match several queries use __QueryBuilder.and__. To find objects that do not match any given query use __QueryBuilder.nor__.
317+
316318
The features available are:-
317319
* Equals
318320
* Contains

packages/dart/lib/parse_server_sdk.dart

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ import 'dart:convert';
55
import 'dart:io';
66
import 'dart:math';
77
import 'dart:typed_data';
8-
98
import 'package:dio/dio.dart';
109
import 'package:meta/meta.dart';
1110
import 'package:mime_type/mime_type.dart';
1211
import 'package:path/path.dart' as path;
1312
import 'package:sembast/sembast.dart';
1413
import 'package:sembast/sembast_io.dart';
1514
import 'package:sembast_web/sembast_web.dart';
15+
import 'package:timezone/data/latest.dart' as tz;
16+
import 'package:timezone/timezone.dart' as tz;
1617
import 'package:uuid/uuid.dart';
1718
import 'package:web_socket_channel/web_socket_channel.dart';
1819
import 'package:xxtea/xxtea.dart';

packages/dart/lib/src/base/parse_constants.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
part of flutter_parse_sdk;
22

33
// Library
4-
const String keySdkVersion = '3.1.2';
4+
const String keySdkVersion = '3.1.13';
55
const String keyLibraryName = 'Flutter Parse SDK';
66

77
// End Points

packages/dart/lib/src/network/parse_client.dart

+2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ abstract class ParseClient {
2727
Stream<List<int>>? data,
2828
ParseNetworkOptions? options,
2929
ProgressCallback? onSendProgress,
30+
dynamic cancelToken,
3031
});
3132

3233
Future<ParseNetworkResponse> delete(
@@ -38,6 +39,7 @@ abstract class ParseClient {
3839
String path, {
3940
ParseNetworkOptions? options,
4041
ProgressCallback? onReceiveProgress,
42+
dynamic cancelToken,
4143
});
4244

4345
// Future<ParseNetworkByteResponse> putBytes(

packages/dart/lib/src/network/parse_dio_client.dart

+26-5
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,26 @@ class ParseDioClient extends ParseClient {
4040
String path, {
4141
ParseNetworkOptions? options,
4242
ProgressCallback? onReceiveProgress,
43+
dynamic cancelToken,
4344
}) async {
4445
try {
4546
final dio.Response<List<int>> dioResponse = await _client.get<List<int>>(
4647
path,
48+
cancelToken: cancelToken,
49+
onReceiveProgress: onReceiveProgress,
4750
options: _Options(
4851
headers: options?.headers, responseType: dio.ResponseType.bytes),
4952
);
5053
return ParseNetworkByteResponse(
5154
bytes: dioResponse.data, statusCode: dioResponse.statusCode!);
5255
} on dio.DioError catch (error) {
53-
return ParseNetworkByteResponse(
54-
data: error.response?.data, statusCode: error.response!.statusCode!);
56+
if (error.response != null) {
57+
return ParseNetworkByteResponse(
58+
data: error.response?.data,
59+
statusCode: error.response!.statusCode!);
60+
} else {
61+
return _getOtherCaseErrorForParseNetworkResponse(error.error);
62+
}
5563
}
5664
}
5765

@@ -93,22 +101,35 @@ class ParseDioClient extends ParseClient {
93101
Future<ParseNetworkResponse> postBytes(String path,
94102
{Stream<List<int>>? data,
95103
ParseNetworkOptions? options,
96-
ProgressCallback? onSendProgress}) async {
104+
ProgressCallback? onSendProgress,
105+
dynamic cancelToken}) async {
97106
try {
98107
final dio.Response<String> dioResponse = await _client.post<String>(
99108
path,
100109
data: data,
110+
cancelToken: cancelToken,
101111
options: _Options(headers: options?.headers),
102112
onSendProgress: onSendProgress,
103113
);
104114
return ParseNetworkResponse(
105115
data: dioResponse.data!, statusCode: dioResponse.statusCode!);
106116
} on dio.DioError catch (error) {
107-
return ParseNetworkResponse(
108-
data: error.response?.data, statusCode: error.response!.statusCode!);
117+
if (error.response != null) {
118+
return ParseNetworkResponse(
119+
data: error.response?.data,
120+
statusCode: error.response!.statusCode!);
121+
} else {
122+
return _getOtherCaseErrorForParseNetworkResponse(error.error);
123+
}
109124
}
110125
}
111126

127+
_getOtherCaseErrorForParseNetworkResponse(String error) {
128+
return ParseNetworkResponse(
129+
data: "{\"code\":${ParseError.otherCause},\"error\":\"$error\"}",
130+
statusCode: ParseError.otherCause);
131+
}
132+
112133
@override
113134
Future<ParseNetworkResponse> delete(String path,
114135
{ParseNetworkOptions? options}) async {

packages/dart/lib/src/network/parse_http_client.dart

+2
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class ParseHTTPClient extends ParseClient {
4040
String path, {
4141
ParseNetworkOptions? options,
4242
ProgressCallback? onReceiveProgress,
43+
dynamic cancelToken,
4344
}) async {
4445
final http.Response response = await _client.get(
4546
Uri.parse(path),
@@ -85,6 +86,7 @@ class ParseHTTPClient extends ParseClient {
8586
Stream<List<int>>? data,
8687
ParseNetworkOptions? options,
8788
ProgressCallback? onSendProgress,
89+
dynamic cancelToken,
8890
}) async {
8991
final http.Response response = await _client.post(
9092
Uri.parse(path),

packages/dart/lib/src/network/parse_live_query.dart

+20-20
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class Subscription<T extends ParseObject> {
3131
}
3232
}
3333

34-
enum LiveQueryClientEvent { CONNECTED, DISCONNECTED, USER_DISCONNECTED }
34+
enum LiveQueryClientEvent { connected, disconnected, userDisconnected }
3535

3636
class LiveQueryReconnectingController {
3737
LiveQueryReconnectingController(
@@ -50,16 +50,16 @@ class LiveQueryReconnectingController {
5050
}
5151
_eventStream.listen((LiveQueryClientEvent event) {
5252
switch (event) {
53-
case LiveQueryClientEvent.CONNECTED:
53+
case LiveQueryClientEvent.connected:
5454
_isConnected = true;
5555
_retryState = 0;
5656
_userDisconnected = false;
5757
break;
58-
case LiveQueryClientEvent.DISCONNECTED:
58+
case LiveQueryClientEvent.disconnected:
5959
_isConnected = false;
6060
_setReconnect();
6161
break;
62-
case LiveQueryClientEvent.USER_DISCONNECTED:
62+
case LiveQueryClientEvent.userDisconnected:
6363
_userDisconnected = true;
6464
Timer? currentTimer = _currentTimer;
6565
if (currentTimer != null) {
@@ -70,14 +70,14 @@ class LiveQueryReconnectingController {
7070
}
7171

7272
if (debug) {
73-
print('$DEBUG_TAG: $event');
73+
print('$debugTag: $event');
7474
}
7575
});
7676
ParseCoreData().appResumedStream?.listen((void _) => _setReconnect());
7777
}
7878

7979
static List<int> get retryInterval => ParseCoreData().liveListRetryIntervals;
80-
static const String DEBUG_TAG = 'LiveQueryReconnectingController';
80+
static const String debugTag = 'LiveQueryReconnectingController';
8181

8282
final Function _reconnect;
8383
final Stream<LiveQueryClientEvent> _eventStream;
@@ -99,7 +99,7 @@ class LiveQueryReconnectingController {
9999
_isConnected = false;
100100
}
101101
if (debug) {
102-
print('$DEBUG_TAG: $state');
102+
print('$debugTag: $state');
103103
}
104104
_setReconnect();
105105
}
@@ -116,7 +116,7 @@ class LiveQueryReconnectingController {
116116
_reconnect();
117117
});
118118
if (debug) {
119-
print('$DEBUG_TAG: Retrytimer set to ${retryInterval[_retryState]}ms');
119+
print('$debugTag: Retry timer set to ${retryInterval[_retryState]}ms');
120120
}
121121
if (_retryState < retryInterval.length - 1) {
122122
_retryState++;
@@ -188,13 +188,13 @@ class LiveQueryClient {
188188
if (webSocket != null) {
189189
return webSocket.readyState;
190190
}
191-
return parse_web_socket.WebSocket.CONNECTING;
191+
return parse_web_socket.WebSocket.connecting;
192192
}
193193

194194
Future<dynamic> disconnect({bool userInitialized = false}) async {
195195
parse_web_socket.WebSocket? webSocket = _webSocket;
196196
if (webSocket != null &&
197-
webSocket.readyState == parse_web_socket.WebSocket.OPEN) {
197+
webSocket.readyState == parse_web_socket.WebSocket.open) {
198198
if (_debug) {
199199
print('$_printConstLiveQuery: Socket closed');
200200
}
@@ -215,7 +215,7 @@ class LiveQueryClient {
215215
_connecting = false;
216216
if (userInitialized) {
217217
_clientEventStreamController.sink
218-
.add(LiveQueryClientEvent.USER_DISCONNECTED);
218+
.add(LiveQueryClientEvent.userDisconnected);
219219
}
220220
}
221221

@@ -224,7 +224,7 @@ class LiveQueryClient {
224224
{T? copyObject}) async {
225225
if (_webSocket == null) {
226226
await _clientEventStream.any((LiveQueryClientEvent event) =>
227-
event == LiveQueryClientEvent.CONNECTED);
227+
event == LiveQueryClientEvent.connected);
228228
}
229229
final int requestId = _requestIdGenerator();
230230
final Subscription<T> subscription =
@@ -272,7 +272,7 @@ class LiveQueryClient {
272272
await parse_web_socket.WebSocket.connect(_liveQueryURL);
273273
_webSocket = webSocket;
274274
_connecting = false;
275-
if (webSocket.readyState == parse_web_socket.WebSocket.OPEN) {
275+
if (webSocket.readyState == parse_web_socket.WebSocket.open) {
276276
if (_debug) {
277277
print('$_printConstLiveQuery: Socket opened');
278278
}
@@ -288,13 +288,13 @@ class LiveQueryClient {
288288
_handleMessage(message);
289289
}, onDone: () {
290290
_clientEventStreamController.sink
291-
.add(LiveQueryClientEvent.DISCONNECTED);
291+
.add(LiveQueryClientEvent.disconnected);
292292
if (_debug) {
293293
print('$_printConstLiveQuery: Done');
294294
}
295295
}, onError: (Object error) {
296296
_clientEventStreamController.sink
297-
.add(LiveQueryClientEvent.DISCONNECTED);
297+
.add(LiveQueryClientEvent.disconnected);
298298
if (_debug) {
299299
print(
300300
'$_printConstLiveQuery: Error: ${error.runtimeType.toString()}');
@@ -307,7 +307,7 @@ class LiveQueryClient {
307307
});
308308
} on Exception catch (e) {
309309
_connecting = false;
310-
_clientEventStreamController.sink.add(LiveQueryClientEvent.DISCONNECTED);
310+
_clientEventStreamController.sink.add(LiveQueryClientEvent.disconnected);
311311
if (_debug) {
312312
print('$_printConstLiveQuery: Error: ${e.toString()}');
313313
}
@@ -390,12 +390,12 @@ class LiveQueryClient {
390390

391391
Subscription? subscription;
392392
if (actionData.containsKey('op') && actionData['op'] == 'connected') {
393-
print('ReSubScription:$_requestSubscription');
393+
print('Re subscription:$_requestSubscription');
394394

395-
_requestSubscription.values.toList().forEach((Subscription subcription) {
396-
_subscribeLiveQuery(subcription);
395+
_requestSubscription.values.toList().forEach((Subscription subscription) {
396+
_subscribeLiveQuery(subscription);
397397
});
398-
_clientEventStreamController.sink.add(LiveQueryClientEvent.CONNECTED);
398+
_clientEventStreamController.sink.add(LiveQueryClientEvent.connected);
399399
return;
400400
}
401401
if (actionData.containsKey('requestId')) {

0 commit comments

Comments
 (0)