aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sync/SyncManager.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncManager.cs77
1 files changed, 68 insertions, 9 deletions
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
index 508fc188d..50f1030f3 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
@@ -1,4 +1,7 @@
-using MediaBrowser.Controller.Sync;
+using MediaBrowser.Common.Extensions;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Sync;
+using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Sync;
using System;
@@ -10,7 +13,7 @@ namespace MediaBrowser.Server.Implementations.Sync
{
public class SyncManager : ISyncManager
{
- private ISyncProvider[] _providers = new ISyncProvider[]{};
+ private ISyncProvider[] _providers = new ISyncProvider[] { };
public void AddParts(IEnumerable<ISyncProvider> providers)
{
@@ -22,11 +25,6 @@ namespace MediaBrowser.Server.Implementations.Sync
throw new NotImplementedException();
}
- public Task<SyncSchedule> CreateSchedule(SyncScheduleRequest request)
- {
- throw new NotImplementedException();
- }
-
public QueryResult<SyncJob> GetJobs(SyncJobQuery query)
{
throw new NotImplementedException();
@@ -57,9 +55,70 @@ namespace MediaBrowser.Server.Implementations.Sync
throw new NotImplementedException();
}
- public IEnumerable<SyncTarget> GetSyncTargets()
+ public IEnumerable<SyncTarget> GetSyncTargets(string userId)
+ {
+ return _providers
+ .SelectMany(GetSyncTargets)
+ .OrderBy(i => i.Name);
+ }
+
+ private IEnumerable<SyncTarget> GetSyncTargets(ISyncProvider provider)
+ {
+ var providerId = GetSyncProviderId(provider);
+
+ return provider.GetSyncTargets().Select(i => new SyncTarget
+ {
+ Name = i.Name,
+ Id = providerId + "-" + i.Id
+ });
+ }
+
+ private ISyncProvider GetSyncProvider(SyncTarget target)
+ {
+ var providerId = target.Id.Split(new[] { '-' }, 2).First();
+
+ return _providers.First(i => string.Equals(providerId, GetSyncProviderId(i)));
+ }
+
+ private string GetSyncProviderId(ISyncProvider provider)
+ {
+ return (provider.GetType().Name + provider.Name).GetMD5().ToString("N");
+ }
+
+ public bool SupportsSync(BaseItem item)
{
- return _providers.SelectMany(i => i.GetSyncTargets());
+ if (item.LocationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
+ if (string.Equals(item.MediaType, MediaType.Audio, StringComparison.OrdinalIgnoreCase) ||
+ string.Equals(item.MediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase))
+ {
+ if (item.RunTimeTicks.HasValue)
+ {
+ var video = item as Video;
+
+ if (video != null)
+ {
+ if (video.VideoType != VideoType.VideoFile)
+ {
+ return false;
+ }
+
+ if (video.IsMultiPart)
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
+ return false;
}
}
}