mirror of
https://github.com/jellyfin/jellyfin
synced 2024-09-06 08:04:44 +00:00
Added more IBN api methods
This commit is contained in:
parent
d4d2e85486
commit
9c456c63c8
53
MediaBrowser.Api/HttpHandlers/GenreHandler.cs
Normal file
53
MediaBrowser.Api/HttpHandlers/GenreHandler.cs
Normal file
|
@ -0,0 +1,53 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using MediaBrowser.Common.Net.Handlers;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Model.DTO;
|
||||
using MediaBrowser.Model.Entities;
|
||||
|
||||
namespace MediaBrowser.Api.HttpHandlers
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets a single genre
|
||||
/// </summary>
|
||||
public class GenreHandler : BaseJsonHandler<IBNItem<Genre>>
|
||||
{
|
||||
protected override IBNItem<Genre> GetObjectToSerialize()
|
||||
{
|
||||
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
|
||||
Guid userId = Guid.Parse(QueryString["userid"]);
|
||||
User user = Kernel.Instance.Users.First(u => u.Id == userId);
|
||||
|
||||
string name = QueryString["name"];
|
||||
|
||||
return GetGenre(parent, user, name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a Genre
|
||||
/// </summary>
|
||||
private IBNItem<Genre> GetGenre(Folder parent, User user, string name)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
// Get all the allowed recursive children
|
||||
IEnumerable<BaseItem> allItems = parent.GetParentalAllowedRecursiveChildren(user);
|
||||
|
||||
foreach (var item in allItems)
|
||||
{
|
||||
if (item.Genres != null && item.Genres.Any(s => s.Equals(name, StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
// Get the original entity so that we can also supply the PrimaryImagePath
|
||||
return new IBNItem<Genre>()
|
||||
{
|
||||
Item = Kernel.Instance.ItemController.GetGenre(name),
|
||||
BaseItemCount = count
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
|
@ -23,7 +23,7 @@ namespace MediaBrowser.Api.HttpHandlers
|
|||
/// Gets all genres from all recursive children of a folder
|
||||
/// The CategoryInfo class is used to keep track of the number of times each genres appears
|
||||
/// </summary>
|
||||
public IEnumerable<IBNItem<Genre>> GetAllGenres(Folder parent, User user)
|
||||
private IEnumerable<IBNItem<Genre>> GetAllGenres(Folder parent, User user)
|
||||
{
|
||||
Dictionary<string, int> data = new Dictionary<string, int>();
|
||||
|
||||
|
|
|
@ -1,14 +1,53 @@
|
|||
using MediaBrowser.Common.Net.Handlers;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using MediaBrowser.Common.Net.Handlers;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Model.DTO;
|
||||
using MediaBrowser.Model.Entities;
|
||||
|
||||
namespace MediaBrowser.Api.HttpHandlers
|
||||
{
|
||||
public class PersonHandler : BaseJsonHandler<Person>
|
||||
/// <summary>
|
||||
/// Gets a single Person
|
||||
/// </summary>
|
||||
public class PersonHandler : BaseJsonHandler<IBNItem<Person>>
|
||||
{
|
||||
protected override Person GetObjectToSerialize()
|
||||
protected override IBNItem<Person> GetObjectToSerialize()
|
||||
{
|
||||
return Kernel.Instance.ItemController.GetPerson(QueryString["name"]);
|
||||
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
|
||||
Guid userId = Guid.Parse(QueryString["userid"]);
|
||||
User user = Kernel.Instance.Users.First(u => u.Id == userId);
|
||||
|
||||
string name = QueryString["name"];
|
||||
|
||||
return GetPerson(parent, user, name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a Person
|
||||
/// </summary>
|
||||
private IBNItem<Person> GetPerson(Folder parent, User user, string name)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
// Get all the allowed recursive children
|
||||
IEnumerable<BaseItem> allItems = parent.GetParentalAllowedRecursiveChildren(user);
|
||||
|
||||
foreach (var item in allItems)
|
||||
{
|
||||
if (item.People != null && item.People.Any(s => s.Name.Equals(name, StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
// Get the original entity so that we can also supply the PrimaryImagePath
|
||||
return new IBNItem<Person>()
|
||||
{
|
||||
Item = Kernel.Instance.ItemController.GetPerson(name),
|
||||
BaseItemCount = count
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
53
MediaBrowser.Api/HttpHandlers/StudioHandler.cs
Normal file
53
MediaBrowser.Api/HttpHandlers/StudioHandler.cs
Normal file
|
@ -0,0 +1,53 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using MediaBrowser.Common.Net.Handlers;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Model.DTO;
|
||||
using MediaBrowser.Model.Entities;
|
||||
|
||||
namespace MediaBrowser.Api.HttpHandlers
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets a single studio
|
||||
/// </summary>
|
||||
public class StudioHandler : BaseJsonHandler<IBNItem<Studio>>
|
||||
{
|
||||
protected override IBNItem<Studio> GetObjectToSerialize()
|
||||
{
|
||||
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
|
||||
Guid userId = Guid.Parse(QueryString["userid"]);
|
||||
User user = Kernel.Instance.Users.First(u => u.Id == userId);
|
||||
|
||||
string name = QueryString["name"];
|
||||
|
||||
return GetStudio(parent, user, name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a Studio
|
||||
/// </summary>
|
||||
private IBNItem<Studio> GetStudio(Folder parent, User user, string name)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
// Get all the allowed recursive children
|
||||
IEnumerable<BaseItem> allItems = parent.GetParentalAllowedRecursiveChildren(user);
|
||||
|
||||
foreach (var item in allItems)
|
||||
{
|
||||
if (item.Studios != null && item.Studios.Any(s => s.Equals(name, StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
// Get the original entity so that we can also supply the PrimaryImagePath
|
||||
return new IBNItem<Studio>()
|
||||
{
|
||||
Item = Kernel.Instance.ItemController.GetStudio(name),
|
||||
BaseItemCount = count
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
53
MediaBrowser.Api/HttpHandlers/YearHandler.cs
Normal file
53
MediaBrowser.Api/HttpHandlers/YearHandler.cs
Normal file
|
@ -0,0 +1,53 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using MediaBrowser.Common.Net.Handlers;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Model.DTO;
|
||||
using MediaBrowser.Model.Entities;
|
||||
|
||||
namespace MediaBrowser.Api.HttpHandlers
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets a single year
|
||||
/// </summary>
|
||||
public class YearHandler : BaseJsonHandler<IBNItem<Year>>
|
||||
{
|
||||
protected override IBNItem<Year> GetObjectToSerialize()
|
||||
{
|
||||
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
|
||||
Guid userId = Guid.Parse(QueryString["userid"]);
|
||||
User user = Kernel.Instance.Users.First(u => u.Id == userId);
|
||||
|
||||
string year = QueryString["year"];
|
||||
|
||||
return GetYear(parent, user, int.Parse(year));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a Year
|
||||
/// </summary>
|
||||
private IBNItem<Year> GetYear(Folder parent, User user, int year)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
// Get all the allowed recursive children
|
||||
IEnumerable<BaseItem> allItems = parent.GetParentalAllowedRecursiveChildren(user);
|
||||
|
||||
foreach (var item in allItems)
|
||||
{
|
||||
if (item.ProductionYear.HasValue && item.ProductionYear.Value == year)
|
||||
{
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
// Get the original entity so that we can also supply the PrimaryImagePath
|
||||
return new IBNItem<Year>()
|
||||
{
|
||||
Item = Kernel.Instance.ItemController.GetYear(year),
|
||||
BaseItemCount = count
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
|
@ -49,6 +49,7 @@
|
|||
<Compile Include="ApiService.cs" />
|
||||
<Compile Include="HttpHandlers\AudioHandler.cs" />
|
||||
<Compile Include="HttpHandlers\BaseMediaHandler.cs" />
|
||||
<Compile Include="HttpHandlers\GenreHandler.cs" />
|
||||
<Compile Include="HttpHandlers\GenresHandler.cs" />
|
||||
<Compile Include="HttpHandlers\ImageHandler.cs" />
|
||||
<Compile Include="HttpHandlers\ItemHandler.cs" />
|
||||
|
@ -56,9 +57,11 @@
|
|||
<Compile Include="HttpHandlers\PersonHandler.cs" />
|
||||
<Compile Include="HttpHandlers\PluginConfigurationHandler.cs" />
|
||||
<Compile Include="HttpHandlers\PluginsHandler.cs" />
|
||||
<Compile Include="HttpHandlers\StudioHandler.cs" />
|
||||
<Compile Include="HttpHandlers\StudiosHandler.cs" />
|
||||
<Compile Include="HttpHandlers\UsersHandler.cs" />
|
||||
<Compile Include="HttpHandlers\VideoHandler.cs" />
|
||||
<Compile Include="HttpHandlers\YearHandler.cs" />
|
||||
<Compile Include="HttpHandlers\YearsHandler.cs" />
|
||||
<Compile Include="ImageProcessor.cs" />
|
||||
<Compile Include="Plugin.cs" />
|
||||
|
|
|
@ -85,6 +85,22 @@ namespace MediaBrowser.Api
|
|||
{
|
||||
return new VideoHandler();
|
||||
}
|
||||
else if (localPath.EndsWith("/api/person", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return new PersonHandler();
|
||||
}
|
||||
else if (localPath.EndsWith("/api/genre", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return new GenreHandler();
|
||||
}
|
||||
else if (localPath.EndsWith("/api/year", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return new YearHandler();
|
||||
}
|
||||
else if (localPath.EndsWith("/api/studio", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return new StudioHandler();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -294,6 +294,58 @@ namespace MediaBrowser.ApiInteraction
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a studio
|
||||
/// </summary>
|
||||
public async Task<IBNItem<Studio>> GetStudioAsync(Guid userId, string name)
|
||||
{
|
||||
string url = ApiUrl + "/studio?userId=" + userId.ToString() + "&name=" + name;
|
||||
|
||||
using (Stream stream = await HttpClient.GetStreamAsync(url))
|
||||
{
|
||||
return JsonSerializer.DeserializeFromStream<IBNItem<Studio>>(stream);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a genre
|
||||
/// </summary>
|
||||
public async Task<IBNItem<Genre>> GetGenreAsync(Guid userId, string name)
|
||||
{
|
||||
string url = ApiUrl + "/genre?userId=" + userId.ToString() + "&name=" + name;
|
||||
|
||||
using (Stream stream = await HttpClient.GetStreamAsync(url))
|
||||
{
|
||||
return JsonSerializer.DeserializeFromStream<IBNItem<Genre>>(stream);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a person
|
||||
/// </summary>
|
||||
public async Task<IBNItem<Person>> GetPersonAsync(Guid userId, string name)
|
||||
{
|
||||
string url = ApiUrl + "/person?userId=" + userId.ToString() + "&name=" + name;
|
||||
|
||||
using (Stream stream = await HttpClient.GetStreamAsync(url))
|
||||
{
|
||||
return JsonSerializer.DeserializeFromStream<IBNItem<Person>>(stream);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a year
|
||||
/// </summary>
|
||||
public async Task<IBNItem<Year>> GetYearAsync(Guid userId, int year)
|
||||
{
|
||||
string url = ApiUrl + "/year?userId=" + userId.ToString() + "&year=" + year;
|
||||
|
||||
using (Stream stream = await HttpClient.GetStreamAsync(url))
|
||||
{
|
||||
return JsonSerializer.DeserializeFromStream<IBNItem<Year>>(stream);
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
HttpClient.Dispose();
|
||||
|
|
|
@ -4,6 +4,10 @@ using MediaBrowser.Model.Entities;
|
|||
|
||||
namespace MediaBrowser.Model.DTO
|
||||
{
|
||||
/// <summary>
|
||||
/// This is strictly used as a data transfer object from the api layer.
|
||||
/// This holds information about a BaseItem in a format that is convenient for the client.
|
||||
/// </summary>
|
||||
public class DTOBaseItem : IHasProviderIds
|
||||
{
|
||||
public string Name { get; set; }
|
||||
|
|
Loading…
Reference in a new issue