Upgrade various store methods to IAsyncEnumerable
This commit is contained in:
@@ -58,9 +58,9 @@ namespace PluralKit.Bot.Commands
|
||||
var lastSwitch = await _data.GetLatestSwitch(ctx.System);
|
||||
if (lastSwitch != null)
|
||||
{
|
||||
var lastSwitchMembers = await _data.GetSwitchMembers(lastSwitch);
|
||||
var lastSwitchMembers = _data.GetSwitchMembers(lastSwitch);
|
||||
// Make sure the requested switch isn't identical to the last one
|
||||
if (lastSwitchMembers.Select(m => m.Id).SequenceEqual(members.Select(m => m.Id)))
|
||||
if (await lastSwitchMembers.Select(m => m.Id).SequenceEqualAsync(members.Select(m => m.Id).ToAsyncEnumerable()))
|
||||
throw Errors.SameSwitch(members);
|
||||
}
|
||||
|
||||
@@ -86,13 +86,13 @@ namespace PluralKit.Bot.Commands
|
||||
if (time.ToInstant() > SystemClock.Instance.GetCurrentInstant()) throw Errors.SwitchTimeInFuture;
|
||||
|
||||
// Fetch the last two switches for the system to do bounds checking on
|
||||
var lastTwoSwitches = (await _data.GetSwitches(ctx.System, 2)).ToArray();
|
||||
var lastTwoSwitches = await _data.GetSwitches(ctx.System).Take(2).ToListAsync();
|
||||
|
||||
// If we don't have a switch to move, don't bother
|
||||
if (lastTwoSwitches.Length == 0) throw Errors.NoRegisteredSwitches;
|
||||
if (lastTwoSwitches.Count == 0) throw Errors.NoRegisteredSwitches;
|
||||
|
||||
// If there's a switch *behind* the one we move, we check to make srue we're not moving the time further back than that
|
||||
if (lastTwoSwitches.Length == 2)
|
||||
if (lastTwoSwitches.Count == 2)
|
||||
{
|
||||
if (lastTwoSwitches[1].Timestamp > time.ToInstant())
|
||||
throw Errors.SwitchMoveBeforeSecondLast(lastTwoSwitches[1].Timestamp.InZone(tz));
|
||||
@@ -100,8 +100,8 @@ namespace PluralKit.Bot.Commands
|
||||
|
||||
// Now we can actually do the move, yay!
|
||||
// But, we do a prompt to confirm.
|
||||
var lastSwitchMembers = await _data.GetSwitchMembers(lastTwoSwitches[0]);
|
||||
var lastSwitchMemberStr = string.Join(", ", lastSwitchMembers.Select(m => m.Name));
|
||||
var lastSwitchMembers = _data.GetSwitchMembers(lastTwoSwitches[0]);
|
||||
var lastSwitchMemberStr = string.Join(", ", await lastSwitchMembers.Select(m => m.Name).ToListAsync());
|
||||
var lastSwitchTimeStr = Formats.ZonedDateTimeFormat.Format(lastTwoSwitches[0].Timestamp.InZone(ctx.System.Zone));
|
||||
var lastSwitchDeltaStr = Formats.DurationFormat.Format(SystemClock.Instance.GetCurrentInstant() - lastTwoSwitches[0].Timestamp);
|
||||
var newSwitchTimeStr = Formats.ZonedDateTimeFormat.Format(time);
|
||||
@@ -132,23 +132,23 @@ namespace PluralKit.Bot.Commands
|
||||
}
|
||||
|
||||
// Fetch the last two switches for the system to do bounds checking on
|
||||
var lastTwoSwitches = (await _data.GetSwitches(ctx.System, 2)).ToArray();
|
||||
if (lastTwoSwitches.Length == 0) throw Errors.NoRegisteredSwitches;
|
||||
var lastTwoSwitches = await _data.GetSwitches(ctx.System).Take(2).ToListAsync();
|
||||
if (lastTwoSwitches.Count == 0) throw Errors.NoRegisteredSwitches;
|
||||
|
||||
var lastSwitchMembers = await _data.GetSwitchMembers(lastTwoSwitches[0]);
|
||||
var lastSwitchMemberStr = string.Join(", ", lastSwitchMembers.Select(m => m.Name));
|
||||
var lastSwitchMembers = _data.GetSwitchMembers(lastTwoSwitches[0]);
|
||||
var lastSwitchMemberStr = string.Join(", ", await lastSwitchMembers.Select(m => m.Name).ToListAsync());
|
||||
var lastSwitchDeltaStr = Formats.DurationFormat.Format(SystemClock.Instance.GetCurrentInstant() - lastTwoSwitches[0].Timestamp);
|
||||
|
||||
IUserMessage msg;
|
||||
if (lastTwoSwitches.Length == 1)
|
||||
if (lastTwoSwitches.Count == 1)
|
||||
{
|
||||
msg = await ctx.Reply(
|
||||
$"{Emojis.Warn} This will delete the latest switch ({lastSwitchMemberStr.SanitizeMentions()}, {lastSwitchDeltaStr} ago). You have no other switches logged. Is this okay?");
|
||||
}
|
||||
else
|
||||
{
|
||||
var secondSwitchMembers = await _data.GetSwitchMembers(lastTwoSwitches[1]);
|
||||
var secondSwitchMemberStr = string.Join(", ", secondSwitchMembers.Select(m => m.Name));
|
||||
var secondSwitchMembers = _data.GetSwitchMembers(lastTwoSwitches[1]);
|
||||
var secondSwitchMemberStr = string.Join(", ", await secondSwitchMembers.Select(m => m.Name).ToListAsync());
|
||||
var secondSwitchDeltaStr = Formats.DurationFormat.Format(SystemClock.Instance.GetCurrentInstant() - lastTwoSwitches[1].Timestamp);
|
||||
msg = await ctx.Reply(
|
||||
$"{Emojis.Warn} This will delete the latest switch ({lastSwitchMemberStr.SanitizeMentions()}, {lastSwitchDeltaStr} ago). The next latest switch is {secondSwitchMemberStr.SanitizeMentions()} ({secondSwitchDeltaStr} ago). Is this okay?");
|
||||
|
||||
@@ -239,10 +239,13 @@ namespace PluralKit.Bot.Commands
|
||||
if (system == null) throw Errors.NoSystemError;
|
||||
ctx.CheckSystemPrivacy(system, system.FrontHistoryPrivacy);
|
||||
|
||||
var sws = (await _data.GetSwitches(system, 10)).ToList();
|
||||
if (sws.Count == 0) throw Errors.NoRegisteredSwitches;
|
||||
var sws = _data.GetSwitches(system).Take(10);
|
||||
var embed = await _embeds.CreateFrontHistoryEmbed(sws, system.Zone);
|
||||
|
||||
await ctx.Reply(embed: await _embeds.CreateFrontHistoryEmbed(sws, system.Zone));
|
||||
// Moving the count check to the CreateFrontHistoryEmbed function to avoid a double-iteration
|
||||
// If embed == null, then there's no switches, so error
|
||||
if (embed == null) throw Errors.NoRegisteredSwitches;
|
||||
await ctx.Reply(embed: embed);
|
||||
}
|
||||
|
||||
public async Task SystemFrontPercent(Context ctx, PKSystem system)
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace PluralKit.Bot {
|
||||
var latestSwitch = await _data.GetLatestSwitch(system);
|
||||
if (latestSwitch != null && system.FrontPrivacy.CanAccess(ctx))
|
||||
{
|
||||
var switchMembers = (await _data.GetSwitchMembers(latestSwitch)).ToList();
|
||||
var switchMembers = await _data.GetSwitchMembers(latestSwitch).ToListAsync();
|
||||
if (switchMembers.Count > 0)
|
||||
eb.AddField("Fronter".ToQuantity(switchMembers.Count(), ShowQuantityAs.None),
|
||||
string.Join(", ", switchMembers.Select(m => m.Name)));
|
||||
@@ -115,7 +115,7 @@ namespace PluralKit.Bot {
|
||||
|
||||
public async Task<Embed> CreateFronterEmbed(PKSwitch sw, DateTimeZone zone)
|
||||
{
|
||||
var members = (await _data.GetSwitchMembers(sw)).ToList();
|
||||
var members = await _data.GetSwitchMembers(sw).ToListAsync();
|
||||
var timeSinceSwitch = SystemClock.Instance.GetCurrentInstant() - sw.Timestamp;
|
||||
return new EmbedBuilder()
|
||||
.WithColor(members.FirstOrDefault()?.Color?.ToDiscordColor() ?? Color.Blue)
|
||||
@@ -124,15 +124,15 @@ namespace PluralKit.Bot {
|
||||
.Build();
|
||||
}
|
||||
|
||||
public async Task<Embed> CreateFrontHistoryEmbed(IEnumerable<PKSwitch> sws, DateTimeZone zone)
|
||||
public async Task<Embed> CreateFrontHistoryEmbed(IAsyncEnumerable<PKSwitch> sws, DateTimeZone zone)
|
||||
{
|
||||
var outputStr = "";
|
||||
|
||||
PKSwitch lastSw = null;
|
||||
foreach (var sw in sws)
|
||||
await foreach (var sw in sws)
|
||||
{
|
||||
// Fetch member list and format
|
||||
var members = (await _data.GetSwitchMembers(sw)).ToList();
|
||||
var members = await _data.GetSwitchMembers(sw).ToListAsync();
|
||||
var membersStr = members.Any() ? string.Join(", ", members.Select(m => m.Name)) : "no fronter";
|
||||
|
||||
var switchSince = SystemClock.Instance.GetCurrentInstant() - sw.Timestamp;
|
||||
@@ -156,6 +156,9 @@ namespace PluralKit.Bot {
|
||||
lastSw = sw;
|
||||
}
|
||||
|
||||
if (lastSw == null)
|
||||
return null;
|
||||
|
||||
return new EmbedBuilder()
|
||||
.WithTitle("Past switches")
|
||||
.WithDescription(outputStr)
|
||||
|
||||
Reference in New Issue
Block a user