Browse Source

Add model conversions for outgoing+incoming rich presences

pull/877/head
Christopher F Christopher F 8 years ago
parent
commit
662146c444
3 changed files with 81 additions and 6 deletions
  1. +4
    -4
      src/Discord.Net.Rest/API/Common/GameAssets.cs
  2. +45
    -1
      src/Discord.Net.WebSocket/DiscordSocketClient.cs
  3. +32
    -1
      src/Discord.Net.WebSocket/Extensions/EntityExtensions.cs

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

@@ -5,12 +5,12 @@ namespace Discord.API
internal class GameAssets internal class GameAssets
{ {
[JsonProperty("small_text")] [JsonProperty("small_text")]
public Optional<string> SmallText { get; }
public Optional<string> SmallText { get; set; }
[JsonProperty("small_image")] [JsonProperty("small_image")]
public Optional<string> SmallImage { get; }
public Optional<string> SmallImage { get; set; }
[JsonProperty("large_image")] [JsonProperty("large_image")]
public Optional<string> LargeText { get; }
public Optional<string> LargeText { get; set; }
[JsonProperty("large_text")] [JsonProperty("large_text")]
public Optional<string> LargeImage { get; }
public Optional<string> LargeImage { get; set; }
} }
} }

+ 45
- 1
src/Discord.Net.WebSocket/DiscordSocketClient.cs View File

@@ -334,6 +334,12 @@ namespace Discord.WebSocket
Game = null; Game = null;
await SendStatusAsync().ConfigureAwait(false); await SendStatusAsync().ConfigureAwait(false);
} }

public async Task SetGameAsync(Game game)
{
Game = game;
await SendStatusAsync().ConfigureAwait(false);
}
private async Task SendStatusAsync() private async Task SendStatusAsync()
{ {
if (CurrentUser == null) if (CurrentUser == null)
@@ -346,11 +352,49 @@ namespace Discord.WebSocket
GameModel gameModel; GameModel gameModel;
if (game != null) if (game != null)
{ {
var assets = game.Value.Assets.HasValue
? new API.GameAssets()
{
SmallText = game.Value.Assets.Value.SmallText,
SmallImage = game.Value.Assets.Value.SmallImage,
LargeText = game.Value.Assets.Value.LargeText,
LargeImage = game.Value.Assets.Value.LargeImage,
}
: Optional.Create<API.GameAssets>();
var party = game.Value.Party.HasValue
? new API.GameParty
{
Id = game.Value.Party.Value.Id,
Size = game.Value.Party.Value.Size
}
: Optional.Create<API.GameParty>();
var secrets = game.Value.Secrets.HasValue
? new API.GameSecrets()
{
Join = game.Value.Secrets.Value.Join,
Match = game.Value.Secrets.Value.Match,
Spectate = game.Value.Secrets.Value.Spectate
}
: Optional.Create<API.GameSecrets>();
var timestamps = game.Value.Timestamps.HasValue
? new API.GameTimestamps
{
Start = game.Value.Timestamps.Value.Start,
End = game.Value.Timestamps.Value.End
}
: Optional.Create<API.GameTimestamps>();
gameModel = new API.Game gameModel = new API.Game
{ {
Name = game.Value.Name, Name = game.Value.Name,
StreamType = game.Value.StreamType, StreamType = game.Value.StreamType,
StreamUrl = game.Value.StreamUrl
StreamUrl = game.Value.StreamUrl,
Details = game.Value.Details,
State = game.Value.State,
ApplicationId = game.Value.ApplicationId ?? Optional.Create<ulong>(),
Assets = assets,
Party = party,
Secrets = secrets,
Timestamps = timestamps,
}; };
} }
else else


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

@@ -6,7 +6,38 @@
{ {
return new Game(model.Name, return new Game(model.Name,
model.StreamUrl.GetValueOrDefault(null), model.StreamUrl.GetValueOrDefault(null),
model.StreamType.GetValueOrDefault(null) ?? StreamType.NotStreaming);
model.StreamType.GetValueOrDefault(null) ?? StreamType.NotStreaming,
model.Details.GetValueOrDefault(),
model.State.GetValueOrDefault(),
model.ApplicationId.ToNullable(),
model.Assets.GetValueOrDefault(null)?.ToEntity(),
model.Party.GetValueOrDefault(null)?.ToEntity(),
model.Secrets.GetValueOrDefault(null)?.ToEntity(),
model.Timestamps.GetValueOrDefault(null)?.ToEntity()
);
}

public static GameAssets ToEntity(this API.GameAssets model)
{
return new GameAssets(model.SmallText.GetValueOrDefault(),
model.SmallImage.GetValueOrDefault(),
model.LargeText.GetValueOrDefault(),
model.LargeImage.GetValueOrDefault());
}

public static GameParty ToEntity(this API.GameParty model)
{
return new GameParty(model.Size, model.Id);
}

public static GameSecrets ToEntity(this API.GameSecrets model)
{
return new GameSecrets(model.Match, model.Join, model.Spectate);
}

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

Loading…
Cancel
Save