diff --git a/lib/addevent.dart b/lib/addevent.dart index d42acfe596d0a099d58a58862cf4cdceaa05147b..0f45a65bf73e7b21cf4b54def10e54ffdb46df9d 100644 --- a/lib/addevent.dart +++ b/lib/addevent.dart @@ -4,6 +4,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_datetime_picker/flutter_datetime_picker.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'datamodel.dart'; +import 'databaseconnector.dart'; import 'dart:async'; import 'package:geolocator/geolocator.dart'; @@ -179,6 +180,7 @@ class _AddEventPageState extends State<AddEvent> { longitude: eventsStore.currentEvent.longitude, elevation: eventsStore.currentEvent.elevation )); + } @override diff --git a/lib/databaseconnector.dart b/lib/databaseconnector.dart index 199b0c0e1d444d917960b3d57b5a6a07388afe93..2462a6cc8bf1bc3da20c10c9542ffd989c5f1591 100644 --- a/lib/databaseconnector.dart +++ b/lib/databaseconnector.dart @@ -4,11 +4,14 @@ import 'package:path/path.dart'; import 'dart:async'; import 'datamodel.dart'; + + class DatabaseConnector{ - static const String eventDatabase = 'sensor_events.db'; + static const String eventDatabase = 'mobileEventLog.db'; static const String eventTable = 'events'; dynamic database; + Future<void> connect() async { database = openDatabase( @@ -16,7 +19,6 @@ class DatabaseConnector{ // When the database is first created, create a table to store the events. onCreate: (db, version) { - // Run the CREATE TABLE statement on the database. return db.execute( 'CREATE TABLE $eventTable(id INTEGER PRIMARY KEY, urnId INTEGER,urn TEXT, label TEXT, type TEXT, typeId INTEGER, description TEXT, status TEXT, startDate TEXT, endDate TEXT, latitude REAL, longitude REAL, elevation REAL)', ); @@ -28,6 +30,7 @@ class DatabaseConnector{ } + //Can also be used to update an existing event. In this case ensure that id is not 0! Future<void> insertEvent(Event event) async { final db = await database; await db.insert( @@ -37,7 +40,7 @@ class DatabaseConnector{ ); } - // A method that retrieves all the dogs from the dogs table. + Future<List<Event>> getEvents() async { // Get a reference to the database. final db = await database; @@ -64,6 +67,34 @@ class DatabaseConnector{ }); } + + // A method that retrieves all the dogs from the dogs table. + Future<List<Event>> getPendingEvents() async { + // Get a reference to the database. + final db = await database; + + final List<Map<String, dynamic>> maps = await db.query(eventTable, where: '"status" = "PENDING"'); + + // Convert the List<Map<String, dynamic> into a List<Event>. + return List.generate(maps.length, (i) { + return Event( + id: maps[i]['id'], + urnId: maps[i]['urnId'], + urn: maps[i]['urn'], + label: maps[i]['label'], + type: maps[i]['type'], + typeId: maps[i]['typeId'], + description: maps[i]['description'], + status: maps[i]['status'], + startDate: maps[i]['startDate'], + endDate: maps[i]['endDate'], + latitude: maps[i]['latitude'], + longitude: maps[i]['longitude'], + elevation: maps[i]['elevation'], + ); + }); + } + } diff --git a/lib/viewevents.dart b/lib/viewevents.dart index faee89bf27404d117bc1911eb4f0d9dfe7cd8e7f..746b35cd31b5b9ba52e0cbed85aac15964479b0b 100644 --- a/lib/viewevents.dart +++ b/lib/viewevents.dart @@ -22,6 +22,8 @@ class _ViewEvents extends State<ViewEvents> { void initState() { _sync_status = _events.getPendingEventCount().toString() + ' event(s) pending'; super.initState(); + + //TODO: Query all events from database everytime this widget is opened. Remove local event storage instance! } Future<void> syncEvents() async { @@ -40,7 +42,7 @@ class _ViewEvents extends State<ViewEvents> { debugPrint('Number of Pending Events: ' + syncCounter.toString()); var index = 0; for (var event in _events.events) { - if (event.status == 'PENDING') { + if (event.status == 'PENDING') { //TODO: only query events which are 'PENDING' from database. debugPrint('Idx: ' + index.toString() + ' ' + event.toSensorJson().toString()); index++; @@ -49,7 +51,7 @@ class _ViewEvents extends State<ViewEvents> { syncCounter--; debugPrint( 'put success, remaining events: ' + syncCounter.toString()); - event.status = 'EXPORTED'; //Update event export only once + event.status = 'EXPORTED'; //Update event export only once //TODO: move to database and update event based in primary row id. setState(() {}); } else { throw Exception('Sync for ' + event.urn + 'failed');