Skip to content

Commit 970011c

Browse files
authored
Merge pull request #67 from klanmiko/master
Fix User objects not saving, Add support for Parse Files, Anonymous Login
2 parents 9c70784 + 92bd333 commit 970011c

File tree

7 files changed

+92
-7
lines changed

7 files changed

+92
-7
lines changed

lib/parse.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import 'package:meta/meta.dart';
1010
import 'package:path/path.dart' as path;
1111
import 'package:shared_preferences/shared_preferences.dart';
1212
import 'package:web_socket_channel/io.dart';
13+
import 'package:uuid/uuid.dart';
14+
import 'package:path_provider/path_provider.dart';
1315

1416
part 'src/base/parse_constants.dart';
1517

lib/src/base/parse_constants.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const String keyLibraryName= 'Flutter Parse SDK';
77
// End Points
88
const String keyEndPointUserName = '/users/me';
99
const String keyEndPointLogin = '/login';
10+
const String keyEndPointUsers = '/users';
1011
const String keyEndPointVerificationEmail = '/verificationEmailRequest';
1112
const String keyEndPointRequestPasswordReset = '/requestPasswordReset';
1213
const String keyEndPointClasses = '/classes/';

lib/src/enums/parse_enum_api_rq.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ enum ParseApiRQ {
1212
currentUser,
1313
signUp,
1414
login,
15+
loginAnonymous,
1516
verificationEmailRequest,
1617
requestPasswordReset,
1718
destroy,

lib/src/objects/parse_file.dart

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ class ParseFile extends ParseObject {
1313

1414
String get url => _fileUrl;
1515

16+
File get file => _file;
17+
18+
set url(String url) => _fileUrl = url;
19+
20+
set name(String name) => _fileName = name;
21+
1622
bool get saved => url != null;
1723

1824
@override
@@ -24,12 +30,53 @@ class ParseFile extends ParseObject {
2430
/// Creates a new file
2531
///
2632
/// {https://docs.parseplatform.org/rest/guide/#files/}
27-
ParseFile(this._file, {bool debug, ParseHTTPClient client}) : super (keyFile){
33+
ParseFile(this._file, {String name, String url, bool debug, ParseHTTPClient client}) : super (keyFile){
2834
client == null ? _client = ParseHTTPClient() : _client = client;
2935
_debug = isDebugEnabled(objectLevelDebug: debug);
36+
if(_file != null) {
37+
this._fileName = path.basename(_file.path);
38+
this._path = 'files/$_fileName';
39+
}
40+
else {
41+
this._fileName = name;
42+
this._fileUrl = url;
43+
}
44+
}
45+
46+
Future<ParseFile> loadStorage() async {
47+
Directory tempPath = await getTemporaryDirectory();
48+
49+
if(_fileName == null) {
50+
_file = null;
51+
return this;
52+
}
53+
54+
File possibleFile = new File("${tempPath.path}/$_fileName");
55+
bool exists = await possibleFile.exists();
56+
57+
if(exists) {
58+
_file = possibleFile;
59+
}
60+
else {
61+
_file = null;
62+
}
63+
64+
return this;
65+
}
66+
67+
Future<ParseFile> download() async {
68+
if(_fileUrl == null) {
69+
return this;
70+
}
71+
72+
Directory tempPath = await getTemporaryDirectory();
73+
this._file = new File("${tempPath.path}/$_fileName");
74+
await _file.create();
75+
76+
var response = await _client.get(_fileUrl);
77+
_file.writeAsBytes(response.bodyBytes);
3078

31-
this._fileName = path.basename(_file.path);
32-
this._path = 'files/$_fileName';
79+
return this;
3380
}
3481

3582
/// Uploads a file to Parse Server
@@ -48,4 +95,4 @@ class ParseFile extends ParseObject {
4895
final response = await _client.post(uri, headers: headers, body: body);
4996
return super.handleResponse<ParseFile>(response, ParseApiRQ.upload);
5097
}
51-
}
98+
}

lib/src/objects/parse_user.dart

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,37 @@ class ParseUser extends ParseObject implements ParseCloneable {
155155
}
156156
}
157157

158+
// Logs in a user anonymously
159+
Future<ParseResponse> loginAnonymous() async {
160+
try {
161+
Uri tempUri = Uri.parse(_client.data.serverUrl);
162+
163+
Uri url = Uri(
164+
scheme: tempUri.scheme,
165+
host: tempUri.host,
166+
path: "${tempUri.path}$keyEndPointUsers",
167+
);
168+
169+
var uuid = new Uuid();
170+
171+
final response = await _client.post(url, headers: {
172+
keyHeaderRevocableSession: "1",
173+
174+
}, body: jsonEncode({
175+
"authData": {
176+
"anonymous": {
177+
"id": uuid.v4()
178+
}
179+
}
180+
}));
181+
182+
return _handleResponse(response, ParseApiRQ.loginAnonymous);
183+
}
184+
on Exception catch (e) {
185+
return _handleException(e, ParseApiRQ.loginAnonymous);
186+
}
187+
}
188+
158189
/// Removes the current user from the session data
159190
logout() {
160191
_client.data.sessionId = null;
@@ -198,7 +229,9 @@ class ParseUser extends ParseObject implements ParseCloneable {
198229
var uri = _client.data.serverUrl + "$path/$objectId";
199230
var body =
200231
json.encode(toJson(forApiRQ: true), toEncodable: dateTimeEncoder);
201-
final response = await _client.put(uri, body: body);
232+
final response = await _client.put(uri,
233+
headers: {keyHeaderSessionToken: _client.data.sessionId},
234+
body: body);
202235
return _handleResponse(response, ParseApiRQ.save);
203236
} on Exception catch (e) {
204237
return _handleException(e, ParseApiRQ.save);

lib/src/utils/parse_decoder.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ dynamic parseDecode(dynamic value) {
6464
}
6565
return ParseObject(className).fromJson(map);
6666
case "File":
67-
return new ParseFile(null).fromJson(map);
67+
return new ParseFile(null, url: map["url"], name: map["name"]).fromJson(map);
6868
case "GeoPoint":
6969
num latitude = map["latitude"] ?? 0.0;
7070
num longitude = map["longitude"] ?? 0.0;

pubspec.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ dependencies:
1717

1818
# Utils
1919
shared_preferences: ^0.4.3
20-
path_provider: ^0.4.1
20+
path_provider: ^0.4.1
21+
uuid: ^1.0.0

0 commit comments

Comments
 (0)