Merge branch 'master' of https://github.com/MediaBrowser/MediaBrowser
This commit is contained in:
commit
09d7bc00c2
|
@ -288,9 +288,6 @@ namespace MediaBrowser.Api.DefaultTheme
|
||||||
|
|
||||||
var view = new TvView();
|
var view = new TvView();
|
||||||
|
|
||||||
SetFavoriteGenres(view, series, user);
|
|
||||||
SetFavoriteStudios(view, series, user);
|
|
||||||
|
|
||||||
var fields = new List<ItemFields>();
|
var fields = new List<ItemFields>();
|
||||||
|
|
||||||
var seriesWithBestBackdrops = FilterItemsForBackdropDisplay(seriesWithBackdrops).ToList();
|
var seriesWithBestBackdrops = FilterItemsForBackdropDisplay(seriesWithBackdrops).ToList();
|
||||||
|
@ -401,146 +398,6 @@ namespace MediaBrowser.Api.DefaultTheme
|
||||||
return ToOptimizedResult(view);
|
return ToOptimizedResult(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetFavoriteGenres(TvView view, IEnumerable<BaseItem> inputItems, User user)
|
|
||||||
{
|
|
||||||
var all = inputItems.SelectMany(i => i.Genres)
|
|
||||||
.Distinct(StringComparer.OrdinalIgnoreCase);
|
|
||||||
|
|
||||||
view.FavoriteGenres = all.Select(i =>
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var itemByName = _libraryManager.GetGenre(i);
|
|
||||||
|
|
||||||
var counts = itemByName.GetItemByNameCounts(user);
|
|
||||||
|
|
||||||
var count = counts == null ? 0 : counts.SeriesCount;
|
|
||||||
|
|
||||||
if (count > 0 && _userDataManager.GetUserData(user.Id, itemByName.GetUserDataKey()).IsFavorite)
|
|
||||||
{
|
|
||||||
return new ItemByNameInfo
|
|
||||||
{
|
|
||||||
Name = itemByName.Name,
|
|
||||||
ItemCount = count
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.ErrorException("Error getting genre {0}", ex, i);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
|
|
||||||
}).Where(i => i != null).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SetFavoriteStudios(TvView view, IEnumerable<BaseItem> inputItems, User user)
|
|
||||||
{
|
|
||||||
var all = inputItems.SelectMany(i => i.Studios)
|
|
||||||
.Distinct(StringComparer.OrdinalIgnoreCase);
|
|
||||||
|
|
||||||
view.FavoriteStudios = all.Select(i =>
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var itemByName = _libraryManager.GetStudio(i);
|
|
||||||
|
|
||||||
var counts = itemByName.GetItemByNameCounts(user);
|
|
||||||
|
|
||||||
var count = counts == null ? 0 : counts.SeriesCount;
|
|
||||||
|
|
||||||
if (count > 0 && _userDataManager.GetUserData(user.Id, itemByName.GetUserDataKey()).IsFavorite)
|
|
||||||
{
|
|
||||||
return new ItemByNameInfo
|
|
||||||
{
|
|
||||||
Name = itemByName.Name,
|
|
||||||
ItemCount = count
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.ErrorException("Error getting studio {0}", ex, i);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
|
|
||||||
}).Where(i => i != null).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SetFavoriteGenres(MoviesView view, IEnumerable<BaseItem> inputItems, User user)
|
|
||||||
{
|
|
||||||
var all = inputItems.SelectMany(i => i.Genres)
|
|
||||||
.Distinct(StringComparer.OrdinalIgnoreCase);
|
|
||||||
|
|
||||||
view.FavoriteGenres = all.Select(i =>
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var itemByName = _libraryManager.GetGenre(i);
|
|
||||||
|
|
||||||
var counts = itemByName.GetItemByNameCounts(user);
|
|
||||||
|
|
||||||
var count = counts == null ? 0 : counts.MovieCount;
|
|
||||||
|
|
||||||
if (count > 0 && _userDataManager.GetUserData(user.Id, itemByName.GetUserDataKey()).IsFavorite)
|
|
||||||
{
|
|
||||||
return new ItemByNameInfo
|
|
||||||
{
|
|
||||||
Name = itemByName.Name,
|
|
||||||
ItemCount = count
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.ErrorException("Error getting genre {0}", ex, i);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
|
|
||||||
}).Where(i => i != null).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SetFavoriteStudios(MoviesView view, IEnumerable<BaseItem> inputItems, User user)
|
|
||||||
{
|
|
||||||
var all = inputItems.SelectMany(i => i.Studios)
|
|
||||||
.Distinct(StringComparer.OrdinalIgnoreCase);
|
|
||||||
|
|
||||||
view.FavoriteStudios = all.Select(i =>
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var itemByName = _libraryManager.GetStudio(i);
|
|
||||||
|
|
||||||
var counts = itemByName.GetItemByNameCounts(user);
|
|
||||||
|
|
||||||
var count = counts == null ? 0 : counts.MovieCount;
|
|
||||||
|
|
||||||
if (count > 0 && _userDataManager.GetUserData(user.Id, itemByName.GetUserDataKey()).IsFavorite)
|
|
||||||
{
|
|
||||||
return new ItemByNameInfo
|
|
||||||
{
|
|
||||||
Name = itemByName.Name,
|
|
||||||
ItemCount = count
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.ErrorException("Error getting studio {0}", ex, i);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
|
|
||||||
}).Where(i => i != null).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public object Get(GetMovieView request)
|
public object Get(GetMovieView request)
|
||||||
{
|
{
|
||||||
var user = _userManager.GetUserById(request.UserId);
|
var user = _userManager.GetUserById(request.UserId);
|
||||||
|
@ -557,9 +414,6 @@ namespace MediaBrowser.Api.DefaultTheme
|
||||||
var movies = items.OfType<Movie>()
|
var movies = items.OfType<Movie>()
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
SetFavoriteGenres(view, movies, user);
|
|
||||||
SetFavoriteStudios(view, movies, user);
|
|
||||||
|
|
||||||
var trailers = items.OfType<Trailer>()
|
var trailers = items.OfType<Trailer>()
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
|
|
|
@ -34,9 +34,6 @@ namespace MediaBrowser.Api.DefaultTheme
|
||||||
|
|
||||||
public List<BaseItemDto> LatestTrailers { get; set; }
|
public List<BaseItemDto> LatestTrailers { get; set; }
|
||||||
public List<BaseItemDto> LatestMovies { get; set; }
|
public List<BaseItemDto> LatestMovies { get; set; }
|
||||||
|
|
||||||
public List<ItemByNameInfo> FavoriteGenres { get; set; }
|
|
||||||
public List<ItemByNameInfo> FavoriteStudios { get; set; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TvView : BaseView
|
public class TvView : BaseView
|
||||||
|
@ -47,8 +44,6 @@ namespace MediaBrowser.Api.DefaultTheme
|
||||||
public List<ItemStub> RomanceItems { get; set; }
|
public List<ItemStub> RomanceItems { get; set; }
|
||||||
public List<ItemStub> ComedyItems { get; set; }
|
public List<ItemStub> ComedyItems { get; set; }
|
||||||
|
|
||||||
public List<ItemByNameInfo> FavoriteGenres { get; set; }
|
|
||||||
public List<ItemByNameInfo> FavoriteStudios { get; set; }
|
|
||||||
public List<string> SeriesIdsInProgress { get; set; }
|
public List<string> SeriesIdsInProgress { get; set; }
|
||||||
|
|
||||||
public List<BaseItemDto> LatestEpisodes { get; set; }
|
public List<BaseItemDto> LatestEpisodes { get; set; }
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
using System.Net;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using MediaBrowser.Common.Constants;
|
using MediaBrowser.Common.Constants;
|
||||||
using MediaBrowser.Common.Net;
|
using MediaBrowser.Common.Net;
|
||||||
|
using MediaBrowser.Model.Entities;
|
||||||
|
using MediaBrowser.Model.Serialization;
|
||||||
using ServiceStack.ServiceHost;
|
using ServiceStack.ServiceHost;
|
||||||
|
|
||||||
namespace MediaBrowser.Api
|
namespace MediaBrowser.Api
|
||||||
|
@ -51,27 +54,103 @@ namespace MediaBrowser.Api
|
||||||
public string Review { get; set; }
|
public string Review { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Class InstallPackage
|
||||||
|
/// </summary>
|
||||||
|
[Route("/PackageReviews/{Id}", "GET")]
|
||||||
|
[Api(("Retrieve reviews for a package"))]
|
||||||
|
public class ReviewRequest : IReturn<List<PackageReviewInfo>>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the Id.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The Id.</value>
|
||||||
|
[ApiMember(Name = "Id", Description = "Package Id", IsRequired = true, DataType = "int", ParameterType = "path", Verb = "GET")]
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the max rating.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The max rating.</value>
|
||||||
|
[ApiMember(Name = "MaxRating", Description = "Retrieve only reviews less than or equal to this", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
||||||
|
public int MaxRating { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the min rating.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The max rating.</value>
|
||||||
|
[ApiMember(Name = "MinRating", Description = "Retrieve only reviews greator than or equal to this", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
||||||
|
public int MinRating { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Only retrieve reviews with at least a short review.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>True if should only get reviews with a title.</value>
|
||||||
|
[ApiMember(Name = "ForceTitle", Description = "Whether or not to restrict results to those with a title", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
|
||||||
|
public bool ForceTitle { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the limit for the query.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The max rating.</value>
|
||||||
|
[ApiMember(Name = "Limit", Description = "Limit the result to this many reviews (ordered by latest)", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
||||||
|
public int Limit { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public class PackageReviewService : BaseApiService
|
public class PackageReviewService : BaseApiService
|
||||||
{
|
{
|
||||||
private readonly IHttpClient _httpClient;
|
private readonly IHttpClient _httpClient;
|
||||||
private readonly INetworkManager _netManager;
|
private readonly INetworkManager _netManager;
|
||||||
|
private readonly IJsonSerializer _serializer;
|
||||||
|
|
||||||
public PackageReviewService(IHttpClient client, INetworkManager net)
|
public PackageReviewService(IHttpClient client, INetworkManager net, IJsonSerializer serializer)
|
||||||
{
|
{
|
||||||
_httpClient = client;
|
_httpClient = client;
|
||||||
_netManager = net;
|
_netManager = net;
|
||||||
|
_serializer = serializer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public object Get(ReviewRequest request)
|
||||||
|
{
|
||||||
|
var parms = "?id=" + request.Id;
|
||||||
|
|
||||||
|
if (request.MaxRating > 0)
|
||||||
|
{
|
||||||
|
parms += "&max=" + request.MaxRating;
|
||||||
|
}
|
||||||
|
if (request.MinRating > 0)
|
||||||
|
{
|
||||||
|
parms += "&min=" + request.MinRating;
|
||||||
|
}
|
||||||
|
if (request.MinRating > 0)
|
||||||
|
{
|
||||||
|
parms += "&limit=" + request.Limit;
|
||||||
|
}
|
||||||
|
if (request.ForceTitle)
|
||||||
|
{
|
||||||
|
parms += "&title=true";
|
||||||
|
}
|
||||||
|
|
||||||
|
var result = _httpClient.Get(Constants.MbAdminUrl + "/service/packageReview/retrieve"+parms, CancellationToken.None).Result;
|
||||||
|
|
||||||
|
var reviews = _serializer.DeserializeFromStream<List<PackageReviewInfo>>(result);
|
||||||
|
|
||||||
|
return ToOptimizedResult(reviews);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Post(CreateReviewRequest request)
|
public void Post(CreateReviewRequest request)
|
||||||
{
|
{
|
||||||
|
var reviewText = WebUtility.HtmlEncode(request.Review ?? string.Empty);
|
||||||
|
var title = WebUtility.HtmlEncode(request.Title ?? string.Empty);
|
||||||
|
|
||||||
var review = new Dictionary<string, string>
|
var review = new Dictionary<string, string>
|
||||||
{ { "id", request.Id.ToString(CultureInfo.InvariantCulture) },
|
{ { "id", request.Id.ToString(CultureInfo.InvariantCulture) },
|
||||||
{ "mac", _netManager.GetMacAddress() },
|
{ "mac", _netManager.GetMacAddress() },
|
||||||
{ "rating", request.Rating.ToString(CultureInfo.InvariantCulture) },
|
{ "rating", request.Rating.ToString(CultureInfo.InvariantCulture) },
|
||||||
{ "recommend", request.Recommend.ToString() },
|
{ "recommend", request.Recommend.ToString() },
|
||||||
{ "title", request.Title },
|
{ "title", title },
|
||||||
{ "review", request.Review },
|
{ "review", reviewText },
|
||||||
};
|
};
|
||||||
|
|
||||||
Task.WaitAll(_httpClient.Post(Constants.MbAdminUrl + "/service/packageReview/update", review, CancellationToken.None));
|
Task.WaitAll(_httpClient.Post(Constants.MbAdminUrl + "/service/packageReview/update", review, CancellationToken.None));
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
|
using SharpCompress.Archive.Rar;
|
||||||
using SharpCompress.Archive.SevenZip;
|
using SharpCompress.Archive.SevenZip;
|
||||||
using SharpCompress.Archive.Tar;
|
using SharpCompress.Archive.Tar;
|
||||||
using SharpCompress.Common;
|
using SharpCompress.Common;
|
||||||
|
@ -123,5 +124,43 @@ namespace MediaBrowser.Common.Implementations.Archiving
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Extracts all from rar.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sourceFile">The source file.</param>
|
||||||
|
/// <param name="targetPath">The target path.</param>
|
||||||
|
/// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
|
||||||
|
public void ExtractAllFromRar(string sourceFile, string targetPath, bool overwriteExistingFiles)
|
||||||
|
{
|
||||||
|
using (var fileStream = File.OpenRead(sourceFile))
|
||||||
|
{
|
||||||
|
ExtractAllFromRar(fileStream, targetPath, overwriteExistingFiles);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Extracts all from rar.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="source">The source.</param>
|
||||||
|
/// <param name="targetPath">The target path.</param>
|
||||||
|
/// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
|
||||||
|
public void ExtractAllFromRar(Stream source, string targetPath, bool overwriteExistingFiles)
|
||||||
|
{
|
||||||
|
using (var archive = RarArchive.Open(source))
|
||||||
|
{
|
||||||
|
using (var reader = archive.ExtractAllEntries())
|
||||||
|
{
|
||||||
|
var options = ExtractOptions.ExtractFullPath;
|
||||||
|
|
||||||
|
if (overwriteExistingFiles)
|
||||||
|
{
|
||||||
|
options = options | ExtractOptions.Overwrite;
|
||||||
|
}
|
||||||
|
|
||||||
|
reader.WriteAllToDirectory(targetPath, options);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,7 +68,7 @@ namespace MediaBrowser.Controller.Drawing
|
||||||
/// <param name="imageEnhancers">The image enhancers.</param>
|
/// <param name="imageEnhancers">The image enhancers.</param>
|
||||||
/// <returns>Guid.</returns>
|
/// <returns>Guid.</returns>
|
||||||
Guid GetImageCacheTag(BaseItem item, ImageType imageType, string originalImagePath, DateTime dateModified,
|
Guid GetImageCacheTag(BaseItem item, ImageType imageType, string originalImagePath, DateTime dateModified,
|
||||||
IEnumerable<IImageEnhancer> imageEnhancers);
|
List<IImageEnhancer> imageEnhancers);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Processes the image.
|
/// Processes the image.
|
||||||
|
|
|
@ -383,6 +383,12 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// <value>The album image tag.</value>
|
/// <value>The album image tag.</value>
|
||||||
public Guid? AlbumPrimaryImageTag { get; set; }
|
public Guid? AlbumPrimaryImageTag { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the series primary image tag.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The series primary image tag.</value>
|
||||||
|
public Guid? SeriesPrimaryImageTag { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the album artist.
|
/// Gets or sets the album artist.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -33,5 +33,10 @@ namespace MediaBrowser.Model.Entities
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string review { get; set; }
|
public string review { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Time of review
|
||||||
|
/// </summary>
|
||||||
|
public DateTime timestamp { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,5 +54,21 @@ namespace MediaBrowser.Model.IO
|
||||||
/// <param name="targetPath">The target path.</param>
|
/// <param name="targetPath">The target path.</param>
|
||||||
/// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
|
/// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
|
||||||
void ExtractAllFromTar(Stream source, string targetPath, bool overwriteExistingFiles);
|
void ExtractAllFromTar(Stream source, string targetPath, bool overwriteExistingFiles);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Extracts all from rar.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sourceFile">The source file.</param>
|
||||||
|
/// <param name="targetPath">The target path.</param>
|
||||||
|
/// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
|
||||||
|
void ExtractAllFromRar(string sourceFile, string targetPath, bool overwriteExistingFiles);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Extracts all from rar.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="source">The source.</param>
|
||||||
|
/// <param name="targetPath">The target path.</param>
|
||||||
|
/// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
|
||||||
|
void ExtractAllFromRar(Stream source, string targetPath, bool overwriteExistingFiles);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,12 +117,6 @@ namespace MediaBrowser.Model.Updates
|
||||||
/// <value>The name.</value>
|
/// <value>The name.</value>
|
||||||
public string guid { get; set; }
|
public string guid { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the total number of machines who have checked registration for this package (if premium).
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The total hits.</value>
|
|
||||||
public int totalHits { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the total number of ratings for this package.
|
/// Gets or sets the total number of ratings for this package.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -25,8 +25,13 @@ namespace MediaBrowser.Providers.Music
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
artist.PremiereDate = yearFormed > 0 ? new DateTime(yearFormed, 1, 1, 0, 0, 0, DateTimeKind.Utc) : (DateTime?)null;
|
if (yearFormed > 0)
|
||||||
|
{
|
||||||
|
artist.PremiereDate = new DateTime(yearFormed, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
||||||
|
|
||||||
artist.ProductionYear = yearFormed;
|
artist.ProductionYear = yearFormed;
|
||||||
|
}
|
||||||
|
|
||||||
if (data.tags != null && !artist.LockedFields.Contains(MetadataFields.Tags))
|
if (data.tags != null && !artist.LockedFields.Contains(MetadataFields.Tags))
|
||||||
{
|
{
|
||||||
AddTags(artist, data.tags);
|
AddTags(artist, data.tags);
|
||||||
|
@ -102,11 +107,15 @@ namespace MediaBrowser.Providers.Music
|
||||||
|
|
||||||
DateTime release;
|
DateTime release;
|
||||||
|
|
||||||
if (DateTime.TryParse(data.releasedate, out release) && release.Year != 1901)
|
if (DateTime.TryParse(data.releasedate, out release))
|
||||||
|
{
|
||||||
|
// Lastfm sends back null as sometimes 1901, other times 0
|
||||||
|
if (release.Year > 1901)
|
||||||
{
|
{
|
||||||
item.PremiereDate = release;
|
item.PremiereDate = release;
|
||||||
item.ProductionYear = release.Year;
|
item.ProductionYear = release.Year;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (data.toptags != null && !item.LockedFields.Contains(MetadataFields.Tags))
|
if (data.toptags != null && !item.LockedFields.Contains(MetadataFields.Tags))
|
||||||
{
|
{
|
||||||
|
|
|
@ -589,7 +589,7 @@ namespace MediaBrowser.Server.Implementations.Drawing
|
||||||
|
|
||||||
var supportedEnhancers = GetSupportedEnhancers(item, imageType);
|
var supportedEnhancers = GetSupportedEnhancers(item, imageType);
|
||||||
|
|
||||||
return GetImageCacheTag(item, imageType, imagePath, dateModified, supportedEnhancers);
|
return GetImageCacheTag(item, imageType, imagePath, dateModified, supportedEnhancers.ToList());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -602,7 +602,7 @@ namespace MediaBrowser.Server.Implementations.Drawing
|
||||||
/// <param name="imageEnhancers">The image enhancers.</param>
|
/// <param name="imageEnhancers">The image enhancers.</param>
|
||||||
/// <returns>Guid.</returns>
|
/// <returns>Guid.</returns>
|
||||||
/// <exception cref="System.ArgumentNullException">item</exception>
|
/// <exception cref="System.ArgumentNullException">item</exception>
|
||||||
public Guid GetImageCacheTag(BaseItem item, ImageType imageType, string originalImagePath, DateTime dateModified, IEnumerable<IImageEnhancer> imageEnhancers)
|
public Guid GetImageCacheTag(BaseItem item, ImageType imageType, string originalImagePath, DateTime dateModified, List<IImageEnhancer> imageEnhancers)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
{
|
{
|
||||||
|
@ -619,6 +619,12 @@ namespace MediaBrowser.Server.Implementations.Drawing
|
||||||
throw new ArgumentNullException("originalImagePath");
|
throw new ArgumentNullException("originalImagePath");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Optimization
|
||||||
|
if (imageEnhancers.Count == 0)
|
||||||
|
{
|
||||||
|
return (originalImagePath + dateModified.Ticks).GetMD5();
|
||||||
|
}
|
||||||
|
|
||||||
// Cache name is created with supported enhancers combined with the last config change so we pick up new config changes
|
// Cache name is created with supported enhancers combined with the last config change so we pick up new config changes
|
||||||
var cacheKeys = imageEnhancers.Select(i => i.GetConfigurationCacheKey(item, imageType)).ToList();
|
var cacheKeys = imageEnhancers.Select(i => i.GetConfigurationCacheKey(item, imageType)).ToList();
|
||||||
cacheKeys.Add(originalImagePath + dateModified.Ticks);
|
cacheKeys.Add(originalImagePath + dateModified.Ticks);
|
||||||
|
@ -879,7 +885,7 @@ namespace MediaBrowser.Server.Implementations.Drawing
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return i.Supports(item as BaseItem, imageType);
|
return i.Supports(item, imageType);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
@ -888,7 +894,7 @@ namespace MediaBrowser.Server.Implementations.Drawing
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}).ToList();
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
|
|
|
@ -165,7 +165,8 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||||
{
|
{
|
||||||
var folder = (Folder)item;
|
var folder = (Folder)item;
|
||||||
|
|
||||||
dto.ChildCount = folder.GetChildren(user, true).Count();
|
dto.ChildCount = folder.GetChildren(user, true)
|
||||||
|
.Count();
|
||||||
|
|
||||||
if (!(folder is UserRootFolder))
|
if (!(folder is UserRootFolder))
|
||||||
{
|
{
|
||||||
|
@ -1051,6 +1052,13 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||||
{
|
{
|
||||||
dto.SeriesThumbImageTag = GetImageCacheTag(series, ImageType.Thumb, series.GetImage(ImageType.Thumb));
|
dto.SeriesThumbImageTag = GetImageCacheTag(series, ImageType.Thumb, series.GetImage(ImageType.Thumb));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var imagePath = series.PrimaryImagePath;
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(imagePath))
|
||||||
|
{
|
||||||
|
dto.SeriesPrimaryImageTag = GetImageCacheTag(series, ImageType.Primary, imagePath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add SeasonInfo
|
// Add SeasonInfo
|
||||||
|
@ -1064,6 +1072,13 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||||
dto.SeriesName = series.Name;
|
dto.SeriesName = series.Name;
|
||||||
dto.AirTime = series.AirTime;
|
dto.AirTime = series.AirTime;
|
||||||
dto.SeriesStudio = series.Studios.FirstOrDefault();
|
dto.SeriesStudio = series.Studios.FirstOrDefault();
|
||||||
|
|
||||||
|
var imagePath = series.PrimaryImagePath;
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(imagePath))
|
||||||
|
{
|
||||||
|
dto.SeriesPrimaryImageTag = GetImageCacheTag(series, ImageType.Primary, imagePath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var game = item as Game;
|
var game = item as Game;
|
||||||
|
|
|
@ -67,7 +67,8 @@ namespace MediaBrowser.Server.Implementations.IO
|
||||||
public async void RemoveTempIgnore(string path)
|
public async void RemoveTempIgnore(string path)
|
||||||
{
|
{
|
||||||
// This is an arbitraty amount of time, but delay it because file system writes often trigger events after RemoveTempIgnore has been called.
|
// This is an arbitraty amount of time, but delay it because file system writes often trigger events after RemoveTempIgnore has been called.
|
||||||
await Task.Delay(2000).ConfigureAwait(false);
|
// Seeing long delays in some situations, especially over the network.
|
||||||
|
await Task.Delay(40000).ConfigureAwait(false);
|
||||||
|
|
||||||
string val;
|
string val;
|
||||||
_tempIgnoredPaths.TryRemove(path, out val);
|
_tempIgnoredPaths.TryRemove(path, out val);
|
||||||
|
|
|
@ -25,7 +25,8 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||||
"ps3_vprm",
|
"ps3_vprm",
|
||||||
"adv_obj",
|
"adv_obj",
|
||||||
"extrafanart",
|
"extrafanart",
|
||||||
"extrathumbs"
|
"extrathumbs",
|
||||||
|
".actors"
|
||||||
|
|
||||||
}.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
|
}.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
|
||||||
|
|
||||||
|
|
|
@ -250,7 +250,7 @@
|
||||||
<EmbeddedResource Include="Localization\Ratings\gb.txt" />
|
<EmbeddedResource Include="Localization\Ratings\gb.txt" />
|
||||||
<EmbeddedResource Include="Localization\Ratings\nl.txt" />
|
<EmbeddedResource Include="Localization\Ratings\nl.txt" />
|
||||||
<EmbeddedResource Include="Localization\Ratings\br.txt" />
|
<EmbeddedResource Include="Localization\Ratings\br.txt" />
|
||||||
<EmbeddedResource Include="Localization\Ratings\da.txt" />
|
<EmbeddedResource Include="Localization\Ratings\dk.txt" />
|
||||||
<EmbeddedResource Include="Localization\Ratings\de.txt" />
|
<EmbeddedResource Include="Localization\Ratings\de.txt" />
|
||||||
<EmbeddedResource Include="Localization\Ratings\mx.txt" />
|
<EmbeddedResource Include="Localization\Ratings\mx.txt" />
|
||||||
<EmbeddedResource Include="Localization\Ratings\co.txt" />
|
<EmbeddedResource Include="Localization\Ratings\co.txt" />
|
||||||
|
|
|
@ -13,6 +13,7 @@ using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using MediaBrowser.Model.Logging;
|
||||||
|
|
||||||
namespace MediaBrowser.Server.Implementations.Providers
|
namespace MediaBrowser.Server.Implementations.Providers
|
||||||
{
|
{
|
||||||
|
@ -37,17 +38,19 @@ namespace MediaBrowser.Server.Implementations.Providers
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private readonly IDirectoryWatchers _directoryWatchers;
|
private readonly IDirectoryWatchers _directoryWatchers;
|
||||||
private readonly IFileSystem _fileSystem;
|
private readonly IFileSystem _fileSystem;
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="ImageSaver"/> class.
|
/// Initializes a new instance of the <see cref="ImageSaver"/> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="config">The config.</param>
|
/// <param name="config">The config.</param>
|
||||||
/// <param name="directoryWatchers">The directory watchers.</param>
|
/// <param name="directoryWatchers">The directory watchers.</param>
|
||||||
public ImageSaver(IServerConfigurationManager config, IDirectoryWatchers directoryWatchers, IFileSystem fileSystem)
|
public ImageSaver(IServerConfigurationManager config, IDirectoryWatchers directoryWatchers, IFileSystem fileSystem, ILogger logger)
|
||||||
{
|
{
|
||||||
_config = config;
|
_config = config;
|
||||||
_directoryWatchers = directoryWatchers;
|
_directoryWatchers = directoryWatchers;
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
|
_logger = logger;
|
||||||
_remoteImageCache = new FileSystemRepository(config.ApplicationPaths.DownloadedImagesDataPath);
|
_remoteImageCache = new FileSystemRepository(config.ApplicationPaths.DownloadedImagesDataPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,7 +173,12 @@ namespace MediaBrowser.Server.Implementations.Providers
|
||||||
/// <returns>Task.</returns>
|
/// <returns>Task.</returns>
|
||||||
private async Task SaveImageToLocation(Stream source, string path, CancellationToken cancellationToken)
|
private async Task SaveImageToLocation(Stream source, string path, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
|
_logger.Debug("Saving image to {0}", path);
|
||||||
|
|
||||||
|
var parentFolder = Path.GetDirectoryName(path);
|
||||||
|
|
||||||
_directoryWatchers.TemporarilyIgnore(path);
|
_directoryWatchers.TemporarilyIgnore(path);
|
||||||
|
_directoryWatchers.TemporarilyIgnore(parentFolder);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -196,6 +204,7 @@ namespace MediaBrowser.Server.Implementations.Providers
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
_directoryWatchers.RemoveTempIgnore(path);
|
_directoryWatchers.RemoveTempIgnore(path);
|
||||||
|
_directoryWatchers.RemoveTempIgnore(parentFolder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -349,7 +349,7 @@ namespace MediaBrowser.Server.Implementations.Providers
|
||||||
/// <returns>Task.</returns>
|
/// <returns>Task.</returns>
|
||||||
public Task SaveImage(BaseItem item, Stream source, string mimeType, ImageType type, int? imageIndex, string sourceUrl, CancellationToken cancellationToken)
|
public Task SaveImage(BaseItem item, Stream source, string mimeType, ImageType type, int? imageIndex, string sourceUrl, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
return new ImageSaver(ConfigurationManager, _directoryWatchers, _fileSystem).SaveImage(item, source, mimeType, type, imageIndex, sourceUrl, cancellationToken);
|
return new ImageSaver(ConfigurationManager, _directoryWatchers, _fileSystem, _logger).SaveImage(item, source, mimeType, type, imageIndex, sourceUrl, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -53,20 +53,15 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
|
|
||||||
if ($.browser.chrome) {
|
if ($.browser.chrome) {
|
||||||
name = "Chrome";
|
name = "Chrome";
|
||||||
}
|
} else if ($.browser.safari) {
|
||||||
else if ($.browser.safari) {
|
|
||||||
name = "Safari";
|
name = "Safari";
|
||||||
}
|
} else if ($.browser.webkit) {
|
||||||
else if ($.browser.webkit) {
|
|
||||||
name = "WebKit";
|
name = "WebKit";
|
||||||
}
|
} else if ($.browser.msie) {
|
||||||
else if ($.browser.msie) {
|
|
||||||
name = "Internet Explorer";
|
name = "Internet Explorer";
|
||||||
}
|
} else if ($.browser.opera) {
|
||||||
else if ($.browser.opera) {
|
|
||||||
name = "Opera";
|
name = "Opera";
|
||||||
}
|
} else if ($.browser.firefox || $.browser.mozilla) {
|
||||||
else if ($.browser.firefox || $.browser.mozilla) {
|
|
||||||
name = "Firefox";
|
name = "Firefox";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,18 +69,15 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
if ($.browser.version) {
|
if ($.browser.version) {
|
||||||
name += " " + $.browser.version;
|
name += " " + $.browser.version;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
name = "Web Browser";
|
name = "Web Browser";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($.browser.ipad) {
|
if ($.browser.ipad) {
|
||||||
name += " Ipad";
|
name += " Ipad";
|
||||||
}
|
} else if ($.browser.iphone) {
|
||||||
else if ($.browser.iphone) {
|
|
||||||
name += " Iphone";
|
name += " Iphone";
|
||||||
}
|
} else if ($.browser.android) {
|
||||||
else if ($.browser.android) {
|
|
||||||
name += " Android";
|
name += " Android";
|
||||||
}
|
}
|
||||||
return name;
|
return name;
|
||||||
|
@ -313,28 +305,22 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
if (options.artist) {
|
if (options.artist) {
|
||||||
urlPrefix = "Artists/" + self.encodeName(options.artist);
|
urlPrefix = "Artists/" + self.encodeName(options.artist);
|
||||||
delete options.artist;
|
delete options.artist;
|
||||||
}
|
} else if (options.person) {
|
||||||
else if (options.person) {
|
|
||||||
urlPrefix = "Persons/" + self.encodeName(options.person);
|
urlPrefix = "Persons/" + self.encodeName(options.person);
|
||||||
delete options.person;
|
delete options.person;
|
||||||
}
|
} else if (options.genre) {
|
||||||
else if (options.genre) {
|
|
||||||
urlPrefix = "Genres/" + self.encodeName(options.genre);
|
urlPrefix = "Genres/" + self.encodeName(options.genre);
|
||||||
delete options.genre;
|
delete options.genre;
|
||||||
}
|
} else if (options.musicGenre) {
|
||||||
else if (options.musicGenre) {
|
|
||||||
urlPrefix = "MusicGenres/" + self.encodeName(options.musicGenre);
|
urlPrefix = "MusicGenres/" + self.encodeName(options.musicGenre);
|
||||||
delete options.musicGenre;
|
delete options.musicGenre;
|
||||||
}
|
} else if (options.gameGenre) {
|
||||||
else if (options.gameGenre) {
|
|
||||||
urlPrefix = "GameGenres/" + self.encodeName(options.gameGenre);
|
urlPrefix = "GameGenres/" + self.encodeName(options.gameGenre);
|
||||||
delete options.gameGenre;
|
delete options.gameGenre;
|
||||||
}
|
} else if (options.studio) {
|
||||||
else if (options.studio) {
|
|
||||||
urlPrefix = "Studios/" + self.encodeName(options.studio);
|
urlPrefix = "Studios/" + self.encodeName(options.studio);
|
||||||
delete options.studio;
|
delete options.studio;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
urlPrefix = "Items/" + options.itemId;
|
urlPrefix = "Items/" + options.itemId;
|
||||||
delete options.itemId;
|
delete options.itemId;
|
||||||
}
|
}
|
||||||
|
@ -624,10 +610,8 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
}
|
}
|
||||||
|
|
||||||
var url = self.getUrl("Items/" + itemId + "/Refresh", {
|
var url = self.getUrl("Items/" + itemId + "/Refresh", {
|
||||||
|
|
||||||
forced: force || false,
|
forced: force || false,
|
||||||
recursive: recursive || false
|
recursive: recursive || false
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return self.ajax({
|
return self.ajax({
|
||||||
|
@ -643,9 +627,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
}
|
}
|
||||||
|
|
||||||
var url = self.getUrl("Artists/" + self.encodeName(name) + "/Refresh", {
|
var url = self.getUrl("Artists/" + self.encodeName(name) + "/Refresh", {
|
||||||
|
|
||||||
forced: force || false
|
forced: force || false
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return self.ajax({
|
return self.ajax({
|
||||||
|
@ -661,9 +643,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
}
|
}
|
||||||
|
|
||||||
var url = self.getUrl("Genres/" + self.encodeName(name) + "/Refresh", {
|
var url = self.getUrl("Genres/" + self.encodeName(name) + "/Refresh", {
|
||||||
|
|
||||||
forced: force || false
|
forced: force || false
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return self.ajax({
|
return self.ajax({
|
||||||
|
@ -679,9 +659,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
}
|
}
|
||||||
|
|
||||||
var url = self.getUrl("MusicGenres/" + self.encodeName(name) + "/Refresh", {
|
var url = self.getUrl("MusicGenres/" + self.encodeName(name) + "/Refresh", {
|
||||||
|
|
||||||
forced: force || false
|
forced: force || false
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return self.ajax({
|
return self.ajax({
|
||||||
|
@ -697,9 +675,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
}
|
}
|
||||||
|
|
||||||
var url = self.getUrl("GameGenres/" + self.encodeName(name) + "/Refresh", {
|
var url = self.getUrl("GameGenres/" + self.encodeName(name) + "/Refresh", {
|
||||||
|
|
||||||
forced: force || false
|
forced: force || false
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return self.ajax({
|
return self.ajax({
|
||||||
|
@ -715,9 +691,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
}
|
}
|
||||||
|
|
||||||
var url = self.getUrl("Persons/" + self.encodeName(name) + "/Refresh", {
|
var url = self.getUrl("Persons/" + self.encodeName(name) + "/Refresh", {
|
||||||
|
|
||||||
forced: force || false
|
forced: force || false
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return self.ajax({
|
return self.ajax({
|
||||||
|
@ -733,9 +707,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
}
|
}
|
||||||
|
|
||||||
var url = self.getUrl("Studios/" + self.encodeName(name) + "/Refresh", {
|
var url = self.getUrl("Studios/" + self.encodeName(name) + "/Refresh", {
|
||||||
|
|
||||||
forced: force || false
|
forced: force || false
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return self.ajax({
|
return self.ajax({
|
||||||
|
@ -1122,7 +1094,6 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
url += "/" + virtualFolderName + "/Paths";
|
url += "/" + virtualFolderName + "/Paths";
|
||||||
|
|
||||||
url = self.getUrl(url, {
|
url = self.getUrl(url, {
|
||||||
|
|
||||||
refreshLibrary: refreshLibrary ? true : false,
|
refreshLibrary: refreshLibrary ? true : false,
|
||||||
path: mediaPath
|
path: mediaPath
|
||||||
});
|
});
|
||||||
|
@ -1152,7 +1123,6 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
url += "/" + virtualFolderName + "/Paths";
|
url += "/" + virtualFolderName + "/Paths";
|
||||||
|
|
||||||
url = self.getUrl(url, {
|
url = self.getUrl(url, {
|
||||||
|
|
||||||
refreshLibrary: refreshLibrary ? true : false,
|
refreshLibrary: refreshLibrary ? true : false,
|
||||||
path: mediaPath
|
path: mediaPath
|
||||||
});
|
});
|
||||||
|
@ -1222,23 +1192,17 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
|
|
||||||
if (itemType == "Artist") {
|
if (itemType == "Artist") {
|
||||||
url = self.getUrl("Artists/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("Artists/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else if (itemType == "Genre") {
|
||||||
else if (itemType == "Genre") {
|
|
||||||
url = self.getUrl("Genres/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("Genres/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else if (itemType == "GameGenre") {
|
||||||
else if (itemType == "GameGenre") {
|
|
||||||
url = self.getUrl("GameGenres/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("GameGenres/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else if (itemType == "MusicGenre") {
|
||||||
else if (itemType == "MusicGenre") {
|
|
||||||
url = self.getUrl("MusicGenres/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("MusicGenres/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else if (itemType == "Person") {
|
||||||
else if (itemType == "Person") {
|
|
||||||
url = self.getUrl("Persons/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("Persons/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else if (itemType == "Studio") {
|
||||||
else if (itemType == "Studio") {
|
|
||||||
url = self.getUrl("Studios/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("Studios/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
url = self.getUrl("Items/" + itemId + "/Images");
|
url = self.getUrl("Items/" + itemId + "/Images");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1284,23 +1248,17 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
|
|
||||||
if (itemType == "Artist") {
|
if (itemType == "Artist") {
|
||||||
url = self.getUrl("Artists/" + self.encodeName(itemName) + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
|
url = self.getUrl("Artists/" + self.encodeName(itemName) + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
|
||||||
}
|
} else if (itemType == "Genre") {
|
||||||
else if (itemType == "Genre") {
|
|
||||||
url = self.getUrl("Genres/" + self.encodeName(itemName) + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
|
url = self.getUrl("Genres/" + self.encodeName(itemName) + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
|
||||||
}
|
} else if (itemType == "GameGenre") {
|
||||||
else if (itemType == "GameGenre") {
|
|
||||||
url = self.getUrl("GameGenres/" + self.encodeName(itemName) + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
|
url = self.getUrl("GameGenres/" + self.encodeName(itemName) + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
|
||||||
}
|
} else if (itemType == "MusicGenre") {
|
||||||
else if (itemType == "MusicGenre") {
|
|
||||||
url = self.getUrl("MusicGenres/" + self.encodeName(itemName) + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
|
url = self.getUrl("MusicGenres/" + self.encodeName(itemName) + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
|
||||||
}
|
} else if (itemType == "Person") {
|
||||||
else if (itemType == "Person") {
|
|
||||||
url = self.getUrl("Persons/" + self.encodeName(itemName) + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
|
url = self.getUrl("Persons/" + self.encodeName(itemName) + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
|
||||||
}
|
} else if (itemType == "Studio") {
|
||||||
else if (itemType == "Studio") {
|
|
||||||
url = self.getUrl("Studios/" + self.encodeName(itemName) + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
|
url = self.getUrl("Studios/" + self.encodeName(itemName) + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
url = self.getUrl("Items/" + itemId + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
|
url = self.getUrl("Items/" + itemId + "/Images/" + imageType + "/" + imageIndex + "/Index", options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1320,23 +1278,17 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
|
|
||||||
if (itemType == "Artist") {
|
if (itemType == "Artist") {
|
||||||
url = self.getUrl("Artists/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("Artists/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else if (itemType == "Genre") {
|
||||||
else if (itemType == "Genre") {
|
|
||||||
url = self.getUrl("Genres/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("Genres/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else if (itemType == "GameGenre") {
|
||||||
else if (itemType == "GameGenre") {
|
|
||||||
url = self.getUrl("GameGenres/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("GameGenres/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else if (itemType == "MusicGenre") {
|
||||||
else if (itemType == "MusicGenre") {
|
|
||||||
url = self.getUrl("MusicGenres/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("MusicGenres/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else if (itemType == "Person") {
|
||||||
else if (itemType == "Person") {
|
|
||||||
url = self.getUrl("Persons/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("Persons/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else if (itemType == "Studio") {
|
||||||
else if (itemType == "Studio") {
|
|
||||||
url = self.getUrl("Studios/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("Studios/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
url = self.getUrl("Items/" + itemId + "/Images");
|
url = self.getUrl("Items/" + itemId + "/Images");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1459,23 +1411,17 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
|
|
||||||
if (itemType == "Artist") {
|
if (itemType == "Artist") {
|
||||||
url = self.getUrl("Artists/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("Artists/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else if (itemType == "Genre") {
|
||||||
else if (itemType == "Genre") {
|
|
||||||
url = self.getUrl("Genres/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("Genres/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else if (itemType == "GameGenre") {
|
||||||
else if (itemType == "GameGenre") {
|
|
||||||
url = self.getUrl("GameGenres/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("GameGenres/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else if (itemType == "MusicGenre") {
|
||||||
else if (itemType == "MusicGenre") {
|
|
||||||
url = self.getUrl("MusicGenres/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("MusicGenres/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else if (itemType == "Person") {
|
||||||
else if (itemType == "Person") {
|
|
||||||
url = self.getUrl("Persons/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("Persons/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else if (itemType == "Studio") {
|
||||||
else if (itemType == "Studio") {
|
|
||||||
url = self.getUrl("Studios/" + self.encodeName(itemName) + "/Images");
|
url = self.getUrl("Studios/" + self.encodeName(itemName) + "/Images");
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
url = self.getUrl("Items/" + itemId + "/Images");
|
url = self.getUrl("Items/" + itemId + "/Images");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2823,6 +2769,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
};
|
};
|
||||||
|
|
||||||
self.getDateParamValue = function (date) {
|
self.getDateParamValue = function (date) {
|
||||||
|
|
||||||
function formatDigit(i) {
|
function formatDigit(i) {
|
||||||
return i < 10 ? "0" + i : i;
|
return i < 10 ? "0" + i : i;
|
||||||
}
|
}
|
||||||
|
@ -3385,7 +3332,6 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
}
|
}
|
||||||
|
|
||||||
var url = self.getUrl("Users/" + userId + "/PlayingItems/" + itemId, {
|
var url = self.getUrl("Users/" + userId + "/PlayingItems/" + itemId, {
|
||||||
|
|
||||||
CanSeek: canSeek,
|
CanSeek: canSeek,
|
||||||
QueueableMediaTypes: queueableMediaTypes
|
QueueableMediaTypes: queueableMediaTypes
|
||||||
});
|
});
|
||||||
|
@ -3466,6 +3412,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
}
|
}
|
||||||
|
|
||||||
var params = {
|
var params = {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (positionTicks) {
|
if (positionTicks) {
|
||||||
|
@ -3579,8 +3526,40 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
|
||||||
url: url,
|
url: url,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
self.getPackageReviews = function (packageId, minRating, maxRating, limit, forceTitle) {
|
||||||
|
|
||||||
|
if (!packageId) {
|
||||||
|
throw new Error("null packageId");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var options = {};
|
||||||
|
|
||||||
|
if (minRating) {
|
||||||
|
options.MinRating = minRating;
|
||||||
|
}
|
||||||
|
if (maxRating) {
|
||||||
|
options.MaxRating = maxRating;
|
||||||
|
}
|
||||||
|
if (limit) {
|
||||||
|
options.Limit = limit;
|
||||||
|
}
|
||||||
|
if (forceTitle) {
|
||||||
|
options.ForceTitle = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
var url = self.getUrl("PackageReviews/" + packageId, options);
|
||||||
|
|
||||||
|
return self.ajax({
|
||||||
|
type: "GET",
|
||||||
|
url: url,
|
||||||
|
dataType: "json"
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
}(jQuery, navigator, window.JSON, window.WebSocket, setTimeout, window);
|
}(jQuery, navigator, window.JSON, window.WebSocket, setTimeout, window);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="MediaBrowser.ApiClient.Javascript" version="3.0.191" targetFramework="net45" />
|
<package id="MediaBrowser.ApiClient.Javascript" version="3.0.192" targetFramework="net45" />
|
||||||
<package id="ServiceStack.Common" version="3.9.62" targetFramework="net45" />
|
<package id="ServiceStack.Common" version="3.9.62" targetFramework="net45" />
|
||||||
<package id="ServiceStack.Text" version="3.9.62" targetFramework="net45" />
|
<package id="ServiceStack.Text" version="3.9.62" targetFramework="net45" />
|
||||||
</packages>
|
</packages>
|
|
@ -237,4 +237,7 @@ Global
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
|
GlobalSection(Performance) = preSolution
|
||||||
|
HasPerformanceSessions = true
|
||||||
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|
Loading…
Reference in New Issue
Block a user