diff --git a/DiscordChatExporter.Cli/Commands/GetDirectMessageChannelsCommand.cs b/DiscordChatExporter.Cli/Commands/GetDirectMessageChannelsCommand.cs index 6d03e96..118d2be 100644 --- a/DiscordChatExporter.Cli/Commands/GetDirectMessageChannelsCommand.cs +++ b/DiscordChatExporter.Cli/Commands/GetDirectMessageChannelsCommand.cs @@ -16,7 +16,7 @@ namespace DiscordChatExporter.Cli.Commands { var channels = await GetDiscordClient().GetGuildChannelsAsync(Guild.DirectMessages.Id); - foreach (var channel in channels.OrderBy(c => c.Category, PositionBasedComparer.Instance).ThenBy(c => c.Name)) + foreach (var channel in channels.OrderBy(c => c.Name)) console.Output.WriteLine($"{channel.Id} | {channel.Category} / {channel.Name}"); } } diff --git a/DiscordChatExporter.Domain/Discord/Models/Channel.cs b/DiscordChatExporter.Domain/Discord/Models/Channel.cs index 0dfc299..78908fc 100644 --- a/DiscordChatExporter.Domain/Discord/Models/Channel.cs +++ b/DiscordChatExporter.Domain/Discord/Models/Channel.cs @@ -41,11 +41,11 @@ namespace DiscordChatExporter.Domain.Discord.Models public string Name { get; } - public int Position { get; } + public int? Position { get; } public string? Topic { get; } - public Channel(Snowflake id, ChannelType type, Snowflake guildId, ChannelCategory? category, string name, int position, string? topic) + public Channel(Snowflake id, ChannelType type, Snowflake guildId, ChannelCategory? category, string name, int? position, string? topic) { Id = id; Type = type; @@ -89,15 +89,15 @@ namespace DiscordChatExporter.Domain.Discord.Models json.GetPropertyOrNull("recipients")?.EnumerateArray().Select(User.Parse).Select(u => u.Name).JoinToString(", ") ?? id.ToString(); - position ??= json.GetProperty("position").GetInt32(); - + position ??= json.GetPropertyOrNull("position")?.GetInt32(); + return new Channel( id, type, guildId ?? Guild.DirectMessages.Id, category ?? GetDefaultCategory(type), name, - position.Value, + position, topic ); } diff --git a/DiscordChatExporter.Domain/Discord/Models/ChannelCategory.cs b/DiscordChatExporter.Domain/Discord/Models/ChannelCategory.cs index 8fcdce2..8a8dfaf 100644 --- a/DiscordChatExporter.Domain/Discord/Models/ChannelCategory.cs +++ b/DiscordChatExporter.Domain/Discord/Models/ChannelCategory.cs @@ -14,9 +14,9 @@ namespace DiscordChatExporter.Domain.Discord.Models public string Name { get; } - public int Position { get; } + public int? Position { get; } - public ChannelCategory(Snowflake id, string name, int position) + public ChannelCategory(Snowflake id, string name, int? position) { Id = id; Name = name; @@ -32,7 +32,7 @@ namespace DiscordChatExporter.Domain.Discord.Models public static ChannelCategory Parse(JsonElement json, int? position = null) { var id = json.GetProperty("id").GetString().Pipe(Snowflake.Parse); - position ??= json.GetProperty("position").GetInt32(); + position ??= json.GetPropertyOrNull("position")?.GetInt32(); var name = json.GetPropertyOrNull("name")?.GetString() ?? json.GetPropertyOrNull("recipients")?.EnumerateArray().Select(User.Parse).Select(u => u.Name).JoinToString(", ") ?? @@ -41,7 +41,7 @@ namespace DiscordChatExporter.Domain.Discord.Models return new ChannelCategory( id, name, - position.Value + position ); } diff --git a/DiscordChatExporter.Domain/Discord/Models/Common/IHasIdAndPosition.cs b/DiscordChatExporter.Domain/Discord/Models/Common/IHasIdAndPosition.cs index 6cf4187..10a4a72 100644 --- a/DiscordChatExporter.Domain/Discord/Models/Common/IHasIdAndPosition.cs +++ b/DiscordChatExporter.Domain/Discord/Models/Common/IHasIdAndPosition.cs @@ -2,6 +2,6 @@ { public interface IHasIdAndPosition : IHasId { - int Position { get; } + int? Position { get; } } } \ No newline at end of file diff --git a/DiscordChatExporter.Domain/Discord/Models/Common/ChannelPositionBasedComparer.cs b/DiscordChatExporter.Domain/Discord/Models/Common/PositionBasedComparer.cs similarity index 58% rename from DiscordChatExporter.Domain/Discord/Models/Common/ChannelPositionBasedComparer.cs rename to DiscordChatExporter.Domain/Discord/Models/Common/PositionBasedComparer.cs index cd504c4..00d7d16 100644 --- a/DiscordChatExporter.Domain/Discord/Models/Common/ChannelPositionBasedComparer.cs +++ b/DiscordChatExporter.Domain/Discord/Models/Common/PositionBasedComparer.cs @@ -6,18 +6,10 @@ namespace DiscordChatExporter.Domain.Discord.Models.Common { public int Compare(IHasIdAndPosition? x, IHasIdAndPosition? y) { - int result; - if (x != null) + int result = Comparer.Default.Compare(x?.Position, y?.Position); + if (result == 0) { - result = x.Position.CompareTo(y?.Position); - if(result == 0) - { - result = x.Id.Value.CompareTo(y?.Id.Value); - } - } - else - { - result = y == null ? 0 : -1; + result = Comparer.Default.Compare(x?.Id.Value, y?.Id.Value); } return result; } diff --git a/DiscordChatExporter.Domain/Exporting/ExportRequest.cs b/DiscordChatExporter.Domain/Exporting/ExportRequest.cs index a04a4be..1fa1b2c 100644 --- a/DiscordChatExporter.Domain/Exporting/ExportRequest.cs +++ b/DiscordChatExporter.Domain/Exporting/ExportRequest.cs @@ -94,8 +94,8 @@ namespace DiscordChatExporter.Domain.Exporting "%T" => channel.Category.Name, "%c" => channel.Id.ToString(), "%C" => channel.Name, - "%p" => channel.Position.ToString(), - "%P" => channel.Category.Position.ToString(), + "%p" => channel.Position?.ToString() ?? "0", + "%P" => channel.Category.Position?.ToString() ?? "0", "%a" => (after ?? Snowflake.Zero).ToDate().ToString("yyyy-MM-dd"), "%b" => (before?.ToDate() ?? DateTime.Now).ToString("yyyy-MM-dd"), "%%" => "%", diff --git a/DiscordChatExporter.Gui/Views/RootView.xaml b/DiscordChatExporter.Gui/Views/RootView.xaml index 841c3cc..76a454f 100644 --- a/DiscordChatExporter.Gui/Views/RootView.xaml +++ b/DiscordChatExporter.Gui/Views/RootView.xaml @@ -27,7 +27,7 @@ - +