From 389372b93f492273c38be5890fa5573d176ff4c4 Mon Sep 17 00:00:00 2001 From: Brandon Smith Date: Sun, 9 Aug 2015 11:19:27 -0300 Subject: [PATCH] Collapsed Discord.Models namespace, cleaned up Message cache --- .gitattributes | 63 ++++++++++++++++++++++ Discord.Net/API/Models/General.cs | 2 +- Discord.Net/{Models => }/Channel.cs | 2 +- Discord.Net/{Models => }/ChatMessage.cs | 20 +++++-- Discord.Net/Discord.Net.csproj | 11 ++-- Discord.Net/DiscordClient.Events.cs | 22 +++----- Discord.Net/DiscordClient.cs | 10 ++-- Discord.Net/DiscordWebSocket.cs | 4 +- Discord.Net/Models/ChatMessageReference.cs | 22 -------- Discord.Net/{Models => }/Role.cs | 2 +- Discord.Net/{Models => }/Server.cs | 2 +- Discord.Net/{Models => }/User.cs | 2 +- 12 files changed, 102 insertions(+), 60 deletions(-) create mode 100644 .gitattributes rename Discord.Net/{Models => }/Channel.cs (97%) rename Discord.Net/{Models => }/ChatMessage.cs (66%) delete mode 100644 Discord.Net/Models/ChatMessageReference.cs rename Discord.Net/{Models => }/Role.cs (95%) rename Discord.Net/{Models => }/Server.cs (98%) rename Discord.Net/{Models => }/User.cs (97%) diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..1ff0c4230 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/Discord.Net/API/Models/General.cs b/Discord.Net/API/Models/General.cs index 46c487d8d..c20b7f7bc 100644 --- a/Discord.Net/API/Models/General.cs +++ b/Discord.Net/API/Models/General.cs @@ -106,7 +106,7 @@ namespace Discord.API.Models [JsonProperty(PropertyName = "channels")] public ChannelInfo[] Channels; [JsonProperty(PropertyName = "joined_at")] - public DateTime JoinedAt; + public DateTime? JoinedAt; [JsonProperty(PropertyName = "members")] public MembershipInfo[] Members; [JsonProperty(PropertyName = "owner_id")] diff --git a/Discord.Net/Models/Channel.cs b/Discord.Net/Channel.cs similarity index 97% rename from Discord.Net/Models/Channel.cs rename to Discord.Net/Channel.cs index 23919e192..25d59818f 100644 --- a/Discord.Net/Models/Channel.cs +++ b/Discord.Net/Channel.cs @@ -1,6 +1,6 @@ using Newtonsoft.Json; -namespace Discord.Models +namespace Discord { public sealed class Channel { diff --git a/Discord.Net/Models/ChatMessage.cs b/Discord.Net/ChatMessage.cs similarity index 66% rename from Discord.Net/Models/ChatMessage.cs rename to Discord.Net/ChatMessage.cs index 1b8d95d90..e25d1e8b0 100644 --- a/Discord.Net/Models/ChatMessage.cs +++ b/Discord.Net/ChatMessage.cs @@ -1,15 +1,23 @@ using Newtonsoft.Json; using System; -namespace Discord.Models +namespace Discord { - public sealed class ChatMessage : ChatMessageReference + public sealed class ChatMessage { + private readonly DiscordClient _client; + + public string Id { get; } + public bool IsMentioningEveryone { get; internal set; } public bool IsTTS { get; internal set; } public string Text { get; internal set; } public DateTime Timestamp { get; internal set; } - + + public string ChannelId { get; internal set; } + [JsonIgnore] + public Channel Channel { get { return _client.GetChannel(ChannelId); } } + public string UserId { get; internal set; } [JsonIgnore] public User User { get { return _client.GetUser(UserId); } } @@ -19,9 +27,11 @@ namespace Discord.Models public object[] Embeds { get; internal set; } internal ChatMessage(string id, string channelId, DiscordClient client) - : base(id, channelId, client) { - } + Id = id; + ChannelId = channelId; + _client = client; + } public override string ToString() { diff --git a/Discord.Net/Discord.Net.csproj b/Discord.Net/Discord.Net.csproj index eda49edcd..6fb72ee9c 100644 --- a/Discord.Net/Discord.Net.csproj +++ b/Discord.Net/Discord.Net.csproj @@ -49,10 +49,9 @@ - - - - + + + @@ -62,8 +61,8 @@ - - + + diff --git a/Discord.Net/DiscordClient.Events.cs b/Discord.Net/DiscordClient.Events.cs index 62349c566..23bd54d63 100644 --- a/Discord.Net/DiscordClient.Events.cs +++ b/Discord.Net/DiscordClient.Events.cs @@ -1,5 +1,4 @@ -using Discord.Models; -using System; +using System; namespace Discord { @@ -98,40 +97,35 @@ namespace Discord } //Message - public sealed class MessageCreateEventArgs : EventArgs - { - public readonly ChatMessage Message; - internal MessageCreateEventArgs(ChatMessage msg) { Message = msg; } - } public sealed class MessageEventArgs : EventArgs { - public readonly ChatMessageReference Message; - internal MessageEventArgs(ChatMessageReference msg) { Message = msg; } + public readonly ChatMessage Message; + internal MessageEventArgs(ChatMessage msg) { Message = msg; } } - public event EventHandler MessageCreated; + public event EventHandler MessageCreated; private void RaiseMessageCreated(ChatMessage msg) { if (MessageCreated != null) - MessageCreated(this, new MessageCreateEventArgs(msg)); + MessageCreated(this, new MessageEventArgs(msg)); } public event EventHandler MessageDeleted; - private void RaiseMessageDeleted(ChatMessageReference msg) + private void RaiseMessageDeleted(ChatMessage msg) { if (MessageDeleted != null) MessageDeleted(this, new MessageEventArgs(msg)); } public event EventHandler MessageUpdated; - private void RaiseMessageUpdated(ChatMessageReference msg) + private void RaiseMessageUpdated(ChatMessage msg) { if (MessageUpdated != null) MessageUpdated(this, new MessageEventArgs(msg)); } public event EventHandler MessageAcknowledged; - private void RaiseMessageAcknowledged(ChatMessageReference msg) + private void RaiseMessageAcknowledged(ChatMessage msg) { if (MessageAcknowledged != null) MessageAcknowledged(this, new MessageEventArgs(msg)); diff --git a/Discord.Net/DiscordClient.cs b/Discord.Net/DiscordClient.cs index ff51ae9f3..703933dc5 100644 --- a/Discord.Net/DiscordClient.cs +++ b/Discord.Net/DiscordClient.cs @@ -1,13 +1,11 @@ using Discord.API; using Discord.API.Models; using Discord.Helpers; -using Discord.Models; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Reflection; using System.Threading.Tasks; -using Role = Discord.Models.Role; namespace Discord { @@ -372,7 +370,7 @@ namespace Discord var extendedModel = model as ExtendedServerInfo; server.AFKChannelId = extendedModel.AFKChannelId; server.AFKTimeout = extendedModel.AFKTimeout; - server.JoinedAt = extendedModel.JoinedAt; + server.JoinedAt = extendedModel.JoinedAt ?? DateTime.MinValue; server.OwnerId = extendedModel.OwnerId; server.Presence = extendedModel.Presence; server.Region = extendedModel.Region; @@ -420,7 +418,7 @@ namespace Discord private Channel DeleteChannel(string id) { Channel channel = null; - if (_channels.TryRemove(id, out channel)) + if (_channels.TryRemove(id, out channel) && !channel.IsPrivate) { bool ignored; channel.Server._channels.TryRemove(id, out ignored); @@ -429,10 +427,10 @@ namespace Discord } //TODO: Temporary measure, unsure if we want to store these or not. - private ChatMessageReference GetMessage(string id, string channelId) + private ChatMessage GetMessage(string id, string channelId) { if (id == null || channelId == null) return null; - return new ChatMessageReference(id, channelId, this); + return new ChatMessage(id, channelId, this); } private ChatMessage UpdateMessage(WebSocketEvents.MessageCreate model, bool addNew = true) { diff --git a/Discord.Net/DiscordWebSocket.cs b/Discord.Net/DiscordWebSocket.cs index 8bd2b6d80..5c8c83c49 100644 --- a/Discord.Net/DiscordWebSocket.cs +++ b/Discord.Net/DiscordWebSocket.cs @@ -114,14 +114,14 @@ namespace Discord RaiseGotEvent(msg.Type, msg.Payload as JToken); break; default: - RaiseOnDebugMessage("Unknown WebSocket operation ID: " + msg.Operation); + RaiseOnDebugMessage("Warning: Unknown WebSocket operation ID: " + msg.Operation); break; } builder.Clear(); } } - catch { } + catch (Exception ex) { RaiseOnDebugMessage($"Error: {ex.Message}"); } finally { _cancelToken.Cancel(); } } diff --git a/Discord.Net/Models/ChatMessageReference.cs b/Discord.Net/Models/ChatMessageReference.cs deleted file mode 100644 index d3c800cf3..000000000 --- a/Discord.Net/Models/ChatMessageReference.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Newtonsoft.Json; - -namespace Discord.Models -{ - public class ChatMessageReference - { - protected readonly DiscordClient _client; - - public string Id { get; } - - public string ChannelId { get; } - [JsonIgnore] - public Channel Channel { get { return _client.GetChannel(ChannelId); } } - - internal ChatMessageReference(string id, string channelId, DiscordClient client) - { - Id = id; - ChannelId = channelId; - _client = client; - } - } -} diff --git a/Discord.Net/Models/Role.cs b/Discord.Net/Role.cs similarity index 95% rename from Discord.Net/Models/Role.cs rename to Discord.Net/Role.cs index 1c6d47a8e..ccc774dfc 100644 --- a/Discord.Net/Models/Role.cs +++ b/Discord.Net/Role.cs @@ -1,6 +1,6 @@ using Newtonsoft.Json; -namespace Discord.Models +namespace Discord { public sealed class Role { diff --git a/Discord.Net/Models/Server.cs b/Discord.Net/Server.cs similarity index 98% rename from Discord.Net/Models/Server.cs rename to Discord.Net/Server.cs index 667f0cc66..373ea8010 100644 --- a/Discord.Net/Models/Server.cs +++ b/Discord.Net/Server.cs @@ -4,7 +4,7 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; -namespace Discord.Models +namespace Discord { public sealed class Server { diff --git a/Discord.Net/Models/User.cs b/Discord.Net/User.cs similarity index 97% rename from Discord.Net/Models/User.cs rename to Discord.Net/User.cs index f9f528e89..b38ce01bc 100644 --- a/Discord.Net/Models/User.cs +++ b/Discord.Net/User.cs @@ -1,6 +1,6 @@ using System; -namespace Discord.Models +namespace Discord { public sealed class User {