Files
LuaCsForBarotraumaEP/Barotrauma/BarotraumaClient/ClientSource/Social/FriendProviders/CompositeFriendProvider.cs
2024-03-28 18:34:33 +02:00

46 lines
1.4 KiB
C#

using System.Collections.Immutable;
using System.Linq;
using System.Threading.Tasks;
using Barotrauma.Extensions;
using Barotrauma.Networking;
namespace Barotrauma;
sealed class CompositeFriendProvider : FriendProvider
{
private readonly ImmutableArray<FriendProvider> providers;
public CompositeFriendProvider(params FriendProvider[] providers)
{
this.providers = providers.ToImmutableArray();
}
public override async Task<Option<FriendInfo>> RetrieveFriend(AccountId id)
{
return (await Task.WhenAll(providers
.Select(p => p.RetrieveFriend(id))))
.NotNone().FirstOrNone();
}
public override async Task<ImmutableArray<FriendInfo>> RetrieveFriends()
{
var friends = await Task.WhenAll(providers.Select(p => p.RetrieveFriends()));
return friends.SelectMany(a => a).ToImmutableArray();
}
public override async Task<Option<Sprite>> RetrieveAvatar(FriendInfo friend, int avatarSize)
{
var subTasks = await Task.WhenAll(providers.Select(p => p.RetrieveAvatar(friend, avatarSize)));
return subTasks.FirstOrDefault(t => t.IsSome());
}
public override async Task<string> GetSelfUserName()
{
foreach (var provider in providers)
{
string userName = await provider.GetSelfUserName();
if (userName is { Length: > 0 }) { return userName; }
}
return "";
}
}