ApiInteraction tweaks

This commit is contained in:
LukePulverenti Luke Pulverenti luke pulverenti 2012-09-06 10:00:44 -04:00
parent a588e0461b
commit 99a679d328
5 changed files with 48 additions and 58 deletions

View file

@ -45,6 +45,9 @@
<Compile Include="..\MediaBrowser.ApiInteraction\DataSerializer.cs"> <Compile Include="..\MediaBrowser.ApiInteraction\DataSerializer.cs">
<Link>DataSerializer.cs</Link> <Link>DataSerializer.cs</Link>
</Compile> </Compile>
<Compile Include="..\MediaBrowser.ApiInteraction\SerializationFormats.cs">
<Link>SerializationFormats.cs</Link>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View file

@ -45,11 +45,11 @@ namespace MediaBrowser.ApiInteraction
/// <summary> /// <summary>
/// Gets the data format to request from the server /// Gets the data format to request from the server
/// </summary> /// </summary>
private SerializationFormat SerializationFormat private SerializationFormats SerializationFormat
{ {
get get
{ {
return ApiInteraction.SerializationFormat.Protobuf; return ApiInteraction.SerializationFormats.Protobuf;
} }
} }
@ -585,11 +585,11 @@ namespace MediaBrowser.ApiInteraction
string url = ApiUrl + "/ServerConfiguration"; string url = ApiUrl + "/ServerConfiguration";
// At the moment this can't be retrieved in protobuf format // At the moment this can't be retrieved in protobuf format
SerializationFormat format = SerializationFormat.Jsv; SerializationFormats format = DataSerializer.CanDeSerializeJsv ? SerializationFormats.Jsv : SerializationFormats.Json;
using (Stream stream = await GetSerializedStreamAsync(url, format).ConfigureAwait(false)) using (Stream stream = await GetSerializedStreamAsync(url, format).ConfigureAwait(false))
{ {
return DeserializeFromStream<ServerConfiguration>(stream, format); return DataSerializer.DeserializeFromStream<ServerConfiguration>(stream, format);
} }
} }
@ -601,11 +601,11 @@ namespace MediaBrowser.ApiInteraction
string url = ApiUrl + "/PluginConfiguration?assemblyfilename=" + plugin.AssemblyFileName; string url = ApiUrl + "/PluginConfiguration?assemblyfilename=" + plugin.AssemblyFileName;
// At the moment this can't be retrieved in protobuf format // At the moment this can't be retrieved in protobuf format
SerializationFormat format = SerializationFormat.Jsv; SerializationFormats format = DataSerializer.CanDeSerializeJsv ? SerializationFormats.Jsv : SerializationFormats.Json;
using (Stream stream = await GetSerializedStreamAsync(url, format).ConfigureAwait(false)) using (Stream stream = await GetSerializedStreamAsync(url, format).ConfigureAwait(false))
{ {
return DeserializeFromStream(stream, format, configurationType); return DataSerializer.DeserializeFromStream(stream, format, configurationType);
} }
} }
@ -659,7 +659,7 @@ namespace MediaBrowser.ApiInteraction
/// <summary> /// <summary>
/// This is a helper around getting a stream from the server that contains serialized data /// This is a helper around getting a stream from the server that contains serialized data
/// </summary> /// </summary>
private Task<Stream> GetSerializedStreamAsync(string url, SerializationFormat serializationFormat) private Task<Stream> GetSerializedStreamAsync(string url, SerializationFormats serializationFormat)
{ {
if (url.IndexOf('?') == -1) if (url.IndexOf('?') == -1)
{ {
@ -675,35 +675,7 @@ namespace MediaBrowser.ApiInteraction
private T DeserializeFromStream<T>(Stream stream) private T DeserializeFromStream<T>(Stream stream)
{ {
return DeserializeFromStream<T>(stream, SerializationFormat); return DataSerializer.DeserializeFromStream<T>(stream, SerializationFormat);
}
private T DeserializeFromStream<T>(Stream stream, SerializationFormat format)
{
if (format == ApiInteraction.SerializationFormat.Protobuf)
{
return DataSerializer.DeserializeProtobufFromStream<T>(stream);
}
if (format == ApiInteraction.SerializationFormat.Jsv)
{
return DataSerializer.DeserializeJsvFromStream<T>(stream);
}
return DataSerializer.DeserializeJsonFromStream<T>(stream);
}
private object DeserializeFromStream(Stream stream, SerializationFormat format, Type type)
{
if (format == ApiInteraction.SerializationFormat.Protobuf)
{
throw new NotImplementedException();
}
if (format == ApiInteraction.SerializationFormat.Jsv)
{
return DataSerializer.DeserializeJsvFromStream(stream, type);
}
return DataSerializer.DeserializeJsonFromStream(stream, type);
} }
/// <summary> /// <summary>

View file

@ -7,30 +7,33 @@ namespace MediaBrowser.ApiInteraction
{ {
public static class DataSerializer public static class DataSerializer
{ {
public static T DeserializeJsonFromStream<T>(Stream stream) public static T DeserializeFromStream<T>(Stream stream, SerializationFormats format)
{ {
if (format == ApiInteraction.SerializationFormats.Protobuf)
{
return Serializer.Deserialize<T>(stream);
}
if (format == ApiInteraction.SerializationFormats.Jsv)
{
return TypeSerializer.DeserializeFromStream<T>(stream);
}
return JsonSerializer.DeserializeFromStream<T>(stream); return JsonSerializer.DeserializeFromStream<T>(stream);
} }
public static T DeserializeJsvFromStream<T>(Stream stream) public static object DeserializeFromStream(Stream stream, SerializationFormats format, Type type)
{ {
return TypeSerializer.DeserializeFromStream<T>(stream); if (format == ApiInteraction.SerializationFormats.Protobuf)
} {
throw new NotImplementedException();
}
if (format == ApiInteraction.SerializationFormats.Jsv)
{
return TypeSerializer.DeserializeFromStream(type, stream);
}
public static object DeserializeJsvFromStream(Stream stream, Type type)
{
return TypeSerializer.DeserializeFromStream(type, stream);
}
public static object DeserializeJsonFromStream(Stream stream, Type type)
{
return JsonSerializer.DeserializeFromStream(type, stream); return JsonSerializer.DeserializeFromStream(type, stream);
} }
public static T DeserializeProtobufFromStream<T>(Stream stream)
{
return Serializer.Deserialize<T>(stream);
}
public static void Configure() public static void Configure()
{ {
@ -38,12 +41,13 @@ namespace MediaBrowser.ApiInteraction
JsConfig.ExcludeTypeInfo = true; JsConfig.ExcludeTypeInfo = true;
JsConfig.IncludeNullValues = false; JsConfig.IncludeNullValues = false;
} }
}
public enum SerializationFormat public static bool CanDeSerializeJsv
{ {
Json, get
Jsv, {
Protobuf return true;
}
}
} }
} }

View file

@ -49,6 +49,7 @@
<Compile Include="ApiClient.cs" /> <Compile Include="ApiClient.cs" />
<Compile Include="DataSerializer.cs" /> <Compile Include="DataSerializer.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SerializationFormats.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj"> <ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj">

View file

@ -0,0 +1,10 @@

namespace MediaBrowser.ApiInteraction
{
public enum SerializationFormats
{
Json,
Jsv,
Protobuf
}
}