diff --git a/lib/Helpers/MQTTHelper.dart b/lib/Helpers/MQTTHelper.dart index e9cdd24..b07d68a 100644 --- a/lib/Helpers/MQTTHelper.dart +++ b/lib/Helpers/MQTTHelper.dart @@ -18,7 +18,8 @@ class MQTTHelper { void onConnected(dynamic appContext) { print('Connected !!!!!!!!!!!! ----------------------------------'); TabletAppContext tabletAppContext = appContext.getContext(); - tabletAppContext.clientMQTT.updates.listen((List> c) { + + tabletAppContext.clientMQTT.updates.listen((List> c) async { final MqttPublishMessage message = c[0].payload; final payload = MqttPublishPayload.bytesToStringAsString(message.payload.message); print('Received message:$payload from topic: ${c[0].topic}'); @@ -31,17 +32,34 @@ class MQTTHelper { var configId = c[0].topic.split('/')[1]; if (configId != null) { // Check if tablet config - if (tabletAppContext.configuration.id == configId) { - // refresh config - try { - PlayerMessageDTO playerMessage = PlayerMessageDTO.fromJson(jsonDecode(payload)); - var isConfigChanged = playerMessage.configChanged != null ? playerMessage.configChanged : false; - if (isConfigChanged) { - updateConfig(appContext); + print("Check if tablet config"); + print(tabletAppContext.configuration); + if (tabletAppContext.configuration != null) { + if (tabletAppContext.configuration.id == configId) { + // refresh config + try { + PlayerMessageDTO playerMessage = PlayerMessageDTO.fromJson(jsonDecode(payload)); + var isConfigChanged = playerMessage.configChanged != null ? playerMessage.configChanged : false; + var isDeleted = playerMessage.isDeleted != null ? playerMessage.isDeleted : false; + print(isDeleted); + if (isDeleted) { + // Clear all + print("isDeleted"); + tabletAppContext.configuration = null; + appContext.setContext(tabletAppContext); + // UPDATE IT LOCALLY (SQLite) + await DatabaseHelper.instance.update(tabletAppContext); + + } else { + if (isConfigChanged) { + updateConfig(appContext); + } + } + + } + catch(e) { + print('Error = $e'); } - } - catch(e) { - print('Error = $e'); } } } diff --git a/lib/Models/tabletContext.dart b/lib/Models/tabletContext.dart index e4e11ef..bb0527b 100644 --- a/lib/Models/tabletContext.dart +++ b/lib/Models/tabletContext.dart @@ -39,6 +39,6 @@ class TabletAppContext with ChangeNotifier{ // Implement toString to make it easier to see information about @override String toString() { - return 'TabletAppContext{id: $id, deviceId: $deviceId, selectedConfiguration: $configuration, language: $language, host: $host}'; + return 'TabletAppContext{id: $id, deviceId: $deviceId, configuration: $configuration, language: $language, host: $host}'; } } \ No newline at end of file diff --git a/lib/Screens/Configuration/config_view.dart b/lib/Screens/Configuration/config_view.dart index 75cae77..3e9758a 100644 --- a/lib/Screens/Configuration/config_view.dart +++ b/lib/Screens/Configuration/config_view.dart @@ -9,6 +9,7 @@ import 'package:tablet_app/Components/Buttons/rounded_button.dart'; import 'package:tablet_app/Components/loading.dart'; import 'package:tablet_app/Components/rounded_input_field.dart'; import 'package:tablet_app/Helpers/DatabaseHelper.dart'; +import 'package:tablet_app/Helpers/MQTTHelper.dart'; import 'package:tablet_app/Models/tabletContext.dart'; import 'package:tablet_app/Screens/MainView/dropDown_configuration.dart'; import 'package:tablet_app/Screens/MainView/main_view.dart'; @@ -29,7 +30,7 @@ class ConfigViewWidget extends StatefulWidget { class _ConfigViewWidget extends State { Size sizeScreen = new Size(1080.0, 1920.0); // Tablet resolution - String url = "http://192.168.31.96"; //DEV "http://192.168.31.96" + String url; //DEV "http://192.168.31.96" bool configOk = false; @override @@ -37,6 +38,11 @@ class _ConfigViewWidget extends State { final appContext = Provider.of(context); SystemChrome.setEnabledSystemUIOverlays([]); Size size = MediaQuery.of(context).size; + TabletAppContext tabletAppContext = appContext.getContext(); + if (tabletAppContext != null) { + if (tabletAppContext.host != null) + url = tabletAppContext.host; + } return Scaffold( body: Container( height: size.height, @@ -75,7 +81,7 @@ class _ConfigViewWidget extends State { configurations: snapshot.data, onChange: (ConfigurationDTO configurationOut) async { // CREATE DEVICE REQUEST - createDevice(configurationOut, appContext); + await createDevice(configurationOut, appContext); Navigator.pushAndRemoveUntil( context, @@ -128,6 +134,7 @@ class _ConfigViewWidget extends State { padding: const EdgeInsets.only(left: 50, right: 50), child: RoundedInputField( hintText: "URL", + initialValue: url, onChanged: (value) { setState(() { url = value; @@ -210,7 +217,13 @@ class _ConfigViewWidget extends State { appContext.setContext(tabletAppContext); // STORE IT LOCALLY (SQLite) - await DatabaseHelper.instance.insert(tabletAppContext); + TabletAppContext localContext = await DatabaseHelper.instance.getData(); + if (localContext != null) { // Check if sql DB exist + await DatabaseHelper.instance.update(tabletAppContext); + } else { + await DatabaseHelper.instance.insert(tabletAppContext); + } + Fluttertoast.showToast( msg: "La tablette a bien été créée", diff --git a/lib/Screens/MainView/main_view.dart b/lib/Screens/MainView/main_view.dart index 4d923ea..6633221 100644 --- a/lib/Screens/MainView/main_view.dart +++ b/lib/Screens/MainView/main_view.dart @@ -5,6 +5,7 @@ import 'package:managerapi/api.dart'; import 'package:provider/provider.dart'; import 'package:tablet_app/Components/loading.dart'; import 'package:tablet_app/Helpers/MQTTHelper.dart'; +import 'package:tablet_app/Screens/Configuration/config_view.dart'; import 'package:tablet_app/Screens/Map/map_context.dart'; import 'package:tablet_app/Screens/Map/map_view.dart'; import 'package:tablet_app/Models/map-marker.dart'; @@ -191,7 +192,8 @@ class _MainViewWidget extends State { builder: (context, AsyncSnapshot snapshot) { if (snapshot.connectionState == ConnectionState.done) { if (snapshot.data == null) { - return Text("ERROR"); + // Show select config + return Text(""); } else { return GridView.builder( @@ -261,11 +263,23 @@ class _MainViewWidget extends State { Future> getSections(dynamic appContext) async { TabletAppContext tabletAppContext = await appContext.getContext(); - print("GET SECTIONS"); - print(tabletAppContext.toString()); - List sections = await tabletAppContext.clientAPI.sectionApi.sectionGetFromConfiguration(tabletAppContext.configuration.id); - sections.sort((a, b) => a.order.compareTo(b.order)); - return sections; + try { + List sections = await tabletAppContext.clientAPI.sectionApi.sectionGetFromConfiguration(tabletAppContext.configuration.id); + sections.sort((a, b) => a.order.compareTo(b.order)); + return sections; + } catch (e) { + print(e); + print("IN CATCH"); + Navigator.pushAndRemoveUntil( + context, + MaterialPageRoute( + builder: (context) { + return ConfigViewWidget(); + }, + ), + (Route route) => false // For pushAndRemoveUntil + ); + } } } diff --git a/lib/main.dart b/lib/main.dart index 514d093..5dcb90b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -26,6 +26,11 @@ void main() async { // Get config from manager DeviceDetailDTO device = await localContext.clientAPI.deviceApi.deviceGetDetail(localContext.deviceId); localContext.configuration.id = device.configurationId; + if (device.configurationId == null) { + print("device.configurationId == null"); + localContext.configuration = null; + isConfig = false; + } } else { print("NO LOCAL DB !"); }