Redone syncshell admin ui, fixed some bugs on edit profile.
This commit is contained in:
@@ -379,7 +379,8 @@ public sealed class PairManager
|
||||
dto.GroupPermissions,
|
||||
shell.GroupFullInfo.GroupUserPermissions,
|
||||
shell.GroupFullInfo.GroupUserInfo,
|
||||
new Dictionary<string, GroupPairUserInfo>(shell.GroupFullInfo.GroupPairUserInfos, StringComparer.Ordinal));
|
||||
new Dictionary<string, GroupPairUserInfo>(shell.GroupFullInfo.GroupPairUserInfos, StringComparer.Ordinal),
|
||||
0);
|
||||
|
||||
shell.Update(updated);
|
||||
return PairOperationResult.Ok();
|
||||
@@ -514,7 +515,8 @@ public sealed class PairManager
|
||||
GroupPermissions.NoneSet,
|
||||
GroupUserPreferredPermissions.NoneSet,
|
||||
GroupPairUserInfo.None,
|
||||
new Dictionary<string, GroupPairUserInfo>(StringComparer.Ordinal));
|
||||
new Dictionary<string, GroupPairUserInfo>(StringComparer.Ordinal),
|
||||
0);
|
||||
|
||||
shell = new Syncshell(placeholder);
|
||||
_groups[group.GID] = shell;
|
||||
|
||||
@@ -23,7 +23,7 @@ public class VisibleUserDataDistributor : DisposableMediatorSubscriberBase
|
||||
private readonly List<UserData> _previouslyVisiblePlayers = [];
|
||||
private Task<CharacterData>? _fileUploadTask = null;
|
||||
private readonly HashSet<UserData> _usersToPushDataTo = new(UserDataComparer.Instance);
|
||||
private readonly SemaphoreSlim _pushDataSemaphore = new(1, 1);
|
||||
private readonly SemaphoreSlim _pushLock = new(1, 1);
|
||||
private readonly CancellationTokenSource _runtimeCts = new();
|
||||
|
||||
public VisibleUserDataDistributor(ILogger<VisibleUserDataDistributor> logger, ApiController apiController, DalamudUtilService dalamudUtil,
|
||||
@@ -108,53 +108,49 @@ public class VisibleUserDataDistributor : DisposableMediatorSubscriberBase
|
||||
private void PushCharacterData(bool forced = false)
|
||||
{
|
||||
if (_lastCreatedData == null || _usersToPushDataTo.Count == 0) return;
|
||||
_ = PushCharacterDataAsync(forced);
|
||||
}
|
||||
|
||||
_ = Task.Run(async () =>
|
||||
private async Task PushCharacterDataAsync(bool forced = false)
|
||||
{
|
||||
await _pushLock.WaitAsync(_runtimeCts.Token).ConfigureAwait(false);
|
||||
try
|
||||
{
|
||||
try
|
||||
{
|
||||
forced |= _uploadingCharacterData?.DataHash != _lastCreatedData.DataHash;
|
||||
if (_lastCreatedData == null || _usersToPushDataTo.Count == 0)
|
||||
return;
|
||||
|
||||
if (_fileUploadTask == null || (_fileUploadTask?.IsCompleted ?? false) || forced)
|
||||
var hashChanged = _uploadingCharacterData?.DataHash != _lastCreatedData.DataHash;
|
||||
forced |= hashChanged;
|
||||
|
||||
if (_fileUploadTask == null || _fileUploadTask.IsCompleted || forced)
|
||||
{
|
||||
_uploadingCharacterData = _lastCreatedData.DeepClone();
|
||||
var uploadTargets = _usersToPushDataTo.ToList();
|
||||
Logger.LogDebug("Starting UploadTask for {hash}, Reason: TaskIsNull: {task}, TaskIsCompleted: {taskCpl}, Forced: {frc}",
|
||||
_lastCreatedData.DataHash, _fileUploadTask == null, _fileUploadTask?.IsCompleted ?? false, forced);
|
||||
_fileUploadTask = _fileTransferManager.UploadFiles(_uploadingCharacterData, [.. _usersToPushDataTo]);
|
||||
_lastCreatedData.DataHash,
|
||||
_fileUploadTask == null,
|
||||
_fileUploadTask?.IsCompleted ?? false,
|
||||
forced);
|
||||
|
||||
_fileUploadTask = _fileTransferManager.UploadFiles(_uploadingCharacterData, uploadTargets);
|
||||
}
|
||||
|
||||
if (_fileUploadTask != null)
|
||||
{
|
||||
var dataToSend = await _fileUploadTask.ConfigureAwait(false);
|
||||
await _pushDataSemaphore.WaitAsync(_runtimeCts.Token).ConfigureAwait(false);
|
||||
try
|
||||
{
|
||||
if (_usersToPushDataTo.Count == 0) return;
|
||||
Logger.LogDebug("Pushing {data} to {users}", dataToSend.DataHash, string.Join(", ", _usersToPushDataTo.Select(k => k.AliasOrUID)));
|
||||
await _apiController.PushCharacterData(dataToSend, [.. _usersToPushDataTo]).ConfigureAwait(false);
|
||||
_usersToPushDataTo.Clear();
|
||||
}
|
||||
finally
|
||||
{
|
||||
_pushDataSemaphore.Release();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (OperationCanceledException) when (_runtimeCts.IsCancellationRequested)
|
||||
{
|
||||
Logger.LogDebug("PushCharacterData cancelled");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LogError(ex, "Failed to push character data");
|
||||
}
|
||||
});
|
||||
var dataToSend = await _fileUploadTask.ConfigureAwait(false);
|
||||
|
||||
var users = _usersToPushDataTo.ToList();
|
||||
if (users.Count == 0)
|
||||
return;
|
||||
|
||||
Logger.LogDebug("Pushing {data} to {users}", dataToSend.DataHash, string.Join(", ", users.Select(k => k.AliasOrUID)));
|
||||
|
||||
await _apiController.PushCharacterData(dataToSend, users).ConfigureAwait(false);
|
||||
_usersToPushDataTo.Clear();
|
||||
}
|
||||
finally
|
||||
{
|
||||
_pushLock.Release();
|
||||
}
|
||||
}
|
||||
|
||||
private List<UserData> GetVisibleUsers()
|
||||
{
|
||||
return _pairLedger.GetVisiblePairs()
|
||||
.Select(connection => connection.User)
|
||||
.ToList();
|
||||
}
|
||||
private List<UserData> GetVisibleUsers() => [.. _pairLedger.GetVisiblePairs().Select(connection => connection.User)];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user