Fixed the plex friends. Added some unit tests, moved the plex auth into it's own page

This commit is contained in:
tidusjar 2016-03-04 12:45:42 +00:00
commit 07beddc26a
22 changed files with 602 additions and 151 deletions

View file

@ -25,8 +25,13 @@
// ************************************************************************/
#endregion
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using PlexRequests.Api.Interfaces;
using PlexRequests.Api.Models;
using RestSharp;
@ -57,5 +62,29 @@ namespace PlexRequests.Api
return response.Data;
}
public T ExecuteXml<T>(IRestRequest request, Uri baseUri) where T : class
{
var client = new RestClient { BaseUrl = baseUri };
var response = client.Execute(request);
if (response.ErrorException != null)
{
var message = "Error retrieving response. Check inner details for more info.";
throw new ApplicationException(message, response.ErrorException);
}
return Deserialize<T>(response.Content);
}
public T Deserialize<T>(string input)
where T : class
{
var ser = new XmlSerializer(typeof(T));
using (var sr = new StringReader(input))
return (T)ser.Deserialize(sr);
}
}
}

View file

@ -71,7 +71,7 @@ namespace PlexRequests.Api.Models
public class PlexFriends
{
[XmlElement(ElementName = "User")]
public List<UserFriends> User { get; set; }
public UserFriends[] User { get; set; }
[XmlAttribute(AttributeName = "friendlyName")]
public string FriendlyName { get; set; }
[XmlAttribute(AttributeName = "identifier")]

View file

@ -27,6 +27,7 @@
using System;
using PlexRequests.Api.Models;
using PlexRequests.Helpers;
using RestSharp;
@ -34,6 +35,12 @@ namespace PlexRequests.Api
{
public class PlexApi
{
static PlexApi()
{
Version = AssemblyHelper.GetAssemblyVersion();
}
private static string Version { get; set; }
public PlexAuthentication GetToken(string username, string password)
{
var userModel = new PlexUserRequest
@ -51,7 +58,7 @@ namespace PlexRequests.Api
request.AddHeader("X-Plex-Client-Identifier", "Test213"); // TODO need something unique to the users version/installation
request.AddHeader("X-Plex-Product", "Request Plex");
request.AddHeader("X-Plex-Version", "0.0.1");
request.AddHeader("X-Plex-Version", Version);
request.AddHeader("Content-Type", "application/json");
request.AddJsonBody(userModel);
@ -69,12 +76,12 @@ namespace PlexRequests.Api
request.AddHeader("X-Plex-Client-Identifier", "Test213");
request.AddHeader("X-Plex-Product", "Request Plex");
request.AddHeader("X-Plex-Version", "0.0.1");
request.AddHeader("X-Plex-Version", Version);
request.AddHeader("X-Plex-Token", authToken);
request.AddHeader("Content-Type", "application/xml");
var api = new ApiRequest();
var users = api.Execute<PlexFriends>(request, new Uri("https://plex.tv/pms/friends/all"));
var users = api.ExecuteXml<PlexFriends>(request, new Uri("https://plex.tv/pms/friends/all"));
return users;
}