< Summary

Class:DCL.Social.Friends.WebInterfaceFriendsApiBridge
Assembly:FriendsController
File(s):File 1: /tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/FriendsController/WebInterfaceFriendsApiBridge.cs
File 2: /tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/FriendsController/WebInterfaceFriendsApiBridgeUtilies.cs
Covered lines:4
Uncovered lines:100
Coverable lines:104
Total lines:331
Line coverage:3.8% (4 of 104)
Covered branches:0
Total branches:0
Covered methods:2
Total methods:33
Method coverage:6% (2 of 33)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
File 1: GetOrCreate()0%220100%
File 1: WebInterfaceFriendsApiBridge()0%110100%
File 1: InitializeFriends(...)0%6200%
File 1: FriendNotFound(...)0%6200%
File 1: AddFriends(...)0%6200%
File 1: AddFriendRequests(...)0%6200%
File 1: AddFriendRequest(...)0%6200%
File 1: AddFriendsWithDirectMessages(...)0%6200%
File 1: UpdateUserPresence(...)0%6200%
File 1: UpdateFriendshipStatus(...)0%12300%
File 1: UpdateTotalFriendRequests(...)0%6200%
File 1: UpdateTotalFriends(...)0%6200%
File 1: RequestFriendshipConfirmation(...)0%6200%
File 1: RequestFriendshipError(...)0%6200%
File 1: CancelFriendshipConfirmation(...)0%12300%
File 1: CancelFriendshipError(...)0%6200%
File 1: RejectFriendship(...)0%2100%
File 1: RejectFriendshipAsync(...)0%2100%
File 1: RemoveFriend(...)0%2100%
File 1: GetFriendsAsync(...)0%2100%
File 1: GetFriendsAsync(...)0%2100%
File 1: GetFriendRequests(...)0%2100%
File 1: GetFriendRequestsAsync(...)0%2100%
File 1: GetFriendsWithDirectMessages(...)0%2100%
File 1: RequestFriendship(...)0%2100%
File 1: RequestFriendshipAsync(...)0%2100%
File 1: CancelRequestAsync(...)0%2100%
File 1: CancelRequestByUserIdAsync(...)0%6200%
File 1: CancelRequestByUserId(...)0%2100%
File 1: AcceptFriendship(...)0%2100%
File 1: AcceptFriendshipAsync(...)0%2100%
File 1: GetFriendshipStatus(...)0%2100%
File 2: ForceInitialization()0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/FriendsController/WebInterfaceFriendsApiBridge.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using Cysharp.Threading.Tasks;
 4using DCL.Helpers;
 5using DCL.Interface;
 6using DCl.Social.Friends;
 7using JetBrains.Annotations;
 8using System.Threading;
 9using UnityEngine;
 10using System.Threading;
 11
 12namespace DCL.Social.Friends
 13{
 14    public partial class WebInterfaceFriendsApiBridge : MonoBehaviour, IFriendsApiBridge
 15    {
 16        private const string GET_FRIENDS_REQUEST_MESSAGE_ID = "GetFriendsRequest";
 17
 18        public static WebInterfaceFriendsApiBridge GetOrCreate()
 19        {
 42320            var bridgeObj = GameObject.Find("Main");
 21
 42322            return bridgeObj == null
 23                ? new GameObject("Main").AddComponent<WebInterfaceFriendsApiBridge>()
 24                : bridgeObj.GetOrCreateComponent<WebInterfaceFriendsApiBridge>();
 25        }
 26
 30827        private readonly Dictionary<string, IUniTaskSource> pendingRequests = new ();
 30828        private readonly Dictionary<string, UniTaskCompletionSource<FriendshipUpdateStatusMessage>> updatedFriendshipPen
 29
 30        public event Action<FriendshipInitializationMessage> OnInitialized;
 31        public event Action<string> OnFriendNotFound;
 32        public event Action<AddFriendRequestsPayload> OnFriendRequestsAdded; // TODO (NEW FRIEND REQUESTS): remove when 
 33        public event Action<AddFriendsWithDirectMessagesPayload> OnFriendWithDirectMessagesAdded;
 34        public event Action<UserStatus> OnUserPresenceUpdated;
 35        public event Action<FriendshipUpdateStatusMessage> OnFriendshipStatusUpdated;
 36        public event Action<UpdateTotalFriendRequestsPayload> OnTotalFriendRequestCountUpdated;
 37        public event Action<UpdateTotalFriendsPayload> OnTotalFriendCountUpdated;
 38        public event Action<FriendRequestPayload> OnFriendRequestReceived;
 39
 40        [PublicAPI]
 41        public void InitializeFriends(string json) =>
 042            OnInitialized?.Invoke(JsonUtility.FromJson<FriendshipInitializationMessage>(json));
 43
 44        [PublicAPI]
 45        public void FriendNotFound(string name) =>
 046            OnFriendNotFound?.Invoke(name);
 47
 48        [PublicAPI]
 49        public void AddFriends(string json)
 50        {
 051            var payload = JsonUtility.FromJson<AddFriendsPayload>(json);
 052            string messageId = GET_FRIENDS_REQUEST_MESSAGE_ID;
 53
 054            if (!pendingRequests.ContainsKey(messageId))
 055                return;
 56
 057            var task = (UniTaskCompletionSource<AddFriendsPayload>)pendingRequests[messageId];
 58
 059            pendingRequests.Remove(messageId);
 060            task.TrySetResult(payload);
 061        }
 62
 63        // TODO (NEW FRIEND REQUESTS): remove when we don't need to keep the retro-compatibility with the old version
 64        [PublicAPI]
 65        public void AddFriendRequests(string json) =>
 066            OnFriendRequestsAdded?.Invoke(JsonUtility.FromJson<AddFriendRequestsPayload>(json));
 67
 68        [PublicAPI]
 69        public void AddFriendRequest(string json)
 70        {
 071            var payload = JsonUtility.FromJson<FriendRequestPayload>(json);
 072            OnFriendRequestReceived?.Invoke(payload);
 073        }
 74
 75        [PublicAPI]
 76        public void AddFriendsWithDirectMessages(string json) =>
 077            OnFriendWithDirectMessagesAdded?.Invoke(JsonUtility.FromJson<AddFriendsWithDirectMessagesPayload>(json));
 78
 79        [PublicAPI]
 80        public void UpdateUserPresence(string json) =>
 081            OnUserPresenceUpdated?.Invoke(JsonUtility.FromJson<UserStatus>(json));
 82
 83        [PublicAPI]
 84        public void UpdateFriendshipStatus(string json)
 85        {
 086            FriendshipUpdateStatusMessage msg = JsonUtility.FromJson<FriendshipUpdateStatusMessage>(json);
 087            string userId = msg.userId;
 88
 089            if (updatedFriendshipPendingRequests.ContainsKey(userId))
 090                updatedFriendshipPendingRequests[userId].TrySetResult(msg);
 91
 092            updatedFriendshipPendingRequests.Remove(userId);
 93
 094            OnFriendshipStatusUpdated?.Invoke(msg);
 095        }
 96
 97        [PublicAPI]
 98        public void UpdateTotalFriendRequests(string json) =>
 099            OnTotalFriendRequestCountUpdated?.Invoke(JsonUtility.FromJson<UpdateTotalFriendRequestsPayload>(json));
 100
 101        [PublicAPI]
 102        public void UpdateTotalFriends(string json) =>
 0103            OnTotalFriendCountUpdated?.Invoke(JsonUtility.FromJson<UpdateTotalFriendsPayload>(json));
 104
 105        [PublicAPI]
 106        public void RequestFriendshipConfirmation(string json)
 107        {
 0108            var payload = JsonUtility.FromJson<RequestFriendshipConfirmationPayload>(json);
 0109            var messageId = payload.messageId;
 0110            if (!pendingRequests.ContainsKey(messageId)) return;
 111
 0112            var task = (UniTaskCompletionSource<RequestFriendshipConfirmationPayload>)pendingRequests[messageId];
 113
 0114            pendingRequests.Remove(messageId);
 0115            task.TrySetResult(payload);
 0116        }
 117
 118        [PublicAPI]
 119        public void RequestFriendshipError(string json)
 120        {
 0121            var payload = JsonUtility.FromJson<RequestFriendshipErrorPayload>(json);
 0122            var messageId = payload.messageId;
 0123            if (!pendingRequests.ContainsKey(messageId)) return;
 124
 0125            var task = (UniTaskCompletionSource<RequestFriendshipConfirmationPayload>)pendingRequests[messageId];
 126
 0127            pendingRequests.Remove(messageId);
 0128            task.TrySetException(new FriendshipException((FriendRequestErrorCodes)payload.errorCode));
 0129        }
 130
 131        [PublicAPI]
 132        public void CancelFriendshipConfirmation(string json)
 133        {
 0134            var payload = JsonUtility.FromJson<CancelFriendshipConfirmationPayload>(json);
 0135            string messageId = payload.messageId;
 0136            if (!pendingRequests.ContainsKey(messageId)) return;
 137
 0138            var task = (UniTaskCompletionSource<CancelFriendshipConfirmationPayload>)pendingRequests[messageId];
 139
 0140            pendingRequests.Remove(messageId);
 0141            task.TrySetResult(payload);
 142
 0143            OnFriendshipStatusUpdated?.Invoke(new FriendshipUpdateStatusMessage
 144            {
 145                action = FriendshipAction.CANCELLED,
 146                userId = payload.friendRequest.to
 147            });
 0148        }
 149
 150        [PublicAPI]
 151        public void CancelFriendshipError(string json)
 152        {
 0153            var payload = JsonUtility.FromJson<CancelFriendshipErrorPayload>(json);
 0154            var messageId = payload.messageId;
 0155            if (!pendingRequests.ContainsKey(messageId)) return;
 156
 0157            var task = (UniTaskCompletionSource<CancelFriendshipConfirmationPayload>)pendingRequests[messageId];
 158
 0159            pendingRequests.Remove(messageId);
 0160            task.TrySetException(new FriendshipException((FriendRequestErrorCodes)payload.errorCode));
 0161        }
 162
 163        public void RejectFriendship(string userId)
 164        {
 0165            WebInterface.UpdateFriendshipStatus(new WebInterface.FriendshipUpdateStatusMessage
 166            {
 167                action = WebInterface.FriendshipAction.REJECTED,
 168                userId = userId
 169            });
 0170        }
 171
 172        public UniTask<RejectFriendshipPayload> RejectFriendshipAsync(string friendRequestId, CancellationToken cancella
 0173            throw new NotImplementedException("Already implemented in RPCFriendsApiBridge");
 174
 175        public void RemoveFriend(string userId)
 176        {
 0177            WebInterface.UpdateFriendshipStatus(new WebInterface.FriendshipUpdateStatusMessage
 178            {
 179                action = WebInterface.FriendshipAction.DELETED,
 180                userId = userId
 181            });
 0182        }
 183
 184        public UniTask<AddFriendsPayload> GetFriendsAsync(int limit, int skip, CancellationToken cancellationToken = def
 185        {
 0186            cancellationToken.ThrowIfCancellationRequested();
 187
 0188            var task = new UniTaskCompletionSource<AddFriendsPayload>();
 189
 0190            pendingRequests[GET_FRIENDS_REQUEST_MESSAGE_ID] = task;
 0191            WebInterface.GetFriends(limit, skip);
 192
 0193            return task.Task.AttachExternalCancellation(cancellationToken);
 194        }
 195
 196        public UniTask<AddFriendsPayload> GetFriendsAsync(string usernameOrId, int limit, CancellationToken cancellation
 197        {
 0198            cancellationToken.ThrowIfCancellationRequested();
 199
 0200            var task = new UniTaskCompletionSource<AddFriendsPayload>();
 201
 0202            pendingRequests[GET_FRIENDS_REQUEST_MESSAGE_ID] = task;
 0203            WebInterface.GetFriends(usernameOrId, limit);
 204
 0205            return task.Task.AttachExternalCancellation(cancellationToken);
 206        }
 207
 208        // TODO (NEW FRIEND REQUESTS): remove when we don't need to keep the retro-compatibility with the old version
 209        public void GetFriendRequests(int sentLimit, int sentSkip, int receivedLimit, int receivedSkip)
 210        {
 0211            WebInterface.SendMessage("GetFriendRequests", new GetFriendRequestsPayload
 212            {
 213                receivedSkip = receivedSkip,
 214                receivedLimit = receivedLimit,
 215                sentSkip = sentSkip,
 216                sentLimit = sentLimit
 217            });
 0218        }
 219
 220        public UniTask<AddFriendRequestsV2Payload> GetFriendRequestsAsync(int sentLimit, int sentSkip, int receivedLimit
 0221            throw new NotImplementedException("Already implemented in RPCFriendsApiBridge");
 222
 223        public void GetFriendsWithDirectMessages(string usernameOrId, int limit, int skip) =>
 0224            WebInterface.GetFriendsWithDirectMessages(usernameOrId, limit, skip);
 225
 226        public void RequestFriendship(string friendUserId)
 227        {
 0228            WebInterface.UpdateFriendshipStatus(new WebInterface.FriendshipUpdateStatusMessage
 229            {
 230                action = WebInterface.FriendshipAction.REQUESTED_TO,
 231                userId = friendUserId,
 232            });
 0233        }
 234
 235        public UniTask<RequestFriendshipConfirmationPayload> RequestFriendshipAsync(string userId, string messageBody, C
 236        {
 0237            cancellationToken.ThrowIfCancellationRequested();
 238
 0239            var task = new UniTaskCompletionSource<RequestFriendshipConfirmationPayload>();
 240
 241            // TODO: optimize unique id length for performance reasons
 0242            var messageId = Guid.NewGuid().ToString("N");
 0243            pendingRequests[messageId] = task;
 244
 0245            WebInterface.SendMessage("RequestFriendship", new RequestFriendshipPayload
 246            {
 247                messageId = messageId,
 248                messageBody = messageBody,
 249                userId = userId
 250            });
 251
 0252            return task.Task.AttachExternalCancellation(cancellationToken);
 253        }
 254
 255        public UniTask<CancelFriendshipConfirmationPayload> CancelRequestAsync(string friendRequestId, CancellationToken
 256        {
 0257            cancellationToken.ThrowIfCancellationRequested();
 258
 0259            var task = new UniTaskCompletionSource<CancelFriendshipConfirmationPayload>();
 260
 261            // TODO: optimize unique id length for performance reasons
 0262            var messageId = Guid.NewGuid().ToString("N");
 0263            pendingRequests[messageId] = task;
 264
 0265            WebInterface.SendMessage("CancelFriendship",
 266                new CancelFriendshipPayload
 267                {
 268                    messageId = messageId,
 269                    friendRequestId = friendRequestId
 270                });
 271
 0272            return task.Task.AttachExternalCancellation(cancellationToken);
 273        }
 274
 275        public UniTask CancelRequestByUserIdAsync(string userId, CancellationToken cancellationToken)
 276        {
 0277            cancellationToken.ThrowIfCancellationRequested();
 278
 0279            var task = updatedFriendshipPendingRequests.ContainsKey(userId)
 280                ? updatedFriendshipPendingRequests[userId]
 281                : new UniTaskCompletionSource<FriendshipUpdateStatusMessage>();
 282
 0283            updatedFriendshipPendingRequests[userId] = task;
 284
 0285            WebInterface.UpdateFriendshipStatus(new WebInterface.FriendshipUpdateStatusMessage
 286            {
 287                userId = userId,
 288                action = WebInterface.FriendshipAction.CANCELLED
 289            });
 290
 0291            return task.Task.AttachExternalCancellation(cancellationToken);
 292        }
 293
 294        public void CancelRequestByUserId(string userId)
 295        {
 0296            WebInterface.UpdateFriendshipStatus(new WebInterface.FriendshipUpdateStatusMessage
 297            {
 298                userId = userId,
 299                action = WebInterface.FriendshipAction.CANCELLED
 300            });
 0301        }
 302
 303        public void AcceptFriendship(string userId)
 304        {
 0305            WebInterface.UpdateFriendshipStatus(new WebInterface.FriendshipUpdateStatusMessage
 306            {
 307                userId = userId,
 308                action = WebInterface.FriendshipAction.APPROVED
 309            });
 0310        }
 311
 312        public UniTask<AcceptFriendshipPayload> AcceptFriendshipAsync(string friendRequestId, CancellationToken cancella
 0313            throw new NotImplementedException("Already implemented in RPCFriendsApiBridge");
 314
 315        public UniTask<FriendshipStatus> GetFriendshipStatus(string userId, CancellationToken cancellationToken) =>
 0316            throw new NotImplementedException("Already implemented in RPCFriendsApiBridge");
 317    }
 318}

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/FriendsController/WebInterfaceFriendsApiBridgeUtilies.cs

#LineLine coverage
 1using UnityEngine;
 2
 3namespace DCL.Social.Friends
 4{
 5    public partial class WebInterfaceFriendsApiBridge
 6    {
 7        [ContextMenu("Force initialization")]
 8        public void ForceInitialization()
 9        {
 010            InitializeFriends(JsonUtility.ToJson(new FriendshipInitializationMessage()));
 011        }
 12    }
 13}

Methods/Properties

GetOrCreate()
WebInterfaceFriendsApiBridge()
InitializeFriends(System.String)
FriendNotFound(System.String)
AddFriends(System.String)
AddFriendRequests(System.String)
AddFriendRequest(System.String)
AddFriendsWithDirectMessages(System.String)
UpdateUserPresence(System.String)
UpdateFriendshipStatus(System.String)
UpdateTotalFriendRequests(System.String)
UpdateTotalFriends(System.String)
RequestFriendshipConfirmation(System.String)
RequestFriendshipError(System.String)
CancelFriendshipConfirmation(System.String)
CancelFriendshipError(System.String)
RejectFriendship(System.String)
RejectFriendshipAsync(System.String, System.Threading.CancellationToken)
RemoveFriend(System.String)
GetFriendsAsync(System.Int32, System.Int32, System.Threading.CancellationToken)
GetFriendsAsync(System.String, System.Int32, System.Threading.CancellationToken)
GetFriendRequests(System.Int32, System.Int32, System.Int32, System.Int32)
GetFriendRequestsAsync(System.Int32, System.Int32, System.Int32, System.Int32, System.Threading.CancellationToken)
GetFriendsWithDirectMessages(System.String, System.Int32, System.Int32)
RequestFriendship(System.String)
RequestFriendshipAsync(System.String, System.String, System.Threading.CancellationToken)
CancelRequestAsync(System.String, System.Threading.CancellationToken)
CancelRequestByUserIdAsync(System.String, System.Threading.CancellationToken)
CancelRequestByUserId(System.String)
AcceptFriendship(System.String)
AcceptFriendshipAsync(System.String, System.Threading.CancellationToken)
GetFriendshipStatus(System.String, System.Threading.CancellationToken)
ForceInitialization()