made display preferences uniquely identifiable

pull/702/head
Luke Pulverenti 12 years ago
parent 7c3f257581
commit 4986722c73

@ -12,7 +12,7 @@ namespace MediaBrowser.Api
/// <summary> /// <summary>
/// Class UpdateDisplayPreferences /// Class UpdateDisplayPreferences
/// </summary> /// </summary>
[Route("/Users/{UserId}/DisplayPreferences/{Id}", "POST")] [Route("/DisplayPreferences/{DisplayPreferencesId}", "POST")]
[Api(("Updates a user's display preferences for an item"))] [Api(("Updates a user's display preferences for an item"))]
public class UpdateDisplayPreferences : DisplayPreferences, IReturnVoid public class UpdateDisplayPreferences : DisplayPreferences, IReturnVoid
{ {
@ -20,17 +20,14 @@ namespace MediaBrowser.Api
/// Gets or sets the id. /// Gets or sets the id.
/// </summary> /// </summary>
/// <value>The id.</value> /// <value>The id.</value>
[ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] [ApiMember(Name = "DisplayPreferencesId", Description = "DisplayPreferences Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
public Guid Id { get; set; } public Guid DisplayPreferencesId { get; set; }
} }
[Route("/Users/{UserId}/DisplayPreferences/{Id}", "GET")] [Route("/DisplayPreferences/{Id}", "GET")]
[Api(("Gets a user's display preferences for an item"))] [Api(("Gets a user's display preferences for an item"))]
public class GetDisplayPreferences : IReturn<DisplayPreferences> public class GetDisplayPreferences : IReturn<DisplayPreferences>
{ {
[ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
public Guid UserId { get; set; }
/// <summary> /// <summary>
/// Gets or sets the id. /// Gets or sets the id.
/// </summary> /// </summary>
@ -70,7 +67,7 @@ namespace MediaBrowser.Api
/// <param name="request">The request.</param> /// <param name="request">The request.</param>
public object Get(GetDisplayPreferences request) public object Get(GetDisplayPreferences request)
{ {
var task = _userManager.GetDisplayPreferences(request.UserId, request.Id); var task = _userManager.GetDisplayPreferences(request.Id);
return ToOptimizedResult(task.Result); return ToOptimizedResult(task.Result);
} }
@ -84,15 +81,12 @@ namespace MediaBrowser.Api
// We need to parse this manually because we told service stack not to with IRequiresRequestStream // We need to parse this manually because we told service stack not to with IRequiresRequestStream
// https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs // https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs
var pathInfo = PathInfo.Parse(RequestContext.PathInfo); var pathInfo = PathInfo.Parse(RequestContext.PathInfo);
var userId = new Guid(pathInfo.GetArgumentValue<string>(1)); var displayPreferencesId = new Guid(pathInfo.GetArgumentValue<string>(1));
var displayPreferencesId = new Guid(pathInfo.GetArgumentValue<string>(3));
var user = _userManager.GetUserById(userId);
// Serialize to json and then back so that the core doesn't see the request dto type // Serialize to json and then back so that the core doesn't see the request dto type
var displayPreferences = _jsonSerializer.DeserializeFromString<DisplayPreferences>(_jsonSerializer.SerializeToString(request)); var displayPreferences = _jsonSerializer.DeserializeFromString<DisplayPreferences>(_jsonSerializer.SerializeToString(request));
var task = _userManager.SaveDisplayPreferences(user.Id, displayPreferencesId, displayPreferences, CancellationToken.None); var task = _userManager.SaveDisplayPreferences(displayPreferences, CancellationToken.None);
Task.WaitAll(task); Task.WaitAll(task);
} }

@ -1,6 +1,5 @@
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Tasks;
using System; using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
@ -35,7 +34,7 @@ namespace MediaBrowser.Controller.Entities
/// Allow different display preferences for each collection folder /// Allow different display preferences for each collection folder
/// </summary> /// </summary>
/// <value>The display prefs id.</value> /// <value>The display prefs id.</value>
public override Guid DisplayPreferencesId protected override Guid DisplayPreferencesId
{ {
get get
{ {

@ -65,7 +65,7 @@ namespace MediaBrowser.Controller.Entities
/// </summary> /// </summary>
/// <value>The display prefs id.</value> /// <value>The display prefs id.</value>
[IgnoreDataMember] [IgnoreDataMember]
public virtual Guid DisplayPreferencesId protected virtual Guid DisplayPreferencesId
{ {
get get
{ {
@ -74,6 +74,16 @@ namespace MediaBrowser.Controller.Entities
} }
} }
/// <summary>
/// Gets the display preferences id.
/// </summary>
/// <param name="userId">The user id.</param>
/// <returns>Guid.</returns>
public Guid GetDisplayPreferencesId(Guid userId)
{
return (userId + DisplayPreferencesId.ToString()).GetMD5();
}
#region Indexing #region Indexing
/// <summary> /// <summary>

@ -174,7 +174,7 @@ namespace MediaBrowser.Controller.Library
if (item.IsFolder && fields.Contains(ItemFields.DisplayPreferencesId)) if (item.IsFolder && fields.Contains(ItemFields.DisplayPreferencesId))
{ {
dto.DisplayPreferencesId = ((Folder)item).DisplayPreferencesId.ToString(); dto.DisplayPreferencesId = ((Folder) item).GetDisplayPreferencesId(user.Id).ToString();
} }
if (item.IsFolder) if (item.IsFolder)

@ -190,23 +190,20 @@ namespace MediaBrowser.Controller.Library
/// <param name="userDataId">The user data id.</param> /// <param name="userDataId">The user data id.</param>
/// <returns>Task{DisplayPreferences}.</returns> /// <returns>Task{DisplayPreferences}.</returns>
Task<UserItemData> GetUserData(Guid userId, Guid userDataId); Task<UserItemData> GetUserData(Guid userId, Guid userDataId);
/// <summary> /// <summary>
/// Gets the display preferences. /// Gets the display preferences.
/// </summary> /// </summary>
/// <param name="userId">The user id.</param>
/// <param name="displayPreferencesId">The display preferences id.</param> /// <param name="displayPreferencesId">The display preferences id.</param>
/// <returns>DisplayPreferences.</returns> /// <returns>DisplayPreferences.</returns>
Task<DisplayPreferences> GetDisplayPreferences(Guid userId, Guid displayPreferencesId); Task<DisplayPreferences> GetDisplayPreferences(Guid displayPreferencesId);
/// <summary> /// <summary>
/// Saves display preferences for an item /// Saves display preferences for an item
/// </summary> /// </summary>
/// <param name="userId">The user id.</param>
/// <param name="displayPreferencesId">The display preferences id.</param>
/// <param name="displayPreferences">The display preferences.</param> /// <param name="displayPreferences">The display preferences.</param>
/// <param name="cancellationToken">The cancellation token.</param> /// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns> /// <returns>Task.</returns>
Task SaveDisplayPreferences(Guid userId, Guid displayPreferencesId, DisplayPreferences displayPreferences, CancellationToken cancellationToken); Task SaveDisplayPreferences(DisplayPreferences displayPreferences, CancellationToken cancellationToken);
} }
} }

@ -13,20 +13,17 @@ namespace MediaBrowser.Controller.Persistence
/// <summary> /// <summary>
/// Saves display preferences for an item /// Saves display preferences for an item
/// </summary> /// </summary>
/// <param name="userId">The user id.</param>
/// <param name="displayPreferencesId">The display preferences id.</param>
/// <param name="displayPreferences">The display preferences.</param> /// <param name="displayPreferences">The display preferences.</param>
/// <param name="cancellationToken">The cancellation token.</param> /// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns> /// <returns>Task.</returns>
Task SaveDisplayPreferences(Guid userId, Guid displayPreferencesId, DisplayPreferences displayPreferences, Task SaveDisplayPreferences(DisplayPreferences displayPreferences,
CancellationToken cancellationToken); CancellationToken cancellationToken);
/// <summary> /// <summary>
/// Gets the display preferences. /// Gets the display preferences.
/// </summary> /// </summary>
/// <param name="userId">The user id.</param>
/// <param name="displayPreferencesId">The display preferences id.</param> /// <param name="displayPreferencesId">The display preferences id.</param>
/// <returns>Task{DisplayPreferences}.</returns> /// <returns>Task{DisplayPreferences}.</returns>
Task<DisplayPreferences> GetDisplayPreferences(Guid userId, Guid displayPreferencesId); Task<DisplayPreferences> GetDisplayPreferences(Guid displayPreferencesId);
} }
} }

