Skip to content
Snippets Groups Projects
viewevents.dart 7.72 KiB
import 'dart:convert';
import 'package:flutter/material.dart';
import 'datamodel.dart';
import 'package:http/http.dart' as http;
import 'sensorconnector.dart';

class ViewEvents extends StatefulWidget {
  const ViewEvents({Key? key}) : super(key: key);

  @override
  _ViewEvents createState() => _ViewEvents();
}

class _ViewEvents extends State<ViewEvents> {
  // Get singleton to access locally stored events:
  EventStoreInstance _events = EventStoreInstance();
  String _sync_status = '';
  //TODO: add exception handling and display exceptions to user.

  @override
  void initState() {
    _sync_status = _events.getPendingEventCount().toString() + ' event(s) pending';
    super.initState();
  }

  Future<bool> syncEvents() async {
    //final EventStoreInstance events = EventStoreInstance();
    final ConfigurationStoreInstance configuration = ConfigurationStoreInstance();
    SensorConnector connection = SensorConnector();
    int _synccounter = 0;  //For displaying progress during event upload

    String? token = await connection.getAuthToken(configuration.loginInformation.mail,
        configuration.loginInformation.password);

    if (token != null) {
      _synccounter = _events.getPendingEventCount();
      debugPrint('Number of Events: ' + _events.events.length.toString());
      debugPrint('Number of Pending Events: ' + _synccounter.toString());
      var index = 0;
      for (var event in _events.events) {
        if (event.status == 'PENDING') {
          debugPrint('Idx: ' + index.toString() + ' ' +
              event.toSensorJson().toString());
          index++;
          if (await connection.putEvent(event, token) == true){
            //Event has been posted to Sensor.
            _synccounter--;
            debugPrint('put success, remaining events: ' + _synccounter.toString());
            event.status = 'EXPORTED'; //Update event status so that it is only exported once.
            setState(() {});
          }else{
            _sync_status = 'export failed: ' + event.urn;
          }
        }
      }
      _sync_status = 'export success';
      return true;
    }
    return false;
  }

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(
        title: const Text("View Added Events"),
      ),
      body: Container(
      margin: const EdgeInsets.symmetric(horizontal: 5.0),