Browse Source

Fix JSON converters for Activities

pull/877/head
Christopher F 7 years ago
parent
commit
b8ef95cd81
8 changed files with 53 additions and 10 deletions
  1. +2
    -2
      src/Discord.Net.Core/Entities/Activities/GameParty.cs
  2. +3
    -3
      src/Discord.Net.Core/Entities/Activities/GameTimestamps.cs
  3. +2
    -2
      src/Discord.Net.Rest/API/Common/GameParty.cs
  4. +4
    -2
      src/Discord.Net.Rest/API/Common/GameTimestamps.cs
  5. +7
    -0
      src/Discord.Net.Rest/API/UnixTimestampAttribute.cs
  6. +6
    -0
      src/Discord.Net.Rest/Net/Converters/DiscordContractResolver.cs
  7. +28
    -0
      src/Discord.Net.Rest/Net/Converters/UnixTimestampConverter.cs
  8. +1
    -1
      src/Discord.Net.WebSocket/Extensions/EntityExtensions.cs

+ 2
- 2
src/Discord.Net.Core/Entities/Activities/GameParty.cs View File

@@ -2,7 +2,7 @@
{
public class GameParty
{
public ulong[] Size { get; internal set; }
public ulong Id { get; internal set; }
public string Id { get; internal set; }
public int[] Size { get; internal set; }
}
}

+ 3
- 3
src/Discord.Net.Core/Entities/Activities/GameTimestamps.cs View File

@@ -4,10 +4,10 @@ namespace Discord
{
public class GameTimestamps
{
public DateTimeOffset Start { get; }
public DateTimeOffset End { get; }
public DateTimeOffset? Start { get; }
public DateTimeOffset? End { get; }

public GameTimestamps(DateTimeOffset start, DateTimeOffset end)
public GameTimestamps(DateTimeOffset? start, DateTimeOffset? end)
{
Start = start;
End = end;


+ 2
- 2
src/Discord.Net.Rest/API/Common/GameParty.cs View File

@@ -5,8 +5,8 @@ namespace Discord.API
internal class GameParty
{
[JsonProperty("id")]
public ulong Id { get; set; }
public string Id { get; set; }
[JsonProperty("size")]
public ulong[] Size { get; set; }
public int[] Size { get; set; }
}
}

+ 4
- 2
src/Discord.Net.Rest/API/Common/GameTimestamps.cs View File

@@ -6,8 +6,10 @@ namespace Discord.API
internal class GameTimestamps
{
[JsonProperty("start")]
public DateTimeOffset Start { get; set; }
[UnixTimestamp]
public Optional<DateTimeOffset> Start { get; set; }
[JsonProperty("end")]
public DateTimeOffset End { get; set; }
[UnixTimestamp]
public Optional<DateTimeOffset> End { get; set; }
}
}

+ 7
- 0
src/Discord.Net.Rest/API/UnixTimestampAttribute.cs View File

@@ -0,0 +1,7 @@
using System;

namespace Discord.API
{
[AttributeUsage(AttributeTargets.Property)]
internal class UnixTimestampAttribute : Attribute { }
}

+ 6
- 0
src/Discord.Net.Rest/Net/Converters/DiscordContractResolver.cs View File

@@ -66,6 +66,12 @@ namespace Discord.Net.Converters
if (type == typeof(ulong))
return UInt64Converter.Instance;
}
bool hasUnixStamp = propInfo.GetCustomAttribute<UnixTimestampAttribute>() != null;
if (hasUnixStamp)
{
if (type == typeof(DateTimeOffset))
return UnixTimestampConverter.Instance;
}

//Enums
if (type == typeof(PermissionTarget))


+ 28
- 0
src/Discord.Net.Rest/Net/Converters/UnixTimestampConverter.cs View File

@@ -0,0 +1,28 @@
using System;
using Newtonsoft.Json;

namespace Discord.Net.Converters
{
public class UnixTimestampConverter : JsonConverter
{
public static readonly UnixTimestampConverter Instance = new UnixTimestampConverter();

public override bool CanConvert(Type objectType) => true;
public override bool CanRead => true;
public override bool CanWrite => true;

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
// Discord doesn't validate if timestamps contain decimals or not
if (reader.Value is double d)
return new DateTimeOffset(1970, 1, 1, 0, 0, 0, 0, TimeSpan.Zero).AddMilliseconds(d);
long offset = (long)reader.Value;
return new DateTimeOffset(1970, 1, 1, 0, 0, 0, 0, TimeSpan.Zero).AddMilliseconds(offset);
}

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
}

+ 1
- 1
src/Discord.Net.WebSocket/Extensions/EntityExtensions.cs View File

@@ -69,7 +69,7 @@

public static GameTimestamps ToEntity(this API.GameTimestamps model)
{
return new GameTimestamps(model.Start, model.End);
return new GameTimestamps(model.Start.ToNullable(), model.End.ToNullable());
}
}
}

Loading…
Cancel
Save