From 15f780ead636a586db8b0d2e75ecbb80db51fa00 Mon Sep 17 00:00:00 2001 From: whysman Date: Sat, 23 Nov 2024 14:09:45 -0500 Subject: [PATCH] Continuing to troubleshoot ws --- lib/status_page.dart | 77 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 69 insertions(+), 8 deletions(-) diff --git a/lib/status_page.dart b/lib/status_page.dart index c539322..269db57 100644 --- a/lib/status_page.dart +++ b/lib/status_page.dart @@ -50,15 +50,76 @@ class StatusPageState extends State with WidgetsBindingObserver { @override void didChangeAppLifecycleState(AppLifecycleState state) { if (state == AppLifecycleState.resumed) { - _reconnectWebSocket(); + debugPrint("App resumed"); + updateStatus(); + updateMessages(); } } - void _reconnectWebSocket() { - if (channel.closeCode != null) { - debugPrint("Reinitializing WebSocket connection..."); - channel.sink.close(); - _initializeWebSocket(); + void updateStatus() async { + final url = Uri.parse('$restBaseUrl/get'); + final prefsProvider = + Provider.of(context, listen: false); + try { + debugPrint("Updating status..."); + final response = await http.post( + url, + headers: {'Content-Type': 'application/json'}, + body: jsonEncode({"Id: $prefsProvider.getUserId()"}), + ); + debugPrint(response.statusCode.toString()); + if (response.statusCode == 200) { + final jsonResponse = jsonDecode(response.body) as Map; + + // Extract the 'Status' field or other relevant fields from the response + String newStatus = jsonResponse['Status'] ?? 'none'; + debugPrint("Starting status update: $newStatus"); + // Store the new status in SharedPreferences + await prefsProvider.setCurrentStatus(newStatus); + debugPrint("Status updated: $newStatus"); + } else { + debugPrint("Failed to update status: ${response.statusCode}"); + } + } catch (e) { + debugPrint("Error in updateMessages: $e"); + } + } + + void updateMessages() async { + final url = Uri.parse('$restBaseUrl/update'); + try { + final response = await http.get( + url, + headers: {'Content-Type': 'application/json'}, + ); + debugPrint("Response body: ${response.body}\n"); + if (response.statusCode == 200) { + final parsed = jsonDecode(response.body); + + // Ensure 'parsed' is a List, otherwise handle gracefully + if (parsed is List) { + debugPrint("Messages to update: ${parsed.length}"); + // Ensure each item is a Map + final List> jsonResponse = parsed + .where((item) => item is Map) + .map((item) => item as Map) + .toList(); + + setState(() { + messages.clear(); // Clear the existing messages + messages.addAll(jsonResponse); // Add new messages + }); + } else { + debugPrint("API returned unexpected format: ${response.body}"); + setState(() { + messages.clear(); // Clear messages if format is invalid + }); + } + } else { + debugPrint("Failed to fetch messages: ${response.statusCode}"); + } + } catch (e) { + debugPrint("Error in updateMessages: $e"); } } @@ -167,8 +228,7 @@ class StatusPageState extends State with WidgetsBindingObserver { "Incoming id $incomingId, status: $status, prefsID: $prefsId, timestamp: $timeStamp"); if (incomingId == prefsProvider.getUserId()) { - if ((status == 'removed' || status == 'none') && - prefsProvider.getCurrentStatus() != 'none') { + if (status == 'removed' || status == 'none') { debugPrint("Clearing local message: $status"); await prefsProvider.setCurrentStatus('none'); } else { @@ -177,6 +237,7 @@ class StatusPageState extends State with WidgetsBindingObserver { } } else { if (status == 'removed' || status == 'none') { + debugPrint("Checking for messages from user: $incomingId"); if (messages.any((msg) => msg['Id'] == incomingId)) { debugPrint("Removing message from user: $incomingId"); messages.removeWhere((msg) => msg['Id'] == incomingId);