|
|
|
@ -14,7 +14,6 @@ using DiscordChatExporter.Core.Exceptions;
|
|
|
|
|
using DiscordChatExporter.Core.Exporting;
|
|
|
|
|
using DiscordChatExporter.Core.Exporting.Filtering;
|
|
|
|
|
using DiscordChatExporter.Core.Exporting.Partitioning;
|
|
|
|
|
using DiscordChatExporter.Core.Utils.Extensions;
|
|
|
|
|
|
|
|
|
|
namespace DiscordChatExporter.Cli.Commands.Base;
|
|
|
|
|
|
|
|
|
@ -68,13 +67,22 @@ public abstract class ExportCommandBase : TokenCommandBase
|
|
|
|
|
await console.Output.WriteLineAsync($"Exporting {channels.Count} channel(s)...");
|
|
|
|
|
await console.CreateProgressTicker().StartAsync(async progressContext =>
|
|
|
|
|
{
|
|
|
|
|
await channels.ParallelForEachAsync(async channel =>
|
|
|
|
|
await Parallel.ForEachAsync(
|
|
|
|
|
channels,
|
|
|
|
|
new ParallelOptions
|
|
|
|
|
{
|
|
|
|
|
MaxDegreeOfParallelism = Math.Max(1, ParallelLimit),
|
|
|
|
|
CancellationToken = cancellationToken
|
|
|
|
|
},
|
|
|
|
|
async (channel, innerCancellationToken) =>
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
await progressContext.StartTaskAsync($"{channel.Category.Name} / {channel.Name}", async progress =>
|
|
|
|
|
await progressContext.StartTaskAsync(
|
|
|
|
|
$"{channel.Category.Name} / {channel.Name}",
|
|
|
|
|
async progress =>
|
|
|
|
|
{
|
|
|
|
|
var guild = await Discord.GetGuildAsync(channel.GuildId, cancellationToken);
|
|
|
|
|
var guild = await Discord.GetGuildAsync(channel.GuildId, innerCancellationToken);
|
|
|
|
|
|
|
|
|
|
var request = new ExportRequest(
|
|
|
|
|
guild,
|
|
|
|
@ -90,14 +98,16 @@ public abstract class ExportCommandBase : TokenCommandBase
|
|
|
|
|
DateFormat
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
await Exporter.ExportChannelAsync(request, progress, cancellationToken);
|
|
|
|
|
});
|
|
|
|
|
await Exporter.ExportChannelAsync(request, progress, innerCancellationToken);
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
catch (DiscordChatExporterException ex) when (!ex.IsFatal)
|
|
|
|
|
{
|
|
|
|
|
errors[channel] = ex.Message;
|
|
|
|
|
}
|
|
|
|
|
}, Math.Max(ParallelLimit, 1), cancellationToken);
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Print result
|
|
|
|
|