aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Sync/FolderSync
diff options
context:
space:
mode:
authorjluce50 <jeremyluce@gmail.com>2015-03-03 09:42:17 -0600
committerjluce50 <jeremyluce@gmail.com>2015-03-03 09:42:17 -0600
commit6c2e01830c7234438b879af633caaf415f560a5a (patch)
treeafd595af2f85888544f437b2a367e241ade607dc /MediaBrowser.Server.Implementations/Sync/FolderSync
parent7fd26410a9c49e84a146dfd77a2732b2330c3834 (diff)
parent2fc0686c308e74654f4f7ef9ea6cf56fb61b5ff5 (diff)
Merge pull request #1 from MediaBrowser/dev
Dev
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sync/FolderSync')
-rw-r--r--MediaBrowser.Server.Implementations/Sync/FolderSync/FolderSyncDataProvider.cs31
-rw-r--r--MediaBrowser.Server.Implementations/Sync/FolderSync/FolderSyncProvider.cs143
2 files changed, 174 insertions, 0 deletions
diff --git a/MediaBrowser.Server.Implementations/Sync/FolderSync/FolderSyncDataProvider.cs b/MediaBrowser.Server.Implementations/Sync/FolderSync/FolderSyncDataProvider.cs
new file mode 100644
index 0000000000..b9008d87e5
--- /dev/null
+++ b/MediaBrowser.Server.Implementations/Sync/FolderSync/FolderSyncDataProvider.cs
@@ -0,0 +1,31 @@
+using MediaBrowser.Controller.Sync;
+using MediaBrowser.Model.Sync;
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Server.Implementations.Sync.FolderSync
+{
+ public class FolderSyncDataProvider : ISyncDataProvider
+ {
+ public Task<List<string>> GetServerItemIds(SyncTarget target, string serverId)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task AddOrUpdate(SyncTarget target, LocalItem item)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task Delete(SyncTarget target, string id)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task<LocalItem> Get(SyncTarget target, string id)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/MediaBrowser.Server.Implementations/Sync/FolderSync/FolderSyncProvider.cs b/MediaBrowser.Server.Implementations/Sync/FolderSync/FolderSyncProvider.cs
new file mode 100644
index 0000000000..3183816c8a
--- /dev/null
+++ b/MediaBrowser.Server.Implementations/Sync/FolderSync/FolderSyncProvider.cs
@@ -0,0 +1,143 @@
+using MediaBrowser.Common.Configuration;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Sync;
+using MediaBrowser.Model.Sync;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Server.Implementations.Sync.FolderSync
+{
+ public class FolderSyncProvider : IServerSyncProvider
+ {
+ private readonly IApplicationPaths _appPaths;
+ private readonly IUserManager _userManager;
+
+ public FolderSyncProvider(IApplicationPaths appPaths, IUserManager userManager)
+ {
+ _appPaths = appPaths;
+ _userManager = userManager;
+ }
+
+ public Task SendFile(string inputFile, string path, SyncTarget target, IProgress<double> progress, CancellationToken cancellationToken)
+ {
+ return Task.Run(() => File.Copy(inputFile, path, true), cancellationToken);
+ }
+
+ public Task DeleteFile(string path, SyncTarget target, CancellationToken cancellationToken)
+ {
+ return Task.Run(() => File.Delete(path), cancellationToken);
+ }
+
+ public Task<Stream> GetFile(string path, SyncTarget target, IProgress<double> progress, CancellationToken cancellationToken)
+ {
+ return Task.FromResult((Stream)File.OpenRead(path));
+ }
+
+ public string GetFullPath(IEnumerable<string> paths, SyncTarget target)
+ {
+ var account = GetSyncAccounts()
+ .FirstOrDefault(i => string.Equals(i.Id, target.Id, StringComparison.OrdinalIgnoreCase));
+
+ if (account == null)
+ {
+ throw new ArgumentException("Invalid SyncTarget supplied.");
+ }
+
+ var list = paths.ToList();
+ list.Insert(0, account.Path);
+
+ return Path.Combine(list.ToArray());
+ }
+
+ public string GetParentDirectoryPath(string path, SyncTarget target)
+ {
+ return Path.GetDirectoryName(path);
+ }
+
+ public Task<List<DeviceFileInfo>> GetFileSystemEntries(string path, SyncTarget target)
+ {
+ List<FileInfo> files;
+
+ try
+ {
+ files = new DirectoryInfo(path).EnumerateFiles("*", SearchOption.TopDirectoryOnly).ToList();
+ }
+ catch (DirectoryNotFoundException)
+ {
+ files = new List<FileInfo>();
+ }
+
+ return Task.FromResult(files.Select(i => new DeviceFileInfo
+ {
+ Name = i.Name,
+ Path = i.FullName
+
+ }).ToList());
+ }
+
+ public ISyncDataProvider GetDataProvider()
+ {
+ // If single instances are needed, manage them here
+ return new FolderSyncDataProvider();
+ }
+
+ public string Name
+ {
+ get { return "Folder Sync"; }
+ }
+
+ public IEnumerable<SyncTarget> GetSyncTargets(string userId)
+ {
+ return GetSyncAccounts()
+ .Where(i => i.UserIds.Contains(userId, StringComparer.OrdinalIgnoreCase))
+ .Select(GetSyncTarget);
+ }
+
+ public IEnumerable<SyncTarget> GetAllSyncTargets()
+ {
+ return GetSyncAccounts().Select(GetSyncTarget);
+ }
+
+ private SyncTarget GetSyncTarget(SyncAccount account)
+ {
+ return new SyncTarget
+ {
+ Id = account.Id,
+ Name = account.Name
+ };
+ }
+
+ private IEnumerable<SyncAccount> GetSyncAccounts()
+ {
+ return new List<SyncAccount>();
+ // Dummy this up
+ return _userManager
+ .Users
+ .Select(i => new SyncAccount
+ {
+ Id = i.Id.ToString("N"),
+ UserIds = new List<string> { i.Id.ToString("N") },
+ Path = Path.Combine(_appPaths.DataPath, "foldersync", i.Id.ToString("N")),
+ Name = i.Name + "'s Folder Sync"
+ });
+ }
+
+ // An internal class to manage all configured Folder Sync accounts for differnet users
+ class SyncAccount
+ {
+ public string Id { get; set; }
+ public string Name { get; set; }
+ public string Path { get; set; }
+ public List<string> UserIds { get; set; }
+
+ public SyncAccount()
+ {
+ UserIds = new List<string>();
+ }
+ }
+ }
+}