using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; using Newtonsoft.Json; using Ombi.Api.Emby.Models; using Ombi.Api.Emby.Models.Media.Tv; using Ombi.Api.Emby.Models.Movie; using Ombi.Helpers; namespace Ombi.Api.Emby { public class EmbyApi : IEmbyApi { public EmbyApi(IApi api) { Api = api; } private IApi Api { get; } /// /// Returns all users from the Emby Instance /// /// /// public async Task> GetUsers(string baseUri, string apiKey) { var request = new Request("emby/users", baseUri, HttpMethod.Get); AddHeaders(request, apiKey); var obj = await Api.Request>(request); return obj; } public async Task GetSystemInformation(string apiKey, string baseUrl) { var request = new Request("emby/System/Info", baseUrl, HttpMethod.Get); AddHeaders(request, apiKey); var obj = await Api.Request(request); return obj; } public async Task LogIn(string username, string password, string apiKey, string baseUri) { var request = new Request("emby/users/authenticatebyname", baseUri, HttpMethod.Post); var body = new { username, password = password.GetSha1Hash().ToLower(), passwordMd5 = password.CalcuateMd5Hash() }; request.AddJsonBody(body); request.AddHeader("X-Emby-Authorization", $"MediaBrowser Client=\"Ombi\", Device=\"Ombi\", DeviceId=\"v3\", Version=\"v3\""); AddHeaders(request, apiKey); var obj = await Api.Request(request); return obj; } public async Task> GetAllMovies(string apiKey, string userId, string baseUri) { return await GetAll("Movie", apiKey, userId, baseUri); } public async Task> GetAllEpisodes(string apiKey, string userId, string baseUri) { return await GetAll("Episode", apiKey, userId, baseUri); } public async Task> GetAllShows(string apiKey, string userId, string baseUri) { return await GetAll("Series", apiKey, userId, baseUri); } public async Task GetSeriesInformation(string mediaId, string apiKey, string userId, string baseUrl) { return await GetInformation(mediaId, apiKey, userId, baseUrl); } public async Task GetMovieInformation(string mediaId, string apiKey, string userId, string baseUrl) { return await GetInformation(mediaId, apiKey, userId, baseUrl); } public async Task GetEpisodeInformation(string mediaId, string apiKey, string userId, string baseUrl) { return await GetInformation(mediaId, apiKey, userId, baseUrl); } private async Task GetInformation(string mediaId, string apiKey, string userId, string baseUrl) { var request = new Request($"emby/users/{userId}/items/{mediaId}", baseUrl, HttpMethod.Get); AddHeaders(request, apiKey); var response = await Api.RequestContent(request); return JsonConvert.DeserializeObject(response); } private async Task> GetAll(string type, string apiKey, string userId, string baseUri) { var request = new Request($"emby/users/{userId}/items", baseUri, HttpMethod.Get); request.AddQueryString("Recursive", true.ToString()); request.AddQueryString("IncludeItemTypes", type); AddHeaders(request, apiKey); var obj = await Api.Request>(request); return obj; } private static void AddHeaders(Request req, string apiKey) { if (!string.IsNullOrEmpty(apiKey)) { req.AddHeader("X-MediaBrowser-Token", apiKey); } req.AddHeader("Accept", "application/json"); req.AddContentHeader("Content-Type", "application/json"); req.AddHeader("Device", "Ombi"); } } }