rw_tcx 0.0.1 copy "rw_tcx: ^0.0.1" to clipboard
rw_tcx: ^0.0.1 copied to clipboard

outdated

Dart library to either read a TCX file or write a TCX. TCX file description can be found

example/lib/main.dart

import 'package:flutter/material.dart';

import 'package:flutter/services.dart' show rootBundle;

import 'secret.dart'; // Where Strava app secret and clientId stored
import 'package:rw_tcx/rw_tcx.dart';
import 'package:rw_tcx/models/TCXModel.dart';

import 'dart:io';   // Needed for File
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 Service Account
// import "package:googleapis_auth/auth_browser.dart";
import 'package:googleapis/drive/v3.dart' as drive;
import 'package:googleapis_auth/auth_io.dart';
import 'dart:io' as io;

// Used by Google sign in 
import 'package:google_sign_in/google_sign_in.dart';
import 'package:firebase_auth/firebase_auth.dart';


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');


  // 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);

  var fileList = await driveApi.files.list();

  // Display for 10 file names
  fileList.files.forEach((file) => print('---${file.name})'));
  

  


/*****  Using Google Service Account
  AuthClient client = await clientViaServiceAccount(
  ServiceAccountCredentials.fromJson({


  "type": "service_account",
  "project_id": "leafy-stock-249015",
  "private_key_id": "576daafdd8808aba24039a168c93d445082c140f",
  "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCSZ2SBOpCwOrNM\n+49UKa3nUjSOQFLYlsDtIXODc78MyCEJjacY6wq3oZCpOmrWaFyhLkPEa/yqzfu0\n7Y69QIUsD/XZRJcYkDetqYONDQbZHxz/SwmZFNkSQmvapTiFro5II0eOvkmbwvV3\nfmzK3B2xmsClyoNn3Hv8zxfPLyh6t3Z00fdsuPD6E3fTsrkmbLZFXgsYGhyW3Oqe\n3JO3WhxF11537DFxu+GksCqFKQnN+iYt8Tb3hWQj8eanvOwNuCHX6+6B+6Uc8amh\nXqTMMPTpSTX3KeoQa52Z7MRIwallTIPvNb0nYodO+GsHYi82koshKvEKXEWqib6b\nl17wZzPFAgMBAAECggEAFDCRpyf6Q8YB67K2DDS9Pe0pFe71SIIts+X3kKAPL5uP\nwXSun7HrkJxaye5Q79AvlK4VJrV/qtcXiFbJvFFKrDi9PjZbzJri2sj0PSjtPKxc\n6ttLGmMfdl8A5wOpnPc6uY8H82hMLWCq9Pd92FHs/wz+K+mWypAY7H8WDk/iD14f\n0nmN1qzOJlny8a2Q+7aG/gZLTnVLpWSku4WcnHuTRgLs5f9siGA8MlgbQNd2f1A1\n/qn+I2d9j2gM3Cw+0do7FtRtlblBZ5SyWhB8WGzKr2u1fVsdhk7itCJEHHgwSWvX\n2vEA3E84mNYZrLTSgTKCyO2dVxdlmn9T2j2jGUWKtwKBgQDKmLywygKTfAJd3Qot\nCPWXshasSxgpHfNDiBMZazIVR12KfnGWm3L03PMOW6LvuT7eXQqWNPjtKF6Q+rH0\nO61nPzIel8dyOru7v7WyLXD3YXV/AobmDvbjUIFEiK6sGlcfwcuxcEM/Eq43ikVS\nU9MwBgMFbtpIzFIsAC+XfaEQVwKBgQC4/sHCVeAu4iIA2EFqMANuy8egruZLCOzD\n0gbg7opaAi+DpVzA9ZAJ1v4m2NjYSGLsyo+jDDvGt4LhKG4OHU94tJCAhO5Zd6ly\nXH4o+9eWROWrt9G5DKp5iNFTls4YSKV32crUaR3UrjaweaXPXodngnTqTt8Y4U52\nvg1lundbQwKBgF2AHCVjNcknRFhZeSbLqby23ivqBF6Fig2ysU3b4SNc6ljOflHJ\nsEY96pbHx+znC5LIUeh8zh11sh8q9BIJsL+jtNfVqKCZZqcBlTOEMUyaWAWj/uoS\nIfNK5j3g7uxSw77OS9m6O+7SCkFruQ6DzUWuoJpTTL6oPYw9EbnSqxDFAoGBAIAn\n9GDFjxXLkFTXe5Gti2NBBp15LI7EswkBQcSnW+743qOrdfMy6sL2ToDo7mf+1ZFG\nznTcr7h9PszubjeW9IwhQo3WCSyvqhJQoxGPTg2K0zS/lilE7gBd2O24ZjQKd57s\noQe/fmvs+HQPAeADk3gQtx/u3bzlsK6wAKX9pFvzAoGAODyzVKbaZbIUy7lx2m8I\naohE/wPbA/4yn/JQbpRoF13oySeHboPx9/MFe6CTaXRnQJOpF88q+LvdD/QWqDyf\nhFmIkL1rEu3QWf5MzCUWd+l/uvRXAtJSXTuGOiL00LLcbUis9ZPD+UPWr2emPKeN\nKz5Vke8Evo5F8GoNWMmpjeA=\n-----END PRIVATE KEY-----\n",
  "client_email": "test2-635@leafy-stock-249015.iam.gserviceaccount.com",
  "client_id": "112867373329814899435",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/test2-635%40leafy-stock-249015.iam.gserviceaccount.com",
     }),
     ['https://www.googleapis.com/auth/drive']);

  var driveApi = drive.DriveApi(client);
  // var driveApi = DriveApi(client, servicePath: 'upload/drive/v3/files');
*****/

  final directory = await getApplicationDocumentsDirectory();
 
  String path = directory.path;

  // String result = await rootBundle.loadString('assets/vewd.txt');
  var result = await rootBundle.load('assets/vewd.txt');

  var fileToUpload = await io.File('$path/toto.txt').writeAsString('This is the end my friend');
  
  // Not working for the moment 
  // Can not find the file (path problem?)
  // List<int> res2 = await fileToUpload.readAsBytes();

  
  var mediaContent = drive.Media(fileToUpload.openRead(), fileToUpload.lengthSync());
  drive.File newFile = drive.File.fromJson({
    'mimeType': 'text/plain',
    'name': 'sample2.txt', 
  });
  
  drive.UploadOptions options = drive.UploadOptions.Default;
/****
  await driveApi.files.create(File()..name = 'sample2.tcx',
  uploadMedia: Media(fileToUpload.openRead(), fileToUpload.lengthSync()));



var fileList = await driveApi.files.list();



   await driveApi.files.create(newFile,
      uploadMedia: mediaContent, uploadOptions: options );
****/





  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';

  await writeTCX(tcxInfos, 'generatedSample.tcx');

  print('End of write TCX test');


  // Now use Strava API to upload the generatedTCX
  // Strava authentication has been done previously

  String dirUpload = (await getApplicationDocumentsDirectory()).path;



  Fault fault = await strava.uploadActivity(
      'B88888', 'It is working!', '$dirUpload/generatedSample.tcx', 'tcx');


  print('This is the end!!');


  

}
2
likes
0
pub points
0%
popularity

Publisher

unverified uploader

Dart library to either read a TCX file or write a TCX. TCX file description can be found

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

flutter, path_provider

More

Packages that depend on rw_tcx