From cb7f04e4d3ff0a14dabb89ff828dde5a4703dc6b Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Wed, 29 Aug 2012 08:21:56 -0400 Subject: Upgraded Protobuf, and added api support for it --- MediaBrowser.ApiInteraction/ApiClient.cs | 77 +++++++++++++++++++++++--------- 1 file changed, 57 insertions(+), 20 deletions(-) (limited to 'MediaBrowser.ApiInteraction/ApiClient.cs') diff --git a/MediaBrowser.ApiInteraction/ApiClient.cs b/MediaBrowser.ApiInteraction/ApiClient.cs index 1f7f653df1..149529b809 100644 --- a/MediaBrowser.ApiInteraction/ApiClient.cs +++ b/MediaBrowser.ApiInteraction/ApiClient.cs @@ -40,10 +40,27 @@ namespace MediaBrowser.ApiInteraction } /// - /// Gets or sets the format to request from the server - /// The Data Serializer will have to be able to support it. + /// Gets the data format to request from the server /// - public SerializationFormat SerializationFormat { get; set; } + private SerializationFormat SerializationFormat + { + get + { + // First try Protobuf since it has the best performance + if (DataSerializer.CanDeserializeProtobuf) + { + return ApiInteraction.SerializationFormat.Protobuf; + } + + // Next best is jsv + if (DataSerializer.CanDeserializeJsv) + { + return ApiInteraction.SerializationFormat.Jsv; + } + + return ApiInteraction.SerializationFormat.Json; + } + } public HttpClient HttpClient { get; private set; } public IDataSerializer DataSerializer { get; set; } @@ -288,7 +305,7 @@ namespace MediaBrowser.ApiInteraction return url; } - + /// /// This is a helper to get a list of backdrop url's from a given ApiBaseItemWrapper. If the actual item does not have any backdrops it will return backdrops from the first parent that does. /// @@ -372,20 +389,20 @@ namespace MediaBrowser.ApiInteraction using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream(stream); + return DeserializeFromStream(stream); } } /// /// Gets all Users /// - public async Task> GetAllUsersAsync() + public async Task> GetAllUsersAsync() { string url = ApiUrl + "/users"; using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream>(stream); + return DeserializeFromStream(stream); } } @@ -398,7 +415,7 @@ namespace MediaBrowser.ApiInteraction using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream>(stream); + return DeserializeFromStream(stream); } } @@ -411,7 +428,7 @@ namespace MediaBrowser.ApiInteraction using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream>(stream); + return DeserializeFromStream(stream); } } @@ -424,7 +441,7 @@ namespace MediaBrowser.ApiInteraction using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream>(stream); + return DeserializeFromStream(stream); } } @@ -437,7 +454,7 @@ namespace MediaBrowser.ApiInteraction using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream>(stream); + return DeserializeFromStream(stream); } } @@ -450,7 +467,7 @@ namespace MediaBrowser.ApiInteraction using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream>(stream); + return DeserializeFromStream(stream); } } @@ -465,7 +482,7 @@ namespace MediaBrowser.ApiInteraction using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream>(stream); + return DeserializeFromStream(stream); } } @@ -478,7 +495,7 @@ namespace MediaBrowser.ApiInteraction using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream>(stream); + return DeserializeFromStream(stream); } } @@ -491,7 +508,7 @@ namespace MediaBrowser.ApiInteraction using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream>(stream); + return DeserializeFromStream(stream); } } @@ -504,7 +521,7 @@ namespace MediaBrowser.ApiInteraction using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream(stream); + return DeserializeFromStream(stream); } } @@ -517,7 +534,7 @@ namespace MediaBrowser.ApiInteraction using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream(stream); + return DeserializeFromStream(stream); } } @@ -530,7 +547,7 @@ namespace MediaBrowser.ApiInteraction using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream(stream); + return DeserializeFromStream(stream); } } @@ -543,7 +560,7 @@ namespace MediaBrowser.ApiInteraction using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) { - return DataSerializer.DeserializeFromStream(stream); + return DeserializeFromStream(stream); } } @@ -564,6 +581,25 @@ namespace MediaBrowser.ApiInteraction return GetStreamAsync(url); } + private T DeserializeFromStream(Stream stream) + { + return DeserializeFromStream(stream, SerializationFormat); + } + + private T DeserializeFromStream(Stream stream, SerializationFormat format) + { + if (format == ApiInteraction.SerializationFormat.Protobuf) + { + return DataSerializer.DeserializeProtobufFromStream(stream); + } + if (format == ApiInteraction.SerializationFormat.Jsv) + { + return DataSerializer.DeserializeJsvFromStream(stream); + } + + return DataSerializer.DeserializeJsonFromStream(stream); + } + /// /// This is just a helper around HttpClient /// @@ -581,6 +617,7 @@ namespace MediaBrowser.ApiInteraction public enum SerializationFormat { Json, - Jsv + Jsv, + Protobuf } } -- cgit v1.2.3