namespace QuestShare.Services.API { internal class Authorize_Client { public static void HandleDispatch() { if (ClientState.LocalContentId == 0) { _ = ((ApiService)Plugin.GetService()).Disconnect(); return; } var knownCodes = ShareService.ShareCodes.Select(s => s).ToList(); if (HostService.ActiveSession != null) { knownCodes.Add(new Objects.ShareCode { CharacterId = HostService.ActiveSession.OwnerCharacterId, Code = HostService.ActiveSession.ShareCode }); } var request = new Authorize.Request() { Token = ApiService.Token, Version = Constants.Version, ShareCodes = knownCodes, }; ((ApiService)Plugin.GetService()).Invoke(nameof(Authorize), request).ConfigureAwait(false); } public static Task HandleResponse(Authorize.Response response) { var share = (ShareService)Plugin.GetService(); if (response.Success) { ConfigurationManager.Instance.Token = response.Token; foreach(var session in response.Sessions) { share.AddSession(session); } if (response.OwnedSession != null) { ConfigurationManager.Instance.OwnedSession = response.OwnedSession; } ConfigurationManager.Save(); } else { Log.Error("Failed to authorize: {Error}", response.Error); UiService.LastErrorMessage = $"Failed to authorize: {response.Error}"; _ = ((ApiService)Plugin.GetService()).Disconnect(); } return Task.CompletedTask; } } }