This commit is contained in:
Jacob Pfundstein 2026-08-07 21:44:47 +02:00 committed by GitHub
commit e7a988f35b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 56 additions and 15 deletions

1
.gitignore vendored
View file

@ -1,5 +1,6 @@
# User-specific files # User-specific files
.vs/ .vs/
.vscode/
.idea/ .idea/
*.suo *.suo
*.user *.user

View file

@ -157,34 +157,48 @@ public partial class ExportRequest
Channel channel, Channel channel,
Snowflake? after, Snowflake? after,
Snowflake? before Snowflake? before
) => )
Regex.Replace( {
string preFormattedPath = Regex.Replace(
path, path,
"%.", "%.",
m => m =>
Path.EscapeFileName( Path.EscapeFileName(
m.Value switch m.Value switch
{ {
// On %T and %P, we have to make sure that we still get name and position of the category if the channel is a thread
"%g" => guild.Id.ToString(), "%g" => guild.Id.ToString(),
"%G" => guild.Name, "%G" => guild.Name,
"%t" => channel.Parent?.Id.ToString() ?? "", "%t" => channel.Parent?.Id.ToString() ?? "",
"%T" => channel.Parent?.Name ?? "", "%T"
=> channel.IsThread
? (channel.Parent?.Parent?.Name ?? "")
: channel.Parent?.Name ?? "",
"%c" => channel.Id.ToString(), "%c" => channel.Id.ToString(),
"%C" => channel.Name, "%C" => channel.Name,
"%p" => channel.Position?.ToString(CultureInfo.InvariantCulture) ?? "0", "%p" => channel.Position?.ToString(CultureInfo.InvariantCulture) ?? "0",
"%P" => channel.Parent?.Position?.ToString(CultureInfo.InvariantCulture) "%P"
=> channel.IsThread
? (
channel
.Parent?.Parent
?.Position
?.ToString(CultureInfo.InvariantCulture) ?? ""
)
: channel.Parent?.Position?.ToString(CultureInfo.InvariantCulture)
?? "0", ?? "0",
"%a" => after?.ToDate().ToString("yyyy-MM-dd", CultureInfo.InvariantCulture) "%a"
=> after?.ToDate().ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)
?? "", ?? "",
"%b" => before "%b"
?.ToDate() => before?.ToDate().ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)
.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)
?? "", ?? "",
"%d" => DateTimeOffset.Now.ToString( "%d"
=> DateTimeOffset.Now.ToString(
"yyyy-MM-dd", "yyyy-MM-dd",
CultureInfo.InvariantCulture CultureInfo.InvariantCulture
), ),
@ -195,6 +209,32 @@ public partial class ExportRequest
) )
); );
// We are looking for any structure in the path which contains either %y or %z. If the channel is a thread, we can resolve the placeholders, otherwise, that whole structure needs to be removed.
string formattedPath = Regex.Replace(
preFormattedPath,
@"\\[^\\]*%[xyz][^\\]*\\",
m =>
channel.IsThread
? Regex.Replace(
m.Value,
"%[xyz]",
n =>
n.Value switch
{
"%x" => channel.Parent?.Id.ToString() ?? "",
"%y"
=> channel
.Parent?.Position
?.ToString(CultureInfo.InvariantCulture) ?? "",
"%z" => channel.Parent?.Name ?? "",
_ => n.Value
}
)
: "\\"
);
return formattedPath;
}
private static string GetOutputBaseFilePath( private static string GetOutputBaseFilePath(
Guild guild, Guild guild,
Channel channel, Channel channel,