From 8a01e567a146d71405b8feeb7bfd7d532569b000 Mon Sep 17 00:00:00 2001
From: Salman Ahmed <frenzibyte@gmail.com>
Date: Fri, 18 Dec 2020 03:06:28 +0300
Subject: [PATCH] Fix API potentially getting stuck in connecting state

---
 osu.Game/Online/API/APIAccess.cs | 25 ++++++++++++++++++-------
 1 file changed, 18 insertions(+), 7 deletions(-)

diff --git a/osu.Game/Online/API/APIAccess.cs b/osu.Game/Online/API/APIAccess.cs
index 806a42a38b..b42c78e9cd 100644
--- a/osu.Game/Online/API/APIAccess.cs
+++ b/osu.Game/Online/API/APIAccess.cs
@@ -145,16 +145,14 @@ namespace osu.Game.Online.API
 
                             failureCount = 0;
 
-                            var friendsReq = new GetFriendsRequest();
-                            friendsReq.Success += f =>
+                            fetchFriends(() =>
                             {
-                                Friends.AddRange(f);
-
                                 //we're connected!
                                 state.Value = APIState.Online;
-                            };
-
-                            handleRequest(friendsReq);
+                            }, () =>
+                            {
+                                state.Value = APIState.Failing;
+                            });
                         };
 
                         if (!handleRequest(userReq))
@@ -255,6 +253,19 @@ namespace osu.Game.Online.API
             return null;
         }
 
+        private void fetchFriends(Action onSuccess, Action onFail)
+        {
+            var friendsReq = new GetFriendsRequest();
+            friendsReq.Success += res =>
+            {
+                Friends.AddRange(res);
+                onSuccess?.Invoke();
+            };
+
+            if (!handleRequest(friendsReq))
+                onFail?.Invoke();
+        }
+
         /// <summary>
         /// Handle a single API request.
         /// Ensures all exceptions are caught and dealt with correctly.