aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api')
-rw-r--r--MediaBrowser.Api/ItemUpdateService.cs24
-rw-r--r--MediaBrowser.Api/LiveTv/LiveTvService.cs14
-rw-r--r--MediaBrowser.Api/Playback/BaseStreamingService.cs13
-rw-r--r--MediaBrowser.Api/Playback/StreamRequest.cs6
-rw-r--r--MediaBrowser.Api/UserLibrary/ArtistsService.cs5
-rw-r--r--MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs35
-rw-r--r--MediaBrowser.Api/UserLibrary/GameGenresService.cs6
-rw-r--r--MediaBrowser.Api/UserLibrary/GenresService.cs6
-rw-r--r--MediaBrowser.Api/UserLibrary/MusicGenresService.cs5
-rw-r--r--MediaBrowser.Api/UserLibrary/PersonsService.cs5
-rw-r--r--MediaBrowser.Api/UserLibrary/StudiosService.cs5
-rw-r--r--MediaBrowser.Api/UserLibrary/YearsService.cs14
12 files changed, 95 insertions, 43 deletions
diff --git a/MediaBrowser.Api/ItemUpdateService.cs b/MediaBrowser.Api/ItemUpdateService.cs
index 7912cba6fe..c530768297 100644
--- a/MediaBrowser.Api/ItemUpdateService.cs
+++ b/MediaBrowser.Api/ItemUpdateService.cs
@@ -14,14 +14,6 @@ using System.Threading.Tasks;
namespace MediaBrowser.Api
{
- [Route("/LiveTv/Channels/{ChannelId}", "POST")]
- [Api(("Updates an item"))]
- public class UpdateChannel : BaseItemDto, IReturnVoid
- {
- [ApiMember(Name = "ChannelId", Description = "The id of the channel", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
- public string ChannelId { get; set; }
- }
-
[Route("/Items/{ItemId}", "POST")]
[Api(("Updates an item"))]
public class UpdateItem : BaseItemDto, IReturnVoid
@@ -98,13 +90,6 @@ namespace MediaBrowser.Api
Task.WaitAll(task);
}
- public void Post(UpdateChannel request)
- {
- var task = UpdateItem(request);
-
- Task.WaitAll(task);
- }
-
private async Task UpdateItem(UpdateItem request)
{
var item = _dtoService.GetItemByDtoId(request.ItemId);
@@ -144,15 +129,6 @@ namespace MediaBrowser.Api
await _libraryManager.UpdateItem(item, ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
}
- private async Task UpdateItem(UpdateChannel request)
- {
- var item = _liveTv.GetInternalChannel(request.Id);
-
- UpdateItem(request, item);
-
- await _libraryManager.UpdateItem(item, ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
- }
-
public void Post(UpdateArtist request)
{
var task = UpdateItem(request);
diff --git a/MediaBrowser.Api/LiveTv/LiveTvService.cs b/MediaBrowser.Api/LiveTv/LiveTvService.cs
index 5b123eb974..20b1af8b25 100644
--- a/MediaBrowser.Api/LiveTv/LiveTvService.cs
+++ b/MediaBrowser.Api/LiveTv/LiveTvService.cs
@@ -13,9 +13,9 @@ using System.Threading.Tasks;
namespace MediaBrowser.Api.LiveTv
{
- [Route("/LiveTv/Services", "GET")]
+ [Route("/LiveTv/Info", "GET")]
[Api(Description = "Gets available live tv services.")]
- public class GetServices : IReturn<List<LiveTvServiceInfo>>
+ public class GetLiveTvInfo : IReturn<LiveTvInfo>
{
}
@@ -290,13 +290,19 @@ namespace MediaBrowser.Api.LiveTv
}
}
- public object Get(GetServices request)
+ public object Get(GetLiveTvInfo request)
{
var services = _liveTvManager.Services
.Select(GetServiceInfo)
.ToList();
- return ToOptimizedResult(services);
+ var info = new LiveTvInfo
+ {
+ Services = services,
+ ActiveServiceName = _liveTvManager.ActiveService == null ? null : _liveTvManager.ActiveService.Name
+ };
+
+ return ToOptimizedResult(info);
}
private LiveTvServiceInfo GetServiceInfo(ILiveTvService service)
diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs
index a39e4cf584..7ad15c9eea 100644
--- a/MediaBrowser.Api/Playback/BaseStreamingService.cs
+++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs
@@ -1004,9 +1004,9 @@ namespace MediaBrowser.Api.Playback
RequestedUrl = url
};
- Guid itemId;
+ var item = DtoService.GetItemByDtoId(request.Id);
- if (string.Equals(request.Type, "Recording", StringComparison.OrdinalIgnoreCase))
+ if (item is ILiveTvRecording)
{
var recording = await LiveTvManager.GetInternalRecording(request.Id, cancellationToken).ConfigureAwait(false);
@@ -1042,11 +1042,10 @@ namespace MediaBrowser.Api.Playback
}
}
- itemId = recording.Id;
//state.RunTimeTicks = recording.RunTimeTicks;
state.SendInputOverStandardInput = recording.RecordingInfo.Status == RecordingStatus.InProgress;
}
- else if (string.Equals(request.Type, "Channel", StringComparison.OrdinalIgnoreCase))
+ else if (item is LiveTvChannel)
{
var channel = LiveTvManager.GetInternalChannel(request.Id);
@@ -1069,13 +1068,10 @@ namespace MediaBrowser.Api.Playback
state.IsRemote = true;
}
- itemId = channel.Id;
state.SendInputOverStandardInput = true;
}
else
{
- var item = DtoService.GetItemByDtoId(request.Id);
-
state.MediaPath = item.Path;
state.IsRemote = item.LocationType == LocationType.Remote;
@@ -1093,14 +1089,13 @@ namespace MediaBrowser.Api.Playback
}
state.RunTimeTicks = item.RunTimeTicks;
- itemId = item.Id;
}
var videoRequest = request as VideoStreamRequest;
var mediaStreams = ItemRepository.GetMediaStreams(new MediaStreamQuery
{
- ItemId = itemId
+ ItemId = item.Id
}).ToList();
diff --git a/MediaBrowser.Api/Playback/StreamRequest.cs b/MediaBrowser.Api/Playback/StreamRequest.cs
index 454cc411cb..1486c0de7a 100644
--- a/MediaBrowser.Api/Playback/StreamRequest.cs
+++ b/MediaBrowser.Api/Playback/StreamRequest.cs
@@ -65,12 +65,6 @@ namespace MediaBrowser.Api.Playback
/// No need to put this in api docs since it's dlna only
/// </summary>
public bool AlbumArt { get; set; }
-
- /// <summary>
- /// Gets or sets the type.
- /// </summary>
- /// <value>The type.</value>
- public string Type { get; set; }
}
public class VideoStreamRequest : StreamRequest
diff --git a/MediaBrowser.Api/UserLibrary/ArtistsService.cs b/MediaBrowser.Api/UserLibrary/ArtistsService.cs
index 5c1b104870..48fc729131 100644
--- a/MediaBrowser.Api/UserLibrary/ArtistsService.cs
+++ b/MediaBrowser.Api/UserLibrary/ArtistsService.cs
@@ -114,5 +114,10 @@ namespace MediaBrowser.Api.UserLibrary
return LibraryManager.GetAllArtists(items)
.Select(name => LibraryManager.GetArtist(name));
}
+
+ protected override IEnumerable<BaseItem> GetLibraryItems(MusicArtist item, IEnumerable<BaseItem> libraryItems)
+ {
+ return libraryItems.OfType<IHasArtist>().Where(i => i.HasArtist(item.Name)).Cast<BaseItem>();
+ }
}
}
diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
index 15926e9836..dec35100d1 100644
--- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
+++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
@@ -93,6 +93,8 @@ namespace MediaBrowser.Api.UserLibrary
var filteredItems = FilterItems(request, extractedItems, user);
+ filteredItems = FilterByLibraryItems(request, filteredItems, user);
+
filteredItems = ItemsService.ApplySortOrder(request, filteredItems, user, LibraryManager).Cast<TItemType>();
var ibnItemsArray = filteredItems.ToList();
@@ -127,6 +129,39 @@ namespace MediaBrowser.Api.UserLibrary
return result;
}
+ private IEnumerable<TItemType> FilterByLibraryItems(GetItemsByName request, IEnumerable<TItemType> items, User user)
+ {
+ var filters = request.GetFilters().ToList();
+
+ if (filters.Contains(ItemFilter.IsPlayed))
+ {
+ var libraryItems = user.RootFolder.GetRecursiveChildren(user).ToList();
+
+ items = items.Where(i => GetLibraryItems(i, libraryItems).All(l =>
+ {
+ var userdata = UserDataRepository.GetUserData(user.Id, l.GetUserDataKey());
+
+ return userdata != null && userdata.Played;
+ }));
+ }
+
+ if (filters.Contains(ItemFilter.IsUnplayed))
+ {
+ var libraryItems = user.RootFolder.GetRecursiveChildren(user).ToList();
+
+ items = items.Where(i => GetLibraryItems(i, libraryItems).All(l =>
+ {
+ var userdata = UserDataRepository.GetUserData(user.Id, l.GetUserDataKey());
+
+ return userdata == null || !userdata.Played;
+ }));
+ }
+
+ return items;
+ }
+
+ protected abstract IEnumerable<BaseItem> GetLibraryItems(TItemType item, IEnumerable<BaseItem> libraryItems);
+
/// <summary>
/// Filters the items.
/// </summary>
diff --git a/MediaBrowser.Api/UserLibrary/GameGenresService.cs b/MediaBrowser.Api/UserLibrary/GameGenresService.cs
index 54aeaeed35..77b1f4c542 100644
--- a/MediaBrowser.Api/UserLibrary/GameGenresService.cs
+++ b/MediaBrowser.Api/UserLibrary/GameGenresService.cs
@@ -1,5 +1,6 @@
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Dto;
@@ -109,5 +110,10 @@ namespace MediaBrowser.Api.UserLibrary
.Distinct(StringComparer.OrdinalIgnoreCase)
.Select(name => LibraryManager.GetGameGenre(name));
}
+
+ protected override IEnumerable<BaseItem> GetLibraryItems(GameGenre item, IEnumerable<BaseItem> libraryItems)
+ {
+ return libraryItems.Where(i => (i is Game) && i.Genres.Contains(item.Name, StringComparer.OrdinalIgnoreCase));
+ }
}
}
diff --git a/MediaBrowser.Api/UserLibrary/GenresService.cs b/MediaBrowser.Api/UserLibrary/GenresService.cs
index db3948976d..d1f7fab014 100644
--- a/MediaBrowser.Api/UserLibrary/GenresService.cs
+++ b/MediaBrowser.Api/UserLibrary/GenresService.cs
@@ -1,5 +1,6 @@
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Dto;
@@ -113,5 +114,10 @@ namespace MediaBrowser.Api.UserLibrary
.Distinct(StringComparer.OrdinalIgnoreCase)
.Select(name => LibraryManager.GetGenre(name));
}
+
+ protected override IEnumerable<BaseItem> GetLibraryItems(Genre item, IEnumerable<BaseItem> libraryItems)
+ {
+ return libraryItems.Where(i => !(i is Game) && !(i is IHasMusicGenres) && i.Genres.Contains(item.Name, StringComparer.OrdinalIgnoreCase));
+ }
}
}
diff --git a/MediaBrowser.Api/UserLibrary/MusicGenresService.cs b/MediaBrowser.Api/UserLibrary/MusicGenresService.cs
index 59af94ef5b..945ac5a670 100644
--- a/MediaBrowser.Api/UserLibrary/MusicGenresService.cs
+++ b/MediaBrowser.Api/UserLibrary/MusicGenresService.cs
@@ -109,5 +109,10 @@ namespace MediaBrowser.Api.UserLibrary
.Distinct(StringComparer.OrdinalIgnoreCase)
.Select(name => LibraryManager.GetMusicGenre(name));
}
+
+ protected override IEnumerable<BaseItem> GetLibraryItems(MusicGenre item, IEnumerable<BaseItem> libraryItems)
+ {
+ return libraryItems.Where(i => (i is IHasMusicGenres) && i.Genres.Contains(item.Name, StringComparer.OrdinalIgnoreCase));
+ }
}
}
diff --git a/MediaBrowser.Api/UserLibrary/PersonsService.cs b/MediaBrowser.Api/UserLibrary/PersonsService.cs
index 48e486bb57..03e710ae81 100644
--- a/MediaBrowser.Api/UserLibrary/PersonsService.cs
+++ b/MediaBrowser.Api/UserLibrary/PersonsService.cs
@@ -163,5 +163,10 @@ namespace MediaBrowser.Api.UserLibrary
people.Where(p => personTypes.Contains(p.Type ?? string.Empty, StringComparer.OrdinalIgnoreCase) || personTypes.Contains(p.Role ?? string.Empty, StringComparer.OrdinalIgnoreCase));
}
+
+ protected override IEnumerable<BaseItem> GetLibraryItems(Person item, IEnumerable<BaseItem> libraryItems)
+ {
+ return libraryItems.Where(i => i.People.Any(p => string.Equals(p.Name, item.Name, StringComparison.OrdinalIgnoreCase)));
+ }
}
}
diff --git a/MediaBrowser.Api/UserLibrary/StudiosService.cs b/MediaBrowser.Api/UserLibrary/StudiosService.cs
index 86f9394375..8b1eeec0f8 100644
--- a/MediaBrowser.Api/UserLibrary/StudiosService.cs
+++ b/MediaBrowser.Api/UserLibrary/StudiosService.cs
@@ -114,5 +114,10 @@ namespace MediaBrowser.Api.UserLibrary
.Distinct(StringComparer.OrdinalIgnoreCase)
.Select(name => LibraryManager.GetStudio(name));
}
+
+ protected override IEnumerable<BaseItem> GetLibraryItems(Studio item, IEnumerable<BaseItem> libraryItems)
+ {
+ return libraryItems.Where(i => i.Studios.Contains(item.Name, StringComparer.OrdinalIgnoreCase));
+ }
}
}
diff --git a/MediaBrowser.Api/UserLibrary/YearsService.cs b/MediaBrowser.Api/UserLibrary/YearsService.cs
index 8f5178ac5c..8b03fb50b7 100644
--- a/MediaBrowser.Api/UserLibrary/YearsService.cs
+++ b/MediaBrowser.Api/UserLibrary/YearsService.cs
@@ -114,5 +114,19 @@ namespace MediaBrowser.Api.UserLibrary
.Distinct()
.Select(year => LibraryManager.GetYear(year));
}
+
+ protected readonly CultureInfo UsCulture = new CultureInfo("en-US");
+
+ protected override IEnumerable<BaseItem> GetLibraryItems(Year item, IEnumerable<BaseItem> libraryItems)
+ {
+ int year;
+
+ if (!int.TryParse(item.Name, NumberStyles.Integer, UsCulture, out year))
+ {
+ return libraryItems;
+ }
+
+ return libraryItems.Where(i => i.ProductionYear.HasValue && i.ProductionYear.Value == year);
+ }
}
}