aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-06-14 19:13:09 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-06-14 19:13:09 -0400
commitf72b1f531a39bbd74f482a9323a27c531e7869cf (patch)
treeda17799f08d5753059965da25a2120b082cf34a8
parent0b60e7ca67394b24f4f1725b7d43405387c3e067 (diff)
add library folder option to home page
-rw-r--r--MediaBrowser.Api/BaseApiService.cs7
-rw-r--r--MediaBrowser.Controller/Entities/BasePluginFolder.cs5
-rw-r--r--MediaBrowser.Controller/Entities/ICollectionFolder.cs1
-rw-r--r--MediaBrowser.Dlna/Didl/DidlBuilder.cs4
-rw-r--r--MediaBrowser.Dlna/PlayTo/PlayToController.cs6
-rw-r--r--MediaBrowser.Model/Entities/CollectionType.cs2
-rw-r--r--MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs127
-rw-r--r--MediaBrowser.Providers/MediaBrowser.Providers.csproj1
-rw-r--r--MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json1
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/server.json9
10 files changed, 155 insertions, 8 deletions
diff --git a/MediaBrowser.Api/BaseApiService.cs b/MediaBrowser.Api/BaseApiService.cs
index 5d4055abf..ca5b8b63a 100644
--- a/MediaBrowser.Api/BaseApiService.cs
+++ b/MediaBrowser.Api/BaseApiService.cs
@@ -160,6 +160,13 @@ namespace MediaBrowser.Api
{
var folder = (Folder) libraryManager.GetItemById(new Guid(parentId));
+ if (userId.HasValue)
+ {
+ var user = userManager.GetUserById(userId.Value);
+
+ return folder.GetRecursiveChildren(user).ToList();
+ }
+
return folder.GetRecursiveChildren();
}
if (userId.HasValue)
diff --git a/MediaBrowser.Controller/Entities/BasePluginFolder.cs b/MediaBrowser.Controller/Entities/BasePluginFolder.cs
index 29d66718c..67fd8d142 100644
--- a/MediaBrowser.Controller/Entities/BasePluginFolder.cs
+++ b/MediaBrowser.Controller/Entities/BasePluginFolder.cs
@@ -11,5 +11,10 @@ namespace MediaBrowser.Controller.Entities
{
DisplayMediaType = "CollectionFolder";
}
+
+ public string CollectionType
+ {
+ get { return Model.Entities.CollectionType.BoxSets; }
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/ICollectionFolder.cs b/MediaBrowser.Controller/Entities/ICollectionFolder.cs
index 4ea531331..4c6346f7e 100644
--- a/MediaBrowser.Controller/Entities/ICollectionFolder.cs
+++ b/MediaBrowser.Controller/Entities/ICollectionFolder.cs
@@ -6,5 +6,6 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
public interface ICollectionFolder
{
+ string CollectionType { get; }
}
}
diff --git a/MediaBrowser.Dlna/Didl/DidlBuilder.cs b/MediaBrowser.Dlna/Didl/DidlBuilder.cs
index ad641ce16..e05b6f708 100644
--- a/MediaBrowser.Dlna/Didl/DidlBuilder.cs
+++ b/MediaBrowser.Dlna/Didl/DidlBuilder.cs
@@ -423,7 +423,7 @@ namespace MediaBrowser.Dlna.Didl
else if (item is Series || item is Season || item is BoxSet)
{
classType = "object.container.album.videoAlbum";
- }
+ }
}
objectClass.InnerText = classType ?? "object.container.storageFolder";
@@ -441,7 +441,7 @@ namespace MediaBrowser.Dlna.Didl
if (!_profile.RequiresPlainVideoItems && item is Movie)
{
objectClass.InnerText = "object.item.videoItem.movie";
- }
+ }
else
{
objectClass.InnerText = "object.item.videoItem";
diff --git a/MediaBrowser.Dlna/PlayTo/PlayToController.cs b/MediaBrowser.Dlna/PlayTo/PlayToController.cs
index 47fd062aa..f9f90034c 100644
--- a/MediaBrowser.Dlna/PlayTo/PlayToController.cs
+++ b/MediaBrowser.Dlna/PlayTo/PlayToController.cs
@@ -463,7 +463,8 @@ namespace MediaBrowser.Dlna.PlayTo
ItemId = item.Id.ToString("N"),
MediaSources = mediaSources,
Profile = profile,
- DeviceId = deviceId
+ DeviceId = deviceId,
+ MaxBitrate = profile.MaxBitrate
}),
Profile = profile
@@ -481,7 +482,8 @@ namespace MediaBrowser.Dlna.PlayTo
ItemId = item.Id.ToString("N"),
MediaSources = mediaSources,
Profile = profile,
- DeviceId = deviceId
+ DeviceId = deviceId,
+ MaxBitrate = profile.MaxBitrate
}),
Profile = profile
diff --git a/MediaBrowser.Model/Entities/CollectionType.cs b/MediaBrowser.Model/Entities/CollectionType.cs
index eab5cb320..1aae2a89c 100644
--- a/MediaBrowser.Model/Entities/CollectionType.cs
+++ b/MediaBrowser.Model/Entities/CollectionType.cs
@@ -22,5 +22,7 @@ namespace MediaBrowser.Model.Entities
public const string Books = "books";
public const string Photos = "photos";
public const string Games = "games";
+ public const string Channels = "channels";
+ public const string LiveTv = "livetv";
}
}
diff --git a/MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs b/MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs
new file mode 100644
index 000000000..cec7d3855
--- /dev/null
+++ b/MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs
@@ -0,0 +1,127 @@
+using MediaBrowser.Common.Net;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Providers;
+using MediaBrowser.Providers.Genres;
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Providers.FolderImages
+{
+ public class DefaultImageProvider : IRemoteImageProvider
+ {
+ private readonly IHttpClient _httpClient;
+
+ public DefaultImageProvider(IHttpClient httpClient)
+ {
+ _httpClient = httpClient;
+ }
+
+ public IEnumerable<ImageType> GetSupportedImages(IHasImages item)
+ {
+ return new List<ImageType>
+ {
+ ImageType.Primary,
+ ImageType.Thumb
+ };
+ }
+
+ public Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, CancellationToken cancellationToken)
+ {
+ var view = item as UserView;
+
+ if (view != null)
+ {
+ return GetImages(view.ViewType, cancellationToken);
+ }
+
+ var folder = (ICollectionFolder)item;
+ return GetImages(folder.CollectionType, cancellationToken);
+ }
+
+ private Task<IEnumerable<RemoteImageInfo>> GetImages(string viewType, CancellationToken cancellationToken)
+ {
+ var url = GetImageUrl(viewType);
+
+ return Task.FromResult<IEnumerable<RemoteImageInfo>>(new List<RemoteImageInfo>
+ {
+ new RemoteImageInfo
+ {
+ ProviderName = Name,
+ Url = url,
+ Type = ImageType.Primary
+ },
+
+ new RemoteImageInfo
+ {
+ ProviderName = Name,
+ Url = url,
+ Type = ImageType.Thumb
+ }
+ });
+ }
+
+ private string GetImageUrl(string viewType)
+ {
+ const string urlPrefix = "https://raw.githubusercontent.com/MediaBrowser/MediaBrowser.Resources/master/images/folders/";
+
+ if (string.Equals(viewType, CollectionType.Books, StringComparison.OrdinalIgnoreCase))
+ {
+ return urlPrefix + "books.jpg";
+ }
+ if (string.Equals(viewType, CollectionType.Games, StringComparison.OrdinalIgnoreCase))
+ {
+ return urlPrefix + "games.jpg";
+ }
+ if (string.Equals(viewType, CollectionType.Music, StringComparison.OrdinalIgnoreCase))
+ {
+ return urlPrefix + "music.jpg";
+ }
+ if (string.Equals(viewType, CollectionType.Photos, StringComparison.OrdinalIgnoreCase))
+ {
+ return urlPrefix + "photos.jpg";
+ }
+ if (string.Equals(viewType, CollectionType.TvShows, StringComparison.OrdinalIgnoreCase))
+ {
+ return urlPrefix + "tv.jpg";
+ }
+ if (string.Equals(viewType, CollectionType.Channels, StringComparison.OrdinalIgnoreCase))
+ {
+ return urlPrefix + "channels.jpg";
+ }
+ if (string.Equals(viewType, CollectionType.LiveTv, StringComparison.OrdinalIgnoreCase))
+ {
+ return urlPrefix + "livetv.jpg";
+ }
+ if (string.Equals(viewType, CollectionType.Movies, StringComparison.OrdinalIgnoreCase))
+ {
+ return urlPrefix + "movies.jpg";
+ }
+
+ return urlPrefix + "generic.jpg";
+ }
+
+ public string Name
+ {
+ get { return "Default Image Provider"; }
+ }
+
+ public bool Supports(IHasImages item)
+ {
+ return item is UserView || item is CollectionFolder;
+ }
+
+ public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
+ {
+ return _httpClient.GetResponse(new HttpRequestOptions
+ {
+ CancellationToken = cancellationToken,
+ Url = url,
+ ResourcePool = GenreImageProvider.ImageDownloadResourcePool
+ });
+ }
+ }
+}
diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
index 3978b36bb..ab8483e01 100644
--- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj
+++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
@@ -80,6 +80,7 @@
<Compile Include="BoxSets\MovieDbBoxSetProvider.cs" />
<Compile Include="Channels\ChannelMetadataService.cs" />
<Compile Include="Chapters\ChapterManager.cs" />
+ <Compile Include="FolderImages\DefaultImageProvider.cs" />
<Compile Include="Folders\CollectionFolderImageProvider.cs" />
<Compile Include="Folders\FolderMetadataService.cs" />
<Compile Include="Folders\ImagesByNameImageProvider.cs" />
diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
index 52dd8209a..6255b1a09 100644
--- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
+++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
@@ -122,6 +122,7 @@
"MessageConfirmItemGrouping": "Media Browser clients will automatically choose the optimal version to play based on device and network performance. Are you sure you wish to continue?",
"HeaderResume": "Resume",
"HeaderMyLibrary": "My Library",
+ "HeaderLibraryFolders": "Folder View"
"HeaderLatestMedia": "Latest Media",
"ButtonMore": "More...",
"HeaderFavoriteMovies": "Favorite Movies",
diff --git a/MediaBrowser.Server.Implementations/Localization/Server/server.json b/MediaBrowser.Server.Implementations/Localization/Server/server.json
index af191ca9a..5626238c1 100644
--- a/MediaBrowser.Server.Implementations/Localization/Server/server.json
+++ b/MediaBrowser.Server.Implementations/Localization/Server/server.json
@@ -785,9 +785,9 @@
"LabelHomePageSection1": "Home page section one:",
"LabelHomePageSection2": "Home page section two:",
"LabelHomePageSection3": "Home page section three:",
- "OptionLibraryButtons": "Library buttons",
- "OptionLibraryTiles": "Library tiles (large)",
- "OptionSmallLibraryTiles": "Library tiles (small)",
+ "OptionMyLibraryButtons": "My library (buttons)",
+ "OptionMyLibrary": "My library",
+ "OptionMyLibrarySmall": "My library (small)",
"OptionResumablemedia": "Resume",
"OptionLatestMedia": "Latest media",
"OptionNone": "None",
@@ -828,5 +828,6 @@
"HeaderLibraryViews": "Library Views",
"LabelSelectFolderGroups": "Automatically group content from the following folders into views such as Movies, Music and TV:",
"LabelSelectFolderGroupsHelp": "Folders that are unchecked will be displayed by themselves in their own view.",
- "OptionDisplayAdultContent": "Display adult content"
+ "OptionDisplayAdultContent": "Display adult content",
+ "OptionLibraryFolders": "Folder view"
} \ No newline at end of file