Browse Source

Support serializing streams where CanSeek is false

voice-allocs
RogueException 7 years ago
parent
commit
ebcdd14fc6
1 changed files with 20 additions and 15 deletions
  1. +20
    -15
      src/Discord.Net.Rest/Serialization/Json/Converters/ImagePropertyConverter.cs

+ 20
- 15
src/Discord.Net.Rest/Serialization/Json/Converters/ImagePropertyConverter.cs View File

@@ -1,4 +1,5 @@
using System;
using System.IO;
using System.Text.Json;

namespace Discord.Serialization.Json.Converters
@@ -18,24 +19,28 @@ namespace Discord.Serialization.Json.Converters
string str;
if (value.Stream != null)
{
byte[] bytes = new byte[value.Stream.Length - value.Stream.Position];
value.Stream.Read(bytes, 0, bytes.Length);
byte[] bytes;
int length;
if (value.Stream.CanSeek)
{
bytes = new byte[value.Stream.Length - value.Stream.Position];
length = value.Stream.Read(bytes, 0, bytes.Length);
}
else
{
var tempStream = new MemoryStream();
value.Stream.CopyTo(tempStream);
bytes = tempStream.GetBuffer();
length = (int)tempStream.Length;
}

string base64 = Convert.ToBase64String(bytes);
string base64 = Convert.ToBase64String(bytes, 0, length);
switch (value.StreamFormat)
{
case ImageFormat.Jpeg:
str = $"data:image/jpeg;base64,{base64}";
break;
case ImageFormat.Png:
str = $"data:image/png;base64,{base64}";
break;
case ImageFormat.Gif:
str = $"data:image/gif;base64,{base64}";
break;
case ImageFormat.WebP:
str = $"data:image/webp;base64,{base64}";
break;
case ImageFormat.Jpeg: str = $"data:image/jpeg;base64,{base64}"; break;
case ImageFormat.Png: str = $"data:image/png;base64,{base64}"; break;
case ImageFormat.Gif: str = $"data:image/gif;base64,{base64}"; break;
case ImageFormat.WebP: str = $"data:image/webp;base64,{base64}"; break;
default:
throw new SerializationException($"Unable to serialize an {nameof(Image)} with a format of {value.StreamFormat}");
}


Loading…
Cancel
Save