Add path placeholders for threads

This commit is contained in:
Jacob P. 2024-01-24 01:24:29 +01:00
parent 9b8985a920
commit 7bfb1c6fcc
No known key found for this signature in database
GPG key ID: 4A755417EB440EA0
2 changed files with 44 additions and 6 deletions

3
.gitignore vendored
View file

@ -1,5 +1,6 @@
# User-specific files
.vs/
.vscode/
.idea/
*.suo
*.user
@ -9,4 +10,4 @@ bin/
obj/
# Test results
TestResults/
TestResults/

View file

@ -154,27 +154,39 @@ public partial class ExportRequest
Channel channel,
Snowflake? after,
Snowflake? before
) =>
Regex.Replace(
)
{
string preFormattedPath = Regex.Replace(
path,
"%.",
m =>
PathEx.EscapeFileName(
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.Name,
"%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.Name,
"%p" => channel.Position?.ToString(CultureInfo.InvariantCulture) ?? "0",
"%P"
=> channel.Parent?.Position?.ToString(CultureInfo.InvariantCulture)
?? "0",
=> channel.IsThread
? (
channel
.Parent?.Parent
?.Position
?.ToString(CultureInfo.InvariantCulture) ?? ""
)
: channel.Parent?.Position?.ToString(CultureInfo.InvariantCulture)
?? "0",
"%a"
=> after?.ToDate().ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)
@ -194,6 +206,31 @@ 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,
@"\\[^\\]*%[yz][^\\]*\\",
m =>
channel.IsThread
? Regex.Replace(
m.Value,
"%[yz]",
n =>
n.Value switch
{
"%y"
=> channel
.Parent?.Position
?.ToString(CultureInfo.InvariantCulture) ?? "",
"%z" => channel.Parent?.Name ?? "",
_ => n.Value
}
)
: "\\"
);
return formattedPath;
}
private static string GetOutputBaseFilePath(
Guild guild,
Channel channel,