-
Maximilian Betz authoredMaximilian Betz authored
viewevents.dart 8.57 KiB
import 'dart:io';
import 'package:flutter/material.dart';
import 'datamodel.dart';
import 'sensorconnector.dart';
import 'databaseconnector.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:
final EventStoreInstance _events = EventStoreInstance();
String _syncStatus = '';
var database = DatabaseInstance();
List<Event> localEvents = [];
Future<void> fetchEventsFromDb() async{
localEvents = await database.getEvents();
int pendingEventCnt = await database.getPendingEventCnt();
_syncStatus = pendingEventCnt.toString() + ' event(s) pending';
setState(() {}); //Got events from database, so update UI
}
@override
void initState() {
_syncStatus = '';
super.initState();
fetchEventsFromDb();
}
Future<void> syncEvents() async {
final ConfigurationStoreInstance configuration = ConfigurationStoreInstance();
SensorConnector connection = SensorConnector();
List<Event> events = await database.getPendingEvents();
int syncCounter = events.length;
debugPrint('Pending Events');
for (var event in events){
debugPrint(event.toString());
}
if(syncCounter > 0) {
try {
String? token = await connection.getAuthToken(
configuration.loginInformation.mail,
configuration.loginInformation.password);
var index = 0;
for (var event in events) {
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 to export only once
database.updateEvent(event); //Update Event as exported in SQL Database
fetchEventsFromDb(); //update view list //TODO: this is bad for the sync performance!
setState(() {});
} else {
throw Exception('Sync for ' + event.urn + 'failed');
}
}