using MareSynchronos.API.Data; using MareSynchronos.API.Dto.CharaData; using Microsoft.AspNetCore.SignalR.Client; using Microsoft.Extensions.Logging; namespace MareSynchronos.WebAPI; public partial class ApiController { public async Task CharaDataCreate() { if (!IsConnected) return null; try { Logger.LogDebug("Creating new Character Data"); return await _mareHub!.InvokeAsync(nameof(CharaDataCreate)).ConfigureAwait(false); } catch (Exception ex) { Logger.LogWarning(ex, "Failed to create new character data"); return null; } } public async Task CharaDataUpdate(CharaDataUpdateDto updateDto) { if (!IsConnected) return null; try { Logger.LogDebug("Updating chara data for {id}", updateDto.Id); return await _mareHub!.InvokeAsync(nameof(CharaDataUpdate), updateDto).ConfigureAwait(false); } catch (Exception ex) { Logger.LogWarning(ex, "Failed to update chara data for {id}", updateDto.Id); return null; } } public async Task CharaDataDelete(string id) { if (!IsConnected) return false; try { Logger.LogDebug("Deleting chara data for {id}", id); return await _mareHub!.InvokeAsync(nameof(CharaDataDelete), id).ConfigureAwait(false); } catch (Exception ex) { Logger.LogWarning(ex, "Failed to delete chara data for {id}", id); return false; } } public async Task CharaDataGetMetainfo(string id) { if (!IsConnected) return null; try { Logger.LogDebug("Getting metainfo for chara data {id}", id); return await _mareHub!.InvokeAsync(nameof(CharaDataGetMetainfo), id).ConfigureAwait(false); } catch (Exception ex) { Logger.LogWarning(ex, "Failed to get meta info for chara data {id}", id); return null; } } public async Task CharaDataAttemptRestore(string id) { if (!IsConnected) return null; try { Logger.LogDebug("Attempting to restore chara data {id}", id); return await _mareHub!.InvokeAsync(nameof(CharaDataAttemptRestore), id).ConfigureAwait(false); } catch (Exception ex) { Logger.LogWarning(ex, "Failed to restore chara data for {id}", id); return null; } } public async Task> CharaDataGetOwn() { if (!IsConnected) return []; try { Logger.LogDebug("Getting all own chara data"); return await _mareHub!.InvokeAsync>(nameof(CharaDataGetOwn)).ConfigureAwait(false); } catch (Exception ex) { Logger.LogWarning(ex, "Failed to get own chara data"); return []; } } public async Task> CharaDataGetShared() { if (!IsConnected) return []; try { Logger.LogDebug("Getting all own chara data"); return await _mareHub!.InvokeAsync>(nameof(CharaDataGetShared)).ConfigureAwait(false); } catch (Exception ex) { Logger.LogWarning(ex, "Failed to get shared chara data"); return []; } } public async Task CharaDataDownload(string id) { if (!IsConnected) return null; try { Logger.LogDebug("Getting download chara data for {id}", id); return await _mareHub!.InvokeAsync(nameof(CharaDataDownload), id).ConfigureAwait(false); } catch (Exception ex) { Logger.LogWarning(ex, "Failed to get download chara data for {id}", id); return null; } } public async Task GposeLobbyCreate() { if (!IsConnected) return string.Empty; try { Logger.LogDebug("Creating GPose Lobby"); return await _mareHub!.InvokeAsync(nameof(GposeLobbyCreate)).ConfigureAwait(false); } catch (Exception ex) { Logger.LogWarning(ex, "Failed to create GPose lobby"); return string.Empty; } } public async Task GposeLobbyLeave() { if (!IsConnected) return true; try { Logger.LogDebug("Leaving current GPose Lobby"); return await _mareHub!.InvokeAsync(nameof(GposeLobbyLeave)).ConfigureAwait(false); } catch (Exception ex) { Logger.LogWarning(ex, "Failed to leave GPose lobby"); return false; } } public async Task> GposeLobbyJoin(string lobbyId) { if (!IsConnected) return []; try { Logger.LogDebug("Joining GPose Lobby {id}", lobbyId); return await _mareHub!.InvokeAsync>(nameof(GposeLobbyJoin), lobbyId).ConfigureAwait(false); } catch (Exception ex) { Logger.LogWarning(ex, "Failed to join GPose lobby {id}", lobbyId); return []; } } public async Task GposeLobbyPushCharacterData(CharaDataDownloadDto charaDownloadDto) { if (!IsConnected) return; try { Logger.LogDebug("Sending Chara Data to GPose Lobby"); await _mareHub!.InvokeAsync(nameof(GposeLobbyPushCharacterData), charaDownloadDto).ConfigureAwait(false); } catch (Exception ex) { Logger.LogWarning(ex, "Failed to send Chara Data to GPose lobby"); } } public async Task GposeLobbyPushPoseData(PoseData poseData) { if (!IsConnected) return; try { Logger.LogDebug("Sending Pose Data to GPose Lobby"); await _mareHub!.InvokeAsync(nameof(GposeLobbyPushPoseData), poseData).ConfigureAwait(false); } catch (Exception ex) { Logger.LogWarning(ex, "Failed to send Pose Data to GPose lobby"); } } public async Task GposeLobbyPushWorldData(WorldData worldData) { if (!IsConnected) return; try { await _mareHub!.InvokeAsync(nameof(GposeLobbyPushWorldData), worldData).ConfigureAwait(false); } catch (Exception ex) { Logger.LogWarning(ex, "Failed to send World Data to GPose lobby"); } } }