more sync movement

This commit is contained in:
Luke Pulverenti
2014-12-12 22:56:30 -05:00
parent 3fb40eb02e
commit ab3da46113
49 changed files with 1001 additions and 149 deletions

View File

@@ -15,11 +15,13 @@ namespace MediaBrowser.Controller.Collections
public Dictionary<string, string> ProviderIds { get; set; }
public List<Guid> ItemIdList { get; set; }
public List<Guid> UserIds { get; set; }
public CollectionCreationOptions()
{
ProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
ItemIdList = new List<Guid>();
UserIds = new List<Guid>();
}
}
}

View File

@@ -1,5 +1,6 @@
using MediaBrowser.Model.Devices;
using MediaBrowser.Model.Events;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Session;
using System;
using System.Collections.Generic;
@@ -58,8 +59,9 @@ namespace MediaBrowser.Controller.Devices
/// <summary>
/// Gets the devices.
/// </summary>
/// <param name="query">The query.</param>
/// <returns>IEnumerable&lt;DeviceInfo&gt;.</returns>
IEnumerable<DeviceInfo> GetDevices();
QueryResult<DeviceInfo> GetDevices(DeviceQuery query);
/// <summary>
/// Deletes the device.

View File

@@ -15,8 +15,10 @@ namespace MediaBrowser.Controller.Entities.Movies
/// <summary>
/// Class BoxSet
/// </summary>
public class BoxSet : Folder, IHasTrailers, IHasKeywords, IHasPreferredMetadataLanguage, IHasDisplayOrder, IHasLookupInfo<BoxSetInfo>, IMetadataContainer
public class BoxSet : Folder, IHasTrailers, IHasKeywords, IHasPreferredMetadataLanguage, IHasDisplayOrder, IHasLookupInfo<BoxSetInfo>, IMetadataContainer, IHasShares
{
public List<Share> Shares { get; set; }
public BoxSet()
{
RemoteTrailers = new List<MediaUrl>();
@@ -25,6 +27,7 @@ namespace MediaBrowser.Controller.Entities.Movies
DisplayOrder = ItemSortBy.PremiereDate;
Keywords = new List<string>();
Shares = new List<Share>();
}
protected override bool FilterLinkedChildrenPerUser
@@ -160,5 +163,20 @@ namespace MediaBrowser.Controller.Entities.Movies
progress.Report(100);
}
public override bool IsVisible(User user)
{
if (base.IsVisible(user))
{
var userId = user.Id.ToString("N");
return Shares.Any(i => string.Equals(userId, i.UserId, StringComparison.OrdinalIgnoreCase)) ||
// Need to support this for boxsets created prior to the creation of Shares
Shares.Count == 0;
}
return false;
}
}
}

View File

@@ -0,0 +1,15 @@
using System.Collections.Generic;
namespace MediaBrowser.Controller.Entities
{
public interface IHasShares
{
List<Share> Shares { get; set; }
}
public class Share
{
public string UserId { get; set; }
public bool CanEdit { get; set; }
}
}

View File

@@ -1,5 +1,6 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Playlists;
using System.Collections.Generic;
namespace MediaBrowser.Controller.Library
@@ -28,6 +29,13 @@ namespace MediaBrowser.Controller.Library
/// <returns>IEnumerable{Audio}.</returns>
IEnumerable<Audio> GetInstantMixFromAlbum(MusicAlbum item, User user);
/// <summary>
/// Gets the instant mix from playlist.
/// </summary>
/// <param name="item">The item.</param>
/// <param name="user">The user.</param>
/// <returns>IEnumerable&lt;Audio&gt;.</returns>
IEnumerable<Audio> GetInstantMixFromPlaylist(Playlist item, User user);
/// <summary>
/// Gets the instant mix from genre.
/// </summary>
/// <param name="genres">The genres.</param>

View File

@@ -162,6 +162,7 @@
<Compile Include="Entities\IHasAwards.cs" />
<Compile Include="Entities\Photo.cs" />
<Compile Include="Entities\PhotoAlbum.cs" />
<Compile Include="Entities\Share.cs" />
<Compile Include="Entities\UserView.cs" />
<Compile Include="Entities\UserViewBuilder.cs" />
<Compile Include="FileOrganization\IFileOrganizationService.cs" />

