From 04ae0687f8a2bf1a80fa7661a9bf9ba137d9442f Mon Sep 17 00:00:00 2001 From: Nutcake Date: Fri, 29 Sep 2023 12:30:43 +0200 Subject: [PATCH] Fix websocket connection --- lib/auxiliary.dart | 2 +- lib/clients/messaging_client.dart | 27 +++++++-------------------- lib/config.dart | 1 - lib/models/users/friend.dart | 6 +++--- 4 files changed, 11 insertions(+), 25 deletions(-) diff --git a/lib/auxiliary.dart b/lib/auxiliary.dart index 5bf5768..4c10e49 100644 --- a/lib/auxiliary.dart +++ b/lib/auxiliary.dart @@ -8,7 +8,7 @@ class Aux { if (resdb == null || resdb.isEmpty) return ""; if (resdb.startsWith("http")) return resdb; final filename = p.basenameWithoutExtension(resdb); - return "${Config.skyfrostAssetsUrl}$filename"; + return "${Config.skyfrostAssetsUrl}/$filename"; } } diff --git a/lib/clients/messaging_client.dart b/lib/clients/messaging_client.dart index cfbbe49..44cedae 100644 --- a/lib/clients/messaging_client.dart +++ b/lib/clients/messaging_client.dart @@ -5,7 +5,6 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; import 'package:hive_flutter/hive_flutter.dart'; -import 'package:http/http.dart' as http; import 'package:logging/logging.dart'; import 'package:contacts_plus_plus/apis/friend_api.dart'; @@ -32,7 +31,8 @@ enum EventTarget { unknown, messageSent, receiveMessage, - messagesRead; + messagesRead, + receiveSessionUpdate; factory EventTarget.parse(String? text) { if (text == null) return EventTarget.unknown; @@ -286,24 +286,7 @@ class MessagingClient extends ChangeNotifier { Future _tryConnect() async { while (true) { try { - final http.Response response; - try { - response = await http.post( - Uri.parse("${Config.resoniteHubUrl}/negotiate"), - headers: _apiClient.authorizationHeader, - ); - _apiClient.checkResponse(response); - } catch (e) { - throw "Failed to acquire connection info from Neos API: $e"; - } - final body = jsonDecode(response.body); - final url = (body["url"] as String?)?.replaceFirst("https://", "wss://"); - final wsToken = body["accessToken"]; - - if (url == null || wsToken == null) { - throw "Invalid response from server."; - } - final ws = await WebSocket.connect("$url&access_token=$wsToken"); + final ws = await WebSocket.connect(Config.resoniteHubUrl.replaceFirst("https://", "wss://"), headers: _apiClient.authorizationHeader); _attempts = 0; return ws; } catch (e) { @@ -383,6 +366,10 @@ class MessagingClient extends ChangeNotifier { } notifyListeners(); break; + case EventTarget.receiveSessionUpdate: + // TODO: Handle session updates + _logger.info("Received session update"); + break; } } diff --git a/lib/config.dart b/lib/config.dart index 7e21ca5..6f5a576 100644 --- a/lib/config.dart +++ b/lib/config.dart @@ -1,6 +1,5 @@ class Config { static const String apiBaseUrl = "https://api.resonite.com"; - static const String durianAssetsUrl = "https://assets.everion.com"; static const String skyfrostAssetsUrl = "https://assets.resonite.com"; static const String resoniteHubUrl = "$apiBaseUrl/hub"; static const String secretClientKey = ""; diff --git a/lib/models/users/friend.dart b/lib/models/users/friend.dart index 1e5684f..8e9cdd8 100644 --- a/lib/models/users/friend.dart +++ b/lib/models/users/friend.dart @@ -22,15 +22,15 @@ class Friend implements Comparable { bool get isHeadless => userStatus.activeSessions.any((session) => session.headlessHost == true && session.hostUserId == id); factory Friend.fromMap(Map map) { - final userStatus = UserStatus.fromMap(map["userStatus"]); + final userStatus = map["userStatus"] == null ? UserStatus.empty() : UserStatus.fromMap(map["userStatus"]); return Friend( id: map["id"], - username: map["friendUsername"], + username: map["contactUsername"], ownerId: map["ownerId"] ?? map["id"], // Neos bot status is always offline but should be displayed as online userStatus: map["id"] == _neosBotId ? userStatus.copyWith(onlineStatus: OnlineStatus.online) : userStatus, userProfile: UserProfile.fromMap(map["profile"] ?? {}), - friendStatus: FriendStatus.fromString(map["friendStatus"]), + friendStatus: FriendStatus.fromString(map["contactStatus"]), latestMessageTime: map["latestMessageTime"] == null ? DateTime.fromMillisecondsSinceEpoch(0) : DateTime.parse(map["latestMessageTime"]), );