/
main.dart
155 lines (104 loc) · 4.49 KB
/
main.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import 'package:flutter/material.dart';
import 'package:flutter/services.dart' show rootBundle;
import 'package:rw_tcx/logTool.dart';
import 'secret.dart'; // Where Strava app secret and clientId stored
import 'package:rw_tcx/models/TCXModel.dart';
import 'package:rw_tcx/rTCX.dart';
import 'package:rw_tcx/wTCX.dart';
import 'package:path_provider/path_provider.dart'; // Needed for getApplications
import 'package:strava_flutter/strava.dart';
import 'package:strava_flutter/Models/fault.dart';
// Used by Google sign in
import 'package:google_sign_in/google_sign_in.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:googleapis/drive/v3.dart' as drive;
import 'dart:io' as io;
import 'package:http/http.dart' show BaseRequest, Response, StreamedResponse;
import 'package:http/io_client.dart';
class GoogleHttpClient extends IOClient {
Map<String, String> _headers;
GoogleHttpClient(this._headers) : super();
@override
Future<StreamedResponse> send(BaseRequest request) =>
super.send(request..headers.addAll(_headers));
@override
Future<Response> head(Object url, {Map<String, String> headers}) =>
super.head(url, headers: headers..addAll(_headers));
}
main(List<String> args) async {
print('Start of rw_tcx example');
isRW_TCXInDebug = true;
// First init of Strava API stuff
// Do authentication with the right scope
final strava = Strava(
true, // To get display info in API
secret);
bool isAuthOk = false;
isAuthOk = await strava.oauth(clientId, 'activity:write', secret, 'auto');
print('---> Strava Authentication result: $isAuthOk');
// Start Google Auth to try access Google Drive
final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn googleSignIn = GoogleSignIn(
scopes: ['https://www.googleapis.com/auth/drive'],
);
final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
final GoogleSignInAuthentication googleSignInAuthentication =
await googleSignInAccount.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleSignInAuthentication.accessToken,
idToken: googleSignInAuthentication.idToken,
);
// final FirebaseUser user = await _auth.signInWithCredential(credential);
AuthResult authResult = await _auth.signInWithCredential(credential);
assert(!authResult.user.isAnonymous);
assert(await authResult.user.getIdToken() != null);
final FirebaseUser currentUser = await _auth.currentUser();
assert(authResult.user.uid == currentUser.uid);
print('signInWithGoogle succeeded: ${authResult.user}');
var client = GoogleHttpClient(await googleSignInAccount.authHeaders);
var driveApi = drive.DriveApi(client);
// Get the list of file from to root directory
// of the google drive
// useful to check that driveApi is working
var fileList = await driveApi.files.list();
// Display for 10 file names
fileList.files.forEach((file) => print('---${file.name})'));
print('Read a TCX file');
// Use the asset file to test without having to create internally a ride
TCXModel rideData = TCXModel();
String contents = '';
try {
// Read the test file sample1.tcx in assets
contents = await rootBundle.loadString('assets/sample2.tcx');
print('contents $contents');
rideData = readTCX(contents);
} catch (e) {
print('error loading assets file: $e');
}
print('Write a TCX file');
TCXModel tcxInfos = TCXModel();
tcxInfos.points = rideData.points;
tcxInfos.swVersionMajor = 'SWMajor';
tcxInfos.swVersionMinor = 'SWMinor';
tcxInfos.partNumber = 'Part Number';
tcxInfos.dateActivity = DateTime(2019, 8, 15, 18, 28);
await writeTCX(tcxInfos, 'generatedSample.tcx');
print('End of write TCX test');
final directory = await getApplicationDocumentsDirectory();
String path = directory.path;
var destFile = drive.File.fromJson({
'mimeType': 'text/plain',
'name': 'test_rw_tcx.txt',
});
io.File fileToUpload = io.File('$path/generatedSample.tcx');
drive.Media mediaContent =
drive.Media(fileToUpload.openRead(), fileToUpload.lengthSync());
var resultFile =
await driveApi.files.create(destFile, uploadMedia: mediaContent);
// Now use Strava API to upload the generatedTCX
// Strava authentication has been done previously
String dirUpload = (await getApplicationDocumentsDirectory()).path;
Fault fault = await strava.uploadActivity(
'Test rw_TCX', 'It is working!', '$dirUpload/generatedSample.tcx', 'tcx');
print('This is the end!!');
}