aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-10-28 19:17:55 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-10-28 19:17:55 -0400
commit5ca4d60c34c7ead76c388bd2c3ca192b38aae1f0 (patch)
tree9e9bc711c6b422c7f3eabdac5cd3cf2a8e5a11b8
parent67528a07992326472a4e6dfe826ddcc5358a6f67 (diff)
connect updates
-rw-r--r--MediaBrowser.Api/System/SystemService.cs2
-rw-r--r--MediaBrowser.Api/UserService.cs2
-rw-r--r--MediaBrowser.Controller/Entities/AdultVideo.cs13
-rw-r--r--MediaBrowser.Controller/Entities/Movies/Movie.cs10
-rw-r--r--MediaBrowser.Controller/Entities/Trailer.cs9
-rw-r--r--MediaBrowser.Controller/Entities/Video.cs8
-rw-r--r--MediaBrowser.Controller/LiveTv/LiveTvChannel.cs5
-rw-r--r--MediaBrowser.Controller/Net/AuthenticatedAttribute.cs34
-rw-r--r--MediaBrowser.Controller/Net/IAuthService.cs4
-rw-r--r--MediaBrowser.Controller/Playlists/Playlist.cs5
-rw-r--r--MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj6
-rw-r--r--MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj6
-rw-r--r--MediaBrowser.Model/ApiClient/ApiHelpers.cs22
-rw-r--r--MediaBrowser.Model/ApiClient/ConnectionState.cs3
-rw-r--r--MediaBrowser.Model/ApiClient/HttpResponseEventArgs.cs11
-rw-r--r--MediaBrowser.Model/ApiClient/IApiClient.cs2
-rw-r--r--MediaBrowser.Model/ApiClient/RemoteLogoutReason.cs9
-rw-r--r--MediaBrowser.Model/MediaBrowser.Model.csproj2
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs20
-rw-r--r--MediaBrowser.Providers/Manager/ProviderUtils.cs58
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs4
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/ResponseFilter.cs2
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs20
-rw-r--r--MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json5
-rw-r--r--MediaBrowser.WebDashboard/Api/PackageCreator.cs1
-rw-r--r--MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj3
-rw-r--r--Nuget/MediaBrowser.Common.Internal.nuspec4
-rw-r--r--Nuget/MediaBrowser.Common.nuspec2
-rw-r--r--Nuget/MediaBrowser.Model.Signed.nuspec2
-rw-r--r--Nuget/MediaBrowser.Server.Core.nuspec4
30 files changed, 190 insertions, 88 deletions
diff --git a/MediaBrowser.Api/System/SystemService.cs b/MediaBrowser.Api/System/SystemService.cs
index 3fb17f74e..9d22d8dfa 100644
--- a/MediaBrowser.Api/System/SystemService.cs
+++ b/MediaBrowser.Api/System/SystemService.cs
@@ -19,7 +19,7 @@ namespace MediaBrowser.Api.System
/// Class GetSystemInfo
/// </summary>
[Route("/System/Info", "GET", Summary = "Gets information about the server")]
- [Authenticated]
+ [Authenticated(EscapeParentalControl = true)]
public class GetSystemInfo : IReturn<SystemInfo>
{
diff --git a/MediaBrowser.Api/UserService.cs b/MediaBrowser.Api/UserService.cs
index 48bd2fc1e..ec0b853c5 100644
--- a/MediaBrowser.Api/UserService.cs
+++ b/MediaBrowser.Api/UserService.cs
@@ -43,7 +43,7 @@ namespace MediaBrowser.Api
/// Class GetUser
/// </summary>
[Route("/Users/{Id}", "GET", Summary = "Gets a user by Id")]
- [Authenticated]
+ [Authenticated(EscapeParentalControl = true)]
public class GetUser : IReturn<UserDto>
{
/// <summary>
diff --git a/MediaBrowser.Controller/Entities/AdultVideo.cs b/MediaBrowser.Controller/Entities/AdultVideo.cs
index 90e54c887..ec2913ab4 100644
--- a/MediaBrowser.Controller/Entities/AdultVideo.cs
+++ b/MediaBrowser.Controller/Entities/AdultVideo.cs
@@ -5,19 +5,8 @@ using System.Collections.Generic;
namespace MediaBrowser.Controller.Entities
{
[Obsolete]
- public class AdultVideo : Video, IHasProductionLocations, IHasPreferredMetadataLanguage, IHasTaglines
+ public class AdultVideo : Video, IHasProductionLocations, IHasTaglines
{
- /// <summary>
- /// Gets or sets the preferred metadata language.
- /// </summary>
- /// <value>The preferred metadata language.</value>
- public string PreferredMetadataLanguage { get; set; }
-
- /// <summary>
- /// Gets or sets the preferred metadata country code.
- /// </summary>
- /// <value>The preferred metadata country code.</value>
- public string PreferredMetadataCountryCode { get; set; }
public List<string> ProductionLocations { get; set; }
public List<string> Taglines { get; set; }
diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs
index 8d2f19d4c..c0afe3df9 100644
--- a/MediaBrowser.Controller/Entities/Movies/Movie.cs
+++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs
@@ -14,7 +14,7 @@ namespace MediaBrowser.Controller.Entities.Movies
/// <summary>
/// Class Movie
/// </summary>
- public class Movie : Video, IHasCriticRating, IHasSoundtracks, IHasSpecialFeatures, IHasProductionLocations, IHasBudget, IHasKeywords, IHasTrailers, IHasThemeMedia, IHasTaglines, IHasPreferredMetadataLanguage, IHasAwards, IHasMetascore, IHasLookupInfo<MovieInfo>, ISupportsBoxSetGrouping
+ public class Movie : Video, IHasCriticRating, IHasSoundtracks, IHasSpecialFeatures, IHasProductionLocations, IHasBudget, IHasKeywords, IHasTrailers, IHasThemeMedia, IHasTaglines, IHasAwards, IHasMetascore, IHasLookupInfo<MovieInfo>, ISupportsBoxSetGrouping
{
public List<Guid> SpecialFeatureIds { get; set; }
@@ -30,14 +30,6 @@ namespace MediaBrowser.Controller.Entities.Movies
[IgnoreDataMember]
public List<Guid> BoxSetIdList { get; set; }
- /// <summary>
- /// Gets or sets the preferred metadata country code.
- /// </summary>
- /// <value>The preferred metadata country code.</value>
- public string PreferredMetadataCountryCode { get; set; }
-
- public string PreferredMetadataLanguage { get; set; }
-
public Movie()
{
SpecialFeatureIds = new List<Guid>();
diff --git a/MediaBrowser.Controller/Entities/Trailer.cs b/MediaBrowser.Controller/Entities/Trailer.cs
index 450555b3d..bbbf2358f 100644
--- a/MediaBrowser.Controller/Entities/Trailer.cs
+++ b/MediaBrowser.Controller/Entities/Trailer.cs
@@ -12,19 +12,12 @@ namespace MediaBrowser.Controller.Entities
/// <summary>
/// Class Trailer
/// </summary>
- public class Trailer : Video, IHasCriticRating, IHasSoundtracks, IHasProductionLocations, IHasBudget, IHasTrailers, IHasKeywords, IHasTaglines, IHasPreferredMetadataLanguage, IHasMetascore, IHasLookupInfo<TrailerInfo>
+ public class Trailer : Video, IHasCriticRating, IHasSoundtracks, IHasProductionLocations, IHasBudget, IHasTrailers, IHasKeywords, IHasTaglines, IHasMetascore, IHasLookupInfo<TrailerInfo>
{
public List<Guid> SoundtrackIds { get; set; }
- public string PreferredMetadataLanguage { get; set; }
public List<string> ProductionLocations { get; set; }
- /// <summary>
- /// Gets or sets the preferred metadata country code.
- /// </summary>
- /// <value>The preferred metadata country code.</value>
- public string PreferredMetadataCountryCode { get; set; }
-
public Trailer()
{
RemoteTrailers = new List<MediaUrl>();
diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs
index 0b22d639e..6550f43b4 100644
--- a/MediaBrowser.Controller/Entities/Video.cs
+++ b/MediaBrowser.Controller/Entities/Video.cs
@@ -25,6 +25,7 @@ namespace MediaBrowser.Controller.Entities
ISupportsPlaceHolders,
IHasMediaSources,
IHasShortOverview,
+ IHasPreferredMetadataLanguage,
IThemeMedia
{
public bool IsMultiPart { get; set; }
@@ -44,6 +45,13 @@ namespace MediaBrowser.Controller.Entities
public ExtraType ExtraType { get; set; }
/// <summary>
+ /// Gets or sets the preferred metadata country code.
+ /// </summary>
+ /// <value>The preferred metadata country code.</value>
+ public string PreferredMetadataCountryCode { get; set; }
+ public string PreferredMetadataLanguage { get; set; }
+
+ /// <summary>
/// Gets or sets the timestamp.
/// </summary>
/// <value>The timestamp.</value>
diff --git a/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs b/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs
index f2fa912ca..df118b25f 100644
--- a/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs
+++ b/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs
@@ -50,6 +50,11 @@ namespace MediaBrowser.Controller.LiveTv
}
}
+ public override bool IsSaveLocalMetadataEnabled()
+ {
+ return true;
+ }
+
/// <summary>
/// Gets or sets the number.
/// </summary>
diff --git a/MediaBrowser.Controller/Net/AuthenticatedAttribute.cs b/MediaBrowser.Controller/Net/AuthenticatedAttribute.cs
index 31bb7c66b..83e404dfc 100644
--- a/MediaBrowser.Controller/Net/AuthenticatedAttribute.cs
+++ b/MediaBrowser.Controller/Net/AuthenticatedAttribute.cs
@@ -1,10 +1,11 @@
using ServiceStack.Web;
using System;
+using System.Collections.Generic;
using System.Linq;
namespace MediaBrowser.Controller.Net
{
- public class AuthenticatedAttribute : Attribute, IHasRequestFilter
+ public class AuthenticatedAttribute : Attribute, IHasRequestFilter, IAuthenticated
{
public IAuthService AuthService { get; set; }
@@ -14,9 +15,19 @@ namespace MediaBrowser.Controller.Net
/// <value><c>true</c> if [allow local]; otherwise, <c>false</c>.</value>
public bool AllowLocal { get; set; }
+ /// <summary>
+ /// Gets or sets the roles.
+ /// </summary>
+ /// <value>The roles.</value>
public string Roles { get; set; }
/// <summary>
+ /// Gets or sets a value indicating whether [escape parental control].
+ /// </summary>
+ /// <value><c>true</c> if [escape parental control]; otherwise, <c>false</c>.</value>
+ public bool EscapeParentalControl { get; set; }
+
+ /// <summary>
/// The request filter is executed before the service.
/// </summary>
/// <param name="request">The http request wrapper</param>
@@ -24,11 +35,7 @@ namespace MediaBrowser.Controller.Net
/// <param name="requestDto">The request DTO</param>
public void RequestFilter(IRequest request, IResponse response, object requestDto)
{
- var roles = (Roles ?? string.Empty).Split(',')
- .Where(i => !string.IsNullOrWhiteSpace(i))
- .ToArray();
-
- AuthService.Authenticate(request, response, requestDto, AllowLocal, roles);
+ AuthService.Authenticate(request, response, requestDto, this);
}
/// <summary>
@@ -50,5 +57,20 @@ namespace MediaBrowser.Controller.Net
{
get { return 0; }
}
+
+
+ public IEnumerable<string> GetRoles()
+ {
+ return (Roles ?? string.Empty).Split(',')
+ .Where(i => !string.IsNullOrWhiteSpace(i));
+ }
+ }
+
+ public interface IAuthenticated
+ {
+ bool EscapeParentalControl { get; }
+
+ bool AllowLocal { get; }
+ IEnumerable<string> GetRoles();
}
}
diff --git a/MediaBrowser.Controller/Net/IAuthService.cs b/MediaBrowser.Controller/Net/IAuthService.cs
index 69014d0ff..9d335566f 100644
--- a/MediaBrowser.Controller/Net/IAuthService.cs
+++ b/MediaBrowser.Controller/Net/IAuthService.cs
@@ -1,5 +1,4 @@
using ServiceStack.Web;
-using System.Collections.Generic;
namespace MediaBrowser.Controller.Net
{
@@ -8,7 +7,6 @@ namespace MediaBrowser.Controller.Net
void Authenticate(IRequest request,
IResponse response,
object requestDto,
- bool allowLocal,
- string[] roles);
+ IAuthenticated authAttribtues);
}
}
diff --git a/MediaBrowser.Controller/Playlists/Playlist.cs b/MediaBrowser.Controller/Playlists/Playlist.cs
index f7bd439a3..75e1bbde7 100644
--- a/MediaBrowser.Controller/Playlists/Playlist.cs
+++ b/MediaBrowser.Controller/Playlists/Playlist.cs
@@ -33,6 +33,11 @@ namespace MediaBrowser.Controller.Playlists
}
}
+ public override bool IsSaveLocalMetadataEnabled()
+ {
+ return true;
+ }
+
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
{
return GetPlayableItems(user);
diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
index a24f0cd2c..627b7a266 100644
--- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
+++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
@@ -74,6 +74,9 @@
<Compile Include="..\MediaBrowser.Model\ApiClient\ApiClientExtensions.cs">
<Link>ApiClient\ApiClientExtensions.cs</Link>
</Compile>
+ <Compile Include="..\MediaBrowser.Model\ApiClient\ApiHelpers.cs">
+ <Link>ApiClient\ApiHelpers.cs</Link>
+ </Compile>
<Compile Include="..\MediaBrowser.Model\ApiClient\ConnectionMode.cs">
<Link>ApiClient\ConnectionMode.cs</Link>
</Compile>
@@ -104,6 +107,9 @@
<Compile Include="..\MediaBrowser.Model\ApiClient\IServerEvents.cs">
<Link>ApiClient\IServerEvents.cs</Link>
</Compile>
+ <Compile Include="..\MediaBrowser.Model\ApiClient\RemoteLogoutReason.cs">
+ <Link>ApiClient\RemoteLogoutReason.cs</Link>
+ </Compile>
<Compile Include="..\MediaBrowser.Model\ApiClient\ServerCredentials.cs">
<Link>ApiClient\ServerCredentials.cs</Link>
</Compile>
diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
index d03672966..7c3235eed 100644
--- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
+++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
@@ -54,6 +54,9 @@
<Compile Include="..\mediabrowser.model\activity\ActivityLogEntry.cs">
<Link>Activity\ActivityLogEntry.cs</Link>
</Compile>
+ <Compile Include="..\MediaBrowser.Model\ApiClient\ApiHelpers.cs">
+ <Link>ApiClient\ApiHelpers.cs</Link>
+ </Compile>
<Compile Include="..\MediaBrowser.Model\ApiClient\ConnectionMode.cs">
<Link>ApiClient\ConnectionMode.cs</Link>
</Compile>
@@ -69,6 +72,9 @@
<Compile Include="..\MediaBrowser.Model\ApiClient\IServerEvents.cs">
<Link>ApiClient\IServerEvents.cs</Link>
</Compile>
+ <Compile Include="..\MediaBrowser.Model\ApiClient\RemoteLogoutReason.cs">
+ <Link>ApiClient\RemoteLogoutReason.cs</Link>
+ </Compile>
<Compile Include="..\MediaBrowser.Model\ApiClient\ServerCredentials.cs">
<Link>ApiClient\ServerCredentials.cs</Link>
</Compile>
diff --git a/MediaBrowser.Model/ApiClient/ApiHelpers.cs b/MediaBrowser.Model/ApiClient/ApiHelpers.cs
new file mode 100644
index 000000000..65b6495ab
--- /dev/null
+++ b/MediaBrowser.Model/ApiClient/ApiHelpers.cs
@@ -0,0 +1,22 @@
+using System;
+
+namespace MediaBrowser.Model.ApiClient
+{
+ public static class ApiHelpers
+ {
+ /// <summary>
+ /// Gets the name of the slug.
+ /// </summary>
+ /// <param name="name">The name.</param>
+ /// <returns>System.String.</returns>
+ public static string GetSlugName(string name)
+ {
+ if (string.IsNullOrEmpty(name))
+ {
+ throw new ArgumentNullException("name");
+ }
+
+ return name.Replace('/', '-').Replace('?', '-').Replace('&', '-');
+ }
+ }
+}
diff --git a/MediaBrowser.Model/ApiClient/ConnectionState.cs b/MediaBrowser.Model/ApiClient/ConnectionState.cs
index 63e156eb1..5e47d688e 100644
--- a/MediaBrowser.Model/ApiClient/ConnectionState.cs
+++ b/MediaBrowser.Model/ApiClient/ConnectionState.cs
@@ -5,6 +5,7 @@ namespace MediaBrowser.Model.ApiClient
Unavailable = 1,
ServerSignIn = 2,
SignedIn = 3,
- ServerSelection = 4
+ ServerSelection = 4,
+ ConnectSignIn = 5
}
} \ No newline at end of file
diff --git a/MediaBrowser.Model/ApiClient/HttpResponseEventArgs.cs b/MediaBrowser.Model/ApiClient/HttpResponseEventArgs.cs
index 417db404f..b1c19f056 100644
--- a/MediaBrowser.Model/ApiClient/HttpResponseEventArgs.cs
+++ b/MediaBrowser.Model/ApiClient/HttpResponseEventArgs.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Net;
namespace MediaBrowser.Model.ApiClient
@@ -18,5 +19,15 @@ namespace MediaBrowser.Model.ApiClient
/// </summary>
/// <value>The status code.</value>
public HttpStatusCode StatusCode { get; set; }
+ /// <summary>
+ /// Gets or sets the headers.
+ /// </summary>
+ /// <value>The headers.</value>
+ public Dictionary<string, string> Headers { get; set; }
+
+ public HttpResponseEventArgs()
+ {
+ Headers = new Dictionary<string, string>();
+ }
}
}
diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs
index bc909284b..89c731223 100644
--- a/MediaBrowser.Model/ApiClient/IApiClient.cs
+++ b/MediaBrowser.Model/ApiClient/IApiClient.cs
@@ -32,7 +32,7 @@ namespace MediaBrowser.Model.ApiClient
/// <summary>
/// Occurs when [remote logged out].
/// </summary>
- event EventHandler<EventArgs> RemoteLoggedOut;
+ event EventHandler<GenericEventArgs<RemoteLogoutReason>> RemoteLoggedOut;
/// <summary>
/// Occurs when [authenticated].
diff --git a/MediaBrowser.Model/ApiClient/RemoteLogoutReason.cs b/MediaBrowser.Model/ApiClient/RemoteLogoutReason.cs
new file mode 100644
index 000000000..237949c69
--- /dev/null
+++ b/MediaBrowser.Model/ApiClient/RemoteLogoutReason.cs
@@ -0,0 +1,9 @@
+
+namespace MediaBrowser.Model.ApiClient
+{
+ public enum RemoteLogoutReason
+ {
+ GeneralAccesError = 0,
+ ParentalControlRestriction = 1
+ }
+}
diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj
index 549023303..24bf2c93c 100644
--- a/MediaBrowser.Model/MediaBrowser.Model.csproj
+++ b/MediaBrowser.Model/MediaBrowser.Model.csproj
@@ -60,6 +60,7 @@
<Link>Properties\SharedVersion.cs</Link>
</Compile>
<Compile Include="Activity\ActivityLogEntry.cs" />
+ <Compile Include="ApiClient\ApiHelpers.cs" />
<Compile Include="ApiClient\ConnectionMode.cs" />
<Compile Include="ApiClient\ConnectionResult.cs" />
<Compile Include="ApiClient\ConnectionState.cs" />
@@ -71,6 +72,7 @@
<Compile Include="ApiClient\IDevice.cs" />
<Compile Include="ApiClient\IServerEvents.cs" />
<Compile Include="ApiClient\GeneralCommandEventArgs.cs" />
+ <Compile Include="ApiClient\RemoteLogoutReason.cs" />
<Compile Include="ApiClient\ServerCredentials.cs" />
<Compile Include="ApiClient\ServerDiscoveryInfo.cs" />
<Compile Include="ApiClient\ServerInfo.cs" />
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index 1f46ee488..e27c39df1 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -350,6 +350,7 @@ namespace MediaBrowser.Providers.Manager
{
var remoteResult = await ExecuteRemoteProviders(item, temp, logName, id, providers.OfType<IRemoteMetadataProvider<TItemType, TIdType>>(), cancellationToken)
.ConfigureAwait(false);
+
refreshResult.UpdateType = refreshResult.UpdateType | remoteResult.UpdateType;
refreshResult.Status = remoteResult.Status;
refreshResult.ErrorMessage = remoteResult.ErrorMessage;
@@ -359,8 +360,9 @@ namespace MediaBrowser.Providers.Manager
var hasLocalMetadata = false;
var userDataList = new List<UserItemData>();
+ var localProviders = providers.OfType<ILocalMetadataProvider<TItemType>>().ToList();
- foreach (var provider in providers.OfType<ILocalMetadataProvider<TItemType>>())
+ foreach (var provider in localProviders)
{
var providerName = provider.GetType().Name;
Logger.Debug("Running {0} for {1}", providerName, logName);
@@ -428,6 +430,16 @@ namespace MediaBrowser.Providers.Manager
successfulProviderCount += remoteResult.Successes;
}
+ // If no local providers and doing a full refresh, take data from item itself
+ if (options.MetadataRefreshMode == MetadataRefreshMode.FullRefresh &&
+ localProviders.Count == 0 &&
+ refreshResult.UpdateType > ItemUpdateType.None)
+ {
+ // TODO: If the new metadata from above has some blank data, this
+ // can cause old data to get filled into those empty fields
+ MergeData(item, temp, new List<MetadataFields>(), false, true);
+ }
+
if (refreshResult.UpdateType > ItemUpdateType.None)
{
MergeData(temp, item, item.LockedFields, true, true);
@@ -598,7 +610,11 @@ namespace MediaBrowser.Providers.Manager
}
}
- protected abstract void MergeData(TItemType source, TItemType target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings);
+ protected abstract void MergeData(TItemType source,
+ TItemType target,
+ List<MetadataFields> lockedFields,
+ bool replaceData,
+ bool mergeMetadataSettings);
public virtual int Order
{
diff --git a/MediaBrowser.Providers/Manager/ProviderUtils.cs b/MediaBrowser.Providers/Manager/ProviderUtils.cs
index 2c19c3312..155cd208f 100644
--- a/MediaBrowser.Providers/Manager/ProviderUtils.cs
+++ b/MediaBrowser.Providers/Manager/ProviderUtils.cs
@@ -8,7 +8,11 @@ namespace MediaBrowser.Providers.Manager
{
public static class ProviderUtils
{
- public static void MergeBaseItemData(BaseItem source, BaseItem target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ public static void MergeBaseItemData(BaseItem source,
+ BaseItem target,
+ List<MetadataFields> lockedFields,
+ bool replaceData,
+ bool mergeMetadataSettings)
{
if (!lockedFields.Contains(MetadataFields.Name))
{
@@ -191,36 +195,42 @@ namespace MediaBrowser.Providers.Manager
if (mergeMetadataSettings)
{
- target.ForcedSortName = source.ForcedSortName;
- target.LockedFields = source.LockedFields;
- target.IsLocked = source.IsLocked;
- target.DisplayMediaType = source.DisplayMediaType;
+ MergeMetadataSettings(source, target);
+ }
+ }
- // Grab the value if it's there, but if not then don't overwrite the default
- if (source.DateCreated != default(DateTime))
- {
- target.DateCreated = source.DateCreated;
- }
+ public static void MergeMetadataSettings(BaseItem source,
+ BaseItem target)
+ {
+ target.ForcedSortName = source.ForcedSortName;
+ target.LockedFields = source.LockedFields;
+ target.IsLocked = source.IsLocked;
+ target.DisplayMediaType = source.DisplayMediaType;
- var sourceHasLanguageSettings = source as IHasPreferredMetadataLanguage;
- var targetHasLanguageSettings = target as IHasPreferredMetadataLanguage;
+ // Grab the value if it's there, but if not then don't overwrite the default
+ if (source.DateCreated != default(DateTime))
+ {
+ target.DateCreated = source.DateCreated;
+ }
- if (sourceHasLanguageSettings != null && targetHasLanguageSettings != null)
- {
- targetHasLanguageSettings.PreferredMetadataCountryCode = sourceHasLanguageSettings.PreferredMetadataCountryCode;
- targetHasLanguageSettings.PreferredMetadataLanguage = sourceHasLanguageSettings.PreferredMetadataLanguage;
- }
+ var sourceHasLanguageSettings = source as IHasPreferredMetadataLanguage;
+ var targetHasLanguageSettings = target as IHasPreferredMetadataLanguage;
- var sourceHasDisplayOrder = source as IHasDisplayOrder;
- var targetHasDisplayOrder = target as IHasDisplayOrder;
+ if (sourceHasLanguageSettings != null && targetHasLanguageSettings != null)
+ {
+ targetHasLanguageSettings.PreferredMetadataCountryCode = sourceHasLanguageSettings.PreferredMetadataCountryCode;
+ targetHasLanguageSettings.PreferredMetadataLanguage = sourceHasLanguageSettings.PreferredMetadataLanguage;
+ }
- if (sourceHasDisplayOrder != null && targetHasDisplayOrder != null)
- {
- targetHasDisplayOrder.DisplayOrder = sourceHasDisplayOrder.DisplayOrder;
- }
+ var sourceHasDisplayOrder = source as IHasDisplayOrder;
+ var targetHasDisplayOrder = target as IHasDisplayOrder;
+
+ if (sourceHasDisplayOrder != null && targetHasDisplayOrder != null)
+ {
+ targetHasDisplayOrder.DisplayOrder = sourceHasDisplayOrder.DisplayOrder;
}
}
-
+
private static void MergeShortOverview(BaseItem source, BaseItem target, List<MetadataFields> lockedFields, bool replaceData)
{
var sourceHasShortOverview = source as IHasShortOverview;
diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
index 4972736ef..a750dd82e 100644
--- a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
+++ b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
@@ -235,14 +235,14 @@ namespace MediaBrowser.Server.Implementations.HttpServer
{
return;
}
-
+
var errorResponse = new ErrorResponse
{
ResponseStatus = new ResponseStatus
{
ErrorCode = ex.GetType().GetOperationName(),
Message = ex.Message,
- StackTrace = ex.StackTrace,
+ StackTrace = ex.StackTrace
}
};
diff --git a/MediaBrowser.Server.Implementations/HttpServer/ResponseFilter.cs b/MediaBrowser.Server.Implementations/HttpServer/ResponseFilter.cs
index e0a5764d5..23ecde191 100644
--- a/MediaBrowser.Server.Implementations/HttpServer/ResponseFilter.cs
+++ b/MediaBrowser.Server.Implementations/HttpServer/ResponseFilter.cs
@@ -94,7 +94,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
/// </summary>
/// <param name="inString">The in string.</param>
/// <returns>System.String.</returns>
- private static string RemoveControlCharacters(string inString)
+ public static string RemoveControlCharacters(string inString)
{
if (inString == null) return null;
diff --git a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs b/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs
index a1a68586b..3a2bd7b75 100644
--- a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs
+++ b/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs
@@ -1,5 +1,4 @@
-using System.Collections.Generic;
-using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
using MediaBrowser.Controller.Session;
@@ -45,8 +44,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
public void Authenticate(IRequest request,
IResponse response,
object requestDto,
- bool allowLocal,
- string[] roles)
+ IAuthenticated authAttribtues)
{
if (HostContext.HasValidAuthSecret(request))
return;
@@ -54,16 +52,15 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
//ExecuteBasic(req, res, requestDto); //first check if session is authenticated
//if (res.IsClosed) return; //AuthenticateAttribute already closed the request (ie auth failed)
- ValidateUser(request, allowLocal, roles);
+ ValidateUser(request, response, authAttribtues);
}
- private void ValidateUser(IRequest req, bool allowLocal,
- IEnumerable<string> roles)
+ private void ValidateUser(IRequest req, IResponse response, IAuthenticated authAttribtues)
{
// This code is executed before the service
var auth = AuthorizationContext.GetAuthorizationInfo(req);
- if (!allowLocal || !req.IsLocal)
+ if (!authAttribtues.AllowLocal || !req.IsLocal)
{
if (!string.IsNullOrWhiteSpace(auth.Token) ||
!_config.Configuration.InsecureApps2.Contains(auth.Client ?? string.Empty, StringComparer.OrdinalIgnoreCase))
@@ -91,12 +88,17 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
throw new AuthenticationException("User account has been disabled.");
}
- if (!user.Configuration.IsAdministrator && !user.IsParentalScheduleAllowed())
+ if (!user.Configuration.IsAdministrator &&
+ !authAttribtues.EscapeParentalControl &&
+ !user.IsParentalScheduleAllowed())
{
+ response.AddHeader("X-Application-Error-Code", "ParentalControl");
throw new AuthenticationException("This user account is not allowed access at this time.");
}
}
+ var roles = authAttribtues.GetRoles().ToList();
+
if (roles.Contains("admin", StringComparer.OrdinalIgnoreCase))
{
if (user == null || !user.Configuration.IsAdministrator)
diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
index 7b5fd2da6..9a7d24a70 100644
--- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
+++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
@@ -619,6 +619,7 @@
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later.",
- "ButtonSelectServer": "Select server",
- "MessagePluginConfigurationRequiresLocalAccess": "To configure this plugin please sign in to your local server directly."
+ "ButtonSelectServer": "Select server",
+ "MessagePluginConfigurationRequiresLocalAccess": "To configure this plugin please sign in to your local server directly.",
+ "MessageLoggedOutParentalControl": "Access is currently restricted. Please try again later."
}
diff --git a/MediaBrowser.WebDashboard/Api/PackageCreator.cs b/MediaBrowser.WebDashboard/Api/PackageCreator.cs
index 09bda8efe..e835f6d49 100644
--- a/MediaBrowser.WebDashboard/Api/PackageCreator.cs
+++ b/MediaBrowser.WebDashboard/Api/PackageCreator.cs
@@ -265,6 +265,7 @@ namespace MediaBrowser.WebDashboard.Api
"thirdparty/apiclient/md5.js",
"thirdparty/apiclient/sha1.js",
"thirdparty/apiclient/store.js",
+ "thirdparty/apiclient/network.js",
"thirdparty/apiclient/device.js",
"thirdparty/apiclient/credentials.js",
"thirdparty/apiclient/mediabrowser.apiclient.js",
diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
index dddf9c631..b657acc65 100644
--- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
+++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
@@ -920,6 +920,9 @@
<Content Include="dashboard-ui\thirdparty\apiclient\credentials.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Content Include="dashboard-ui\thirdparty\apiclient\network.js">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="dashboard-ui\thirdparty\apiclient\sha1.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec
index 23d51c9f5..e1aec93a3 100644
--- a/Nuget/MediaBrowser.Common.Internal.nuspec
+++ b/Nuget/MediaBrowser.Common.Internal.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Common.Internal</id>
- <version>3.0.501</version>
+ <version>3.0.502</version>
<title>MediaBrowser.Common.Internal</title>
<authors>Luke</authors>
<owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
<description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
<copyright>Copyright © Media Browser 2013</copyright>
<dependencies>
- <dependency id="MediaBrowser.Common" version="3.0.501" />
+ <dependency id="MediaBrowser.Common" version="3.0.502" />
<dependency id="NLog" version="3.1.0.0" />
<dependency id="SimpleInjector" version="2.6.0" />
<dependency id="sharpcompress" version="0.10.2" />
diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec
index 41a81d816..e467bae2d 100644
--- a/Nuget/MediaBrowser.Common.nuspec
+++ b/Nuget/MediaBrowser.Common.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Common</id>
- <version>3.0.501</version>
+ <version>3.0.502</version>
<title>MediaBrowser.Common</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>
diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec
index afd9c64a7..093eb066e 100644
--- a/Nuget/MediaBrowser.Model.Signed.nuspec
+++ b/Nuget/MediaBrowser.Model.Signed.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Model.Signed</id>
- <version>3.0.501</version>
+ <version>3.0.502</version>
<title>MediaBrowser.Model - Signed Edition</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>
diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec
index 5e9b013d0..ca8aa13fa 100644
--- a/Nuget/MediaBrowser.Server.Core.nuspec
+++ b/Nuget/MediaBrowser.Server.Core.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>MediaBrowser.Server.Core</id>
- <version>3.0.501</version>
+ <version>3.0.502</version>
<title>Media Browser.Server.Core</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
<description>Contains core components required to build plugins for Media Browser Server.</description>
<copyright>Copyright © Media Browser 2013</copyright>
<dependencies>
- <dependency id="MediaBrowser.Common" version="3.0.501" />
+ <dependency id="MediaBrowser.Common" version="3.0.502" />
</dependencies>
</metadata>
<files>