@ -32,7 +32,7 @@ namespace MediaBrowser.Model.Entities
/// </summary> /// </summary>
/// <value>The user id.</value> /// <value>The user id.</value>
[ProtoMember(1)] [ProtoMember(1)]
public Guid UserId { get; set; } public Guid Id { get; set; }
/// <summary> /// <summary>
/// Gets or sets the type of the view. /// Gets or sets the type of the view.
/// </summary> /// </summary>

@ -102,7 +102,7 @@ namespace MediaBrowser.Server.Implementations.Library
/// <summary> /// <summary>
/// The _user data /// The _user data
/// </summary> /// </summary>
private readonly ConcurrentDictionary<string, Task<DisplayPreferences>> _displayPreferences = new ConcurrentDictionary<string, Task<DisplayPreferences>>(); private readonly ConcurrentDictionary<Guid, Task<DisplayPreferences>> _displayPreferences = new ConcurrentDictionary<Guid, Task<DisplayPreferences>>();
private readonly ConcurrentDictionary<string, Task<UserItemData>> _userData = new ConcurrentDictionary<string, Task<UserItemData>>(); private readonly ConcurrentDictionary<string, Task<UserItemData>> _userData = new ConcurrentDictionary<string, Task<UserItemData>>();
@ -168,51 +168,51 @@ namespace MediaBrowser.Server.Implementations.Library
/// <summary> /// <summary>
/// Gets the display preferences. /// Gets the display preferences.
/// </summary> /// </summary>
/// <param name="userId">The user id.</param>
/// <param name="displayPreferencesId">The display preferences id.</param> /// <param name="displayPreferencesId">The display preferences id.</param>
/// <returns>DisplayPreferences.</returns> /// <returns>DisplayPreferences.</returns>
public Task<DisplayPreferences> GetDisplayPreferences(Guid userId, Guid displayPreferencesId) public Task<DisplayPreferences> GetDisplayPreferences(Guid displayPreferencesId)
{ {
var key = userId + displayPreferencesId.ToString(); return _displayPreferences.GetOrAdd(displayPreferencesId, keyName => RetrieveDisplayPreferences(displayPreferencesId));
return _displayPreferences.GetOrAdd(key, keyName => RetrieveDisplayPreferences(userId, displayPreferencesId));
} }
/// <summary> /// <summary>
/// Retrieves the display preferences. /// Retrieves the display preferences.
/// </summary> /// </summary>
/// <param name="userId">The user id.</param>
/// <param name="displayPreferencesId">The display preferences id.</param> /// <param name="displayPreferencesId">The display preferences id.</param>
/// <returns>DisplayPreferences.</returns> /// <returns>DisplayPreferences.</returns>
private async Task<DisplayPreferences> RetrieveDisplayPreferences(Guid userId, Guid displayPreferencesId) private async Task<DisplayPreferences> RetrieveDisplayPreferences(Guid displayPreferencesId)
{ {
var displayPreferences = await Kernel.Instance.DisplayPreferencesRepository.GetDisplayPreferences(userId, displayPreferencesId).ConfigureAwait(false); var displayPreferences = await Kernel.Instance.DisplayPreferencesRepository.GetDisplayPreferences(displayPreferencesId).ConfigureAwait(false);
return displayPreferences ?? new DisplayPreferences(); return displayPreferences ?? new DisplayPreferences { Id = displayPreferencesId };
} }
/// <summary> /// <summary>
/// Saves display preferences for an item /// Saves display preferences for an item
/// </summary> /// </summary>
/// <param name="userId">The user id.</param>
/// <param name="displayPreferencesId">The display preferences id.</param>
/// <param name="displayPreferences">The display preferences.</param> /// <param name="displayPreferences">The display preferences.</param>
/// <param name="cancellationToken">The cancellation token.</param> /// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns> /// <returns>Task.</returns>
public async Task SaveDisplayPreferences(Guid userId, Guid displayPreferencesId, DisplayPreferences displayPreferences, CancellationToken cancellationToken) public async Task SaveDisplayPreferences(DisplayPreferences displayPreferences, CancellationToken cancellationToken)
{ {
var key = userId + displayPreferencesId.ToString(); if (displayPreferences == null)
{
throw new ArgumentNullException("displayPreferences");
}
if (displayPreferences.Id == Guid.Empty)
{
throw new ArgumentNullException("displayPreferences.Id");
}
try try
{ {
await Kernel.Instance.DisplayPreferencesRepository.SaveDisplayPreferences(userId, displayPreferencesId, await Kernel.Instance.DisplayPreferencesRepository.SaveDisplayPreferences(displayPreferences,
displayPreferences,
cancellationToken).ConfigureAwait(false); cancellationToken).ConfigureAwait(false);
var newValue = Task.FromResult(displayPreferences); var newValue = Task.FromResult(displayPreferences);
// Once it succeeds, put it into the dictionary to make it available to everyone else // Once it succeeds, put it into the dictionary to make it available to everyone else
_displayPreferences.AddOrUpdate(key, newValue, delegate { return newValue; }); _displayPreferences.AddOrUpdate(displayPreferences.Id, newValue, delegate { return newValue; });
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -232,7 +232,7 @@ namespace MediaBrowser.Server.Implementations.Library
{ {
if (id == Guid.Empty) if (id == Guid.Empty)
{ {
throw new ArgumentNullException(); throw new ArgumentNullException("id");
} }
return Users.FirstOrDefault(u => u.Id == id); return Users.FirstOrDefault(u => u.Id == id);

@ -78,8 +78,8 @@ namespace MediaBrowser.Server.Implementations.Sqlite
string[] queries = { string[] queries = {
"create table if not exists displaypreferences (id GUID, userId GUID, data BLOB)", "create table if not exists displaypreferences (id GUID, data BLOB)",
"create unique index if not exists displaypreferencesindex on displaypreferences (id, userId)", "create unique index if not exists displaypreferencesindex on displaypreferences (id)",
"create table if not exists schema_version (table_name primary key, version)", "create table if not exists schema_version (table_name primary key, version)",
//pragmas //pragmas
"pragma temp_store = memory" "pragma temp_store = memory"
@ -91,29 +91,23 @@ namespace MediaBrowser.Server.Implementations.Sqlite
/// <summary> /// <summary>
/// Save the display preferences associated with an item in the repo /// Save the display preferences associated with an item in the repo
/// </summary> /// </summary>
/// <param name="userId">The user id.</param>
/// <param name="displayPreferencesId">The display preferences id.</param>
/// <param name="displayPreferences">The display preferences.</param> /// <param name="displayPreferences">The display preferences.</param>
/// <param name="cancellationToken">The cancellation token.</param> /// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns> /// <returns>Task.</returns>
/// <exception cref="System.ArgumentNullException">item</exception> /// <exception cref="System.ArgumentNullException">item</exception>
public Task SaveDisplayPreferences(Guid userId, Guid displayPreferencesId, DisplayPreferences displayPreferences, CancellationToken cancellationToken) public Task SaveDisplayPreferences(DisplayPreferences displayPreferences, CancellationToken cancellationToken)
{ {
if (displayPreferences == null) if (displayPreferences == null)
{ {
throw new ArgumentNullException("displayPreferences"); throw new ArgumentNullException("displayPreferences");
} }
if (cancellationToken == null) if (displayPreferences.Id == Guid.Empty)
{
throw new ArgumentNullException("cancellationToken");
}
if (userId == Guid.Empty)
{ {
throw new ArgumentNullException("userId"); throw new ArgumentNullException("displayPreferences.Id");
} }
if (displayPreferencesId == Guid.Empty) if (cancellationToken == null)
{ {
throw new ArgumentNullException("displayPreferencesId"); throw new ArgumentNullException("cancellationToken");
} }
cancellationToken.ThrowIfCancellationRequested(); cancellationToken.ThrowIfCancellationRequested();
@ -125,10 +119,9 @@ namespace MediaBrowser.Server.Implementations.Sqlite
cancellationToken.ThrowIfCancellationRequested(); cancellationToken.ThrowIfCancellationRequested();
var cmd = connection.CreateCommand(); var cmd = connection.CreateCommand();
cmd.CommandText = "replace into displaypreferences (id, userId, data) values (@1, @2, @3)"; cmd.CommandText = "replace into displaypreferences (id, data) values (@1, @3)";
cmd.AddParam("@1", displayPreferencesId); cmd.AddParam("@1", displayPreferences.Id);
cmd.AddParam("@2", userId); cmd.AddParam("@2", serialized);
cmd.AddParam("@3", serialized);
QueueCommand(cmd); QueueCommand(cmd);
}); });
} }
@ -136,30 +129,22 @@ namespace MediaBrowser.Server.Implementations.Sqlite
/// <summary> /// <summary>
/// Gets the display preferences. /// Gets the display preferences.
/// </summary> /// </summary>
/// <param name="userId">The user id.</param>
/// <param name="displayPreferencesId">The display preferences id.</param> /// <param name="displayPreferencesId">The display preferences id.</param>
/// <returns>Task{DisplayPreferences}.</returns> /// <returns>Task{DisplayPreferences}.</returns>
/// <exception cref="System.ArgumentNullException">item</exception> /// <exception cref="System.ArgumentNullException">item</exception>
public async Task<DisplayPreferences> GetDisplayPreferences(Guid userId, Guid displayPreferencesId) public async Task<DisplayPreferences> GetDisplayPreferences(Guid displayPreferencesId)
{ {
if (userId == Guid.Empty)
{
throw new ArgumentNullException("userId");
}
if (displayPreferencesId == Guid.Empty) if (displayPreferencesId == Guid.Empty)
{ {
throw new ArgumentNullException("displayPreferencesId"); throw new ArgumentNullException("displayPreferencesId");
} }
var cmd = connection.CreateCommand(); var cmd = connection.CreateCommand();
cmd.CommandText = "select data from displaypreferences where id = @id and userId=@userId"; cmd.CommandText = "select data from displaypreferences where id = @id";
var idParam = cmd.Parameters.Add("@id", DbType.Guid); var idParam = cmd.Parameters.Add("@id", DbType.Guid);
idParam.Value = displayPreferencesId; idParam.Value = displayPreferencesId;
var userIdParam = cmd.Parameters.Add("@userId", DbType.Guid);
userIdParam.Value = userId;
using (var reader = await cmd.ExecuteReaderAsync(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow).ConfigureAwait(false)) using (var reader = await cmd.ExecuteReaderAsync(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow).ConfigureAwait(false))
{ {
if (reader.Read()) if (reader.Read())

@ -91,7 +91,7 @@ namespace MediaBrowser.ServerApplication
var currentFolder = folder; var currentFolder = folder;
Task.Factory.StartNew(() => Task.Factory.StartNew(() =>
{ {
var prefs = ddlProfile.SelectedItem != null ? _userManager.GetDisplayPreferences((ddlProfile.SelectedItem as User).Id, currentFolder.DisplayPreferencesId).Result ?? new DisplayPreferences { SortBy = ItemSortBy.SortName } : new DisplayPreferences { SortBy = ItemSortBy.SortName }; var prefs = ddlProfile.SelectedItem != null ? _userManager.GetDisplayPreferences(currentFolder.GetDisplayPreferencesId((ddlProfile.SelectedItem as User).Id)).Result ?? new DisplayPreferences { SortBy = ItemSortBy.SortName } : new DisplayPreferences { SortBy = ItemSortBy.SortName };
var node = new TreeViewItem { Tag = currentFolder }; var node = new TreeViewItem { Tag = currentFolder };
var subChildren = currentFolder.GetChildren(CurrentUser, prefs.IndexBy); var subChildren = currentFolder.GetChildren(CurrentUser, prefs.IndexBy);
@ -144,7 +144,7 @@ namespace MediaBrowser.ServerApplication
var subFolder = item as Folder; var subFolder = item as Folder;
if (subFolder != null) if (subFolder != null)
{ {
var prefs = _userManager.GetDisplayPreferences(user.Id, subFolder.DisplayPreferencesId).Result; var prefs = _userManager.GetDisplayPreferences(subFolder.GetDisplayPreferencesId(user.Id)).Result;
AddChildren(node, OrderBy(subFolder.GetChildren(user), user, prefs.SortBy), user); AddChildren(node, OrderBy(subFolder.GetChildren(user), user, prefs.SortBy), user);
node.Header = item.Name + " (" + node.Items.Count + ")"; node.Header = item.Name + " (" + node.Items.Count + ")";
@ -201,8 +201,8 @@ namespace MediaBrowser.ServerApplication
var prefs = var prefs =
await await
_userManager.GetDisplayPreferences((ddlProfile.SelectedItem as User).Id, _userManager.GetDisplayPreferences(folder.GetDisplayPreferencesId((ddlProfile.SelectedItem as User).Id));
folder.DisplayPreferencesId);
ddlIndexBy.SelectedItem = prefs != null ddlIndexBy.SelectedItem = prefs != null
? prefs.IndexBy ?? LocalizedStrings.Instance.GetString("NoneDispPref") ? prefs.IndexBy ?? LocalizedStrings.Instance.GetString("NoneDispPref")
: LocalizedStrings.Instance.GetString("NoneDispPref"); : LocalizedStrings.Instance.GetString("NoneDispPref");
@ -360,7 +360,7 @@ namespace MediaBrowser.ServerApplication
var folder = treeItem != null var folder = treeItem != null
? treeItem.Tag as Folder ? treeItem.Tag as Folder
: null; : null;
var prefs = folder != null ? _userManager.GetDisplayPreferences(CurrentUser.Id, folder.DisplayPreferencesId).Result : new DisplayPreferences {SortBy = ItemSortBy.SortName}; var prefs = folder != null ? _userManager.GetDisplayPreferences(folder.GetDisplayPreferencesId(CurrentUser.Id)).Result : new DisplayPreferences {SortBy = ItemSortBy.SortName};
if (folder != null && prefs.IndexBy != ddlIndexBy.SelectedItem as string) if (folder != null && prefs.IndexBy != ddlIndexBy.SelectedItem as string)
{ {
//grab UI context so we can update within the below task //grab UI context so we can update within the below task
@ -401,7 +401,7 @@ namespace MediaBrowser.ServerApplication
var folder = treeItem != null var folder = treeItem != null
? treeItem.Tag as Folder ? treeItem.Tag as Folder
: null; : null;
var prefs = folder != null ? _userManager.GetDisplayPreferences(CurrentUser.Id, folder.DisplayPreferencesId).Result : new DisplayPreferences(); var prefs = folder != null ? _userManager.GetDisplayPreferences(folder.GetDisplayPreferencesId(CurrentUser.Id)).Result : new DisplayPreferences();
if (folder != null && prefs.SortBy != ddlSortBy.SelectedItem as string) if (folder != null && prefs.SortBy != ddlSortBy.SelectedItem as string)
{ {
//grab UI context so we can update within the below task //grab UI context so we can update within the below task

@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata> <metadata>
<id>MediaBrowser.Common.Internal</id> <id>MediaBrowser.Common.Internal</id>
<version>3.0.66</version> <version>3.0.67</version>
<title>MediaBrowser.Common.Internal</title> <title>MediaBrowser.Common.Internal</title>
<authors>Luke</authors> <authors>Luke</authors>
<owners>ebr,Luke,scottisafool</owners> <owners>ebr,Luke,scottisafool</owners>
@ -12,7 +12,7 @@
<description>Contains common components shared by Media Browser Theatre and Media Browser Server. Not intended for plugin developer consumption.</description> <description>Contains common components shared by Media Browser Theatre and Media Browser Server. Not intended for plugin developer consumption.</description>
<copyright>Copyright © Media Browser 2013</copyright> <copyright>Copyright © Media Browser 2013</copyright>
<dependencies> <dependencies>
<dependency id="MediaBrowser.Common" version="3.0.66" /> <dependency id="MediaBrowser.Common" version="3.0.67" />
<dependency id="NLog" version="2.0.0.2000" /> <dependency id="NLog" version="2.0.0.2000" />
<dependency id="ServiceStack.Text" version="3.9.38" /> <dependency id="ServiceStack.Text" version="3.9.38" />
<dependency id="protobuf-net" version="2.0.0.621" /> <dependency id="protobuf-net" version="2.0.0.621" />

@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata> <metadata>
<id>MediaBrowser.Common</id> <id>MediaBrowser.Common</id>
<version>3.0.66</version> <version>3.0.67</version>
<title>MediaBrowser.Common</title> <title>MediaBrowser.Common</title>
<authors>Media Browser Team</authors> <authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners> <owners>ebr,Luke,scottisafool</owners>

@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata> <metadata>
<id>MediaBrowser.Server.Core</id> <id>MediaBrowser.Server.Core</id>
<version>3.0.66</version> <version>3.0.67</version>
<title>Media Browser.Server.Core</title> <title>Media Browser.Server.Core</title>
<authors>Media Browser Team</authors> <authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners> <owners>ebr,Luke,scottisafool</owners>
@ -12,7 +12,7 @@
<description>Contains core components required to build plugins for Media Browser Server.</description> <description>Contains core components required to build plugins for Media Browser Server.</description>
<copyright>Copyright © Media Browser 2013</copyright> <copyright>Copyright © Media Browser 2013</copyright>
<dependencies> <dependencies>
<dependency id="MediaBrowser.Common" version="3.0.66" /> <dependency id="MediaBrowser.Common" version="3.0.67" />
</dependencies> </dependencies>
</metadata> </metadata>
<files> <files>

Loading…
Cancel
Save