View File

@@ -10,12 +10,6 @@ namespace MediaBrowser.Controller.Persistence
/// </summary>
public interface IUserRepository : IRepository
{
/// <summary>
/// Opens the connection to the repository
/// </summary>
/// <returns>Task.</returns>
Task Initialize();
/// <summary>
/// Deletes the user.
/// </summary>

View File

@@ -11,10 +11,17 @@ using System.Runtime.Serialization;
namespace MediaBrowser.Controller.Playlists
{
public class Playlist : Folder
public class Playlist : Folder, IHasShares
{
public string OwnerUserId { get; set; }
public List<Share> Shares { get; set; }
public Playlist()
{
Shares = new List<Share>();
}
[IgnoreDataMember]
protected override bool FilterLinkedChildrenPerUser
{
@@ -166,7 +173,15 @@ namespace MediaBrowser.Controller.Playlists
public override bool IsVisible(User user)
{
return base.IsVisible(user) && string.Equals(user.Id.ToString("N"), OwnerUserId);
if (base.IsVisible(user))
{
var userId = user.Id.ToString("N");
return Shares.Any(i => string.Equals(userId, i.UserId, StringComparison.OrdinalIgnoreCase)) ||
string.Equals(OwnerUserId, userId, StringComparison.OrdinalIgnoreCase);
}
return false;
}
}
}

View File

@@ -819,6 +819,19 @@ namespace MediaBrowser.Controller.Providers
break;
}
case "Shares":
{
using (var subtree = reader.ReadSubtree())
{
var hasShares = item as IHasShares;
if (hasShares != null)
{
FetchFromSharesNode(subtree, hasShares);
}
}
break;
}
case "Format3D":
{
var video = item as Video;
@@ -853,6 +866,71 @@ namespace MediaBrowser.Controller.Providers
}
}
private void FetchFromSharesNode(XmlReader reader, IHasShares item)
{
reader.MoveToContent();
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
switch (reader.Name)
{
case "Share":
{
using (var subtree = reader.ReadSubtree())
{
var share = GetShareFromNode(subtree);
if (share != null)
{
item.Shares.Add(share);
}
}
break;
}
default:
reader.Skip();
break;
}
}
}
}
private Share GetShareFromNode(XmlReader reader)
{
var share = new Share();
reader.MoveToContent();
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
switch (reader.Name)
{
case "UserId":
{
share.UserId = reader.ReadElementContentAsString();
break;
}
case "CanEdit":
{
share.CanEdit = string.Equals(reader.ReadElementContentAsString(), true.ToString(), StringComparison.OrdinalIgnoreCase);
break;
}
default:
reader.Skip();
break;
}
}
}
return share;
}
private void FetchFromCountriesNode(XmlReader reader, T item)
{
reader.MoveToContent();

View File

@@ -1,4 +1,5 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Sync;
using System.Collections.Generic;
@@ -27,7 +28,7 @@ namespace MediaBrowser.Controller.Sync
/// <param name="id">The identifier.</param>
/// <returns>SyncJob.</returns>
SyncJob GetJob(string id);
/// <summary>
/// Cancels the job.
/// </summary>
@@ -51,5 +52,12 @@ namespace MediaBrowser.Controller.Sync
/// <param name="item">The item.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
bool SupportsSync(BaseItem item);
/// <summary>
/// Gets the device profile.
/// </summary>
/// <param name="targetId">The target identifier.</param>
/// <returns>DeviceProfile.</returns>
DeviceProfile GetDeviceProfile(string targetId);
}
}

View File

@@ -1,6 +1,5 @@
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Sync;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace MediaBrowser.Controller.Sync
@@ -66,8 +65,8 @@ namespace MediaBrowser.Controller.Sync
/// <summary>
/// Gets the job items.
/// </summary>
/// <param name="jobId">The job identifier.</param>
/// <param name="query">The query.</param>
/// <returns>IEnumerable&lt;SyncJobItem&gt;.</returns>
IEnumerable<SyncJobItem> GetJobItems(string jobId);
QueryResult<SyncJobItem> GetJobItems(SyncJobItemQuery query);
}
}