private SyncResult CopyFile(string srcFile, HttpClient client, SyncDirFile nodeFile) { var message = new HttpRequestMessage(); var clientFile = new FileInfo(srcFile); if (nodeFile.EqualTo(clientFile, clientFile.Directory.FullName)) { return(new SyncResult()); } var fileStream = new FileStream(clientFile.FullName, FileMode.Open, FileAccess.Read, FileShare.Read); var content = new StreamContent(fileStream); var link = nodeFile.Links.GetByRel("http://www.con-dep.net/rels/sync/file_sync_template"); var url = string.Format(link.Href, clientFile.LastWriteTimeUtc.ToFileTime(), clientFile.Attributes.ToString()); message.Method = link.HttpMethod; message.Content = content; message.RequestUri = new Uri(url); var result = client.SendAsync(message).ContinueWith(task => { if (task.Result.IsSuccessStatusCode) { var syncResult = task.Result.Content.ReadAsAsync <SyncResult>().Result; return(syncResult); } return(null); }); result.Wait(); return(result.Result); }
public SyncDirDirectory GetSubDirInfo(string rootPath, string dirUrl, string fileUrl, DirectoryInfo dirInfo) { var dir = new SyncDirDirectory() { FullPath = dirInfo.FullName, RelativePath = MakePathRelative(rootPath, dirInfo.FullName), Attributes = dirInfo.Attributes.ToString() }; var link = string.Format(dirUrl, dirInfo.FullName); if (!dirInfo.Exists) { dir.Links.Add(new Link() { Rel = ApiRels.Directory, Method = "POST", Href = string.Format("{0}", link) }); return(dir); } dir.Links.Add(new Link() { Rel = ApiRels.Self, Href = string.Format("{0}", link), Method = "GET" }); dir.Links.Add(new Link() { Rel = ApiRels.Directory, Method = "PUT", Href = string.Format("{0}", link) }); foreach (var childDir in dirInfo.EnumerateDirectories()) { dir.Directories.Add(GetSubDirInfo(rootPath, dirUrl, fileUrl, childDir)); } foreach (var childFile in dirInfo.EnumerateFiles()) { //var secDescriptor = childFile.GetAccessControl().GetSecurityDescriptorSddlForm(AccessControlSections.); var file = new SyncDirFile() { FullPath = childFile.FullName, RelativePath = MakePathRelative(rootPath, childFile.FullName), Attributes = childFile.Attributes.ToString(), LastWriteTimeUtc = childFile.LastWriteTimeUtc, Size = childFile.Length, }; var fileLink = string.Format(fileUrl, childFile.FullName); file.Links.Add(new Link { Href = string.Format("{0}", fileLink), Rel = ApiRels.Self, Method = "GET" }); file.Links.Add(new Link { Href = string.Format("{0}", fileLink), Rel = ApiRels.File, Method = "PUT" }); file.Links.Add(new Link { Href = string.Format("{0}", link), Rel = ApiRels.Directory, Method = "PUT" }); dir.Files.Add(file); } return(dir); }
public SyncDirFile GetFileInfo(string rootPath, string fileUrl, string dirUrl, FileInfo fileInfo) { var link = string.Format(fileUrl, fileInfo.FullName); var file = new SyncDirFile() { FullPath = fileInfo.FullName, RelativePath = fileInfo.Name, Attributes = fileInfo.Attributes.ToString() }; if (!fileInfo.Exists) { file.Links.Add(new Link() { Rel = ApiRels.FileSyncTemplate, Method = "POST", Href = string.Format("{0}{1}", link, "&lastWriteTimeUtc={0}&fileAttributes={1}") }); return(file); } var dirLink = string.Format(dirUrl, fileInfo.Directory.FullName); file.LastWriteTimeUtc = fileInfo.LastWriteTimeUtc; file.Size = fileInfo.Length; file.Links.Add(new Link() { Rel = ApiRels.Self, Href = string.Format("{0}", link), Method = "GET" }); file.Links.Add(new Link() { Rel = ApiRels.FileSyncTemplate, Method = "PUT", Href = string.Format("{0}{1}", link, "&lastWriteTimeUtc={0}&fileAttributes={1}") }); file.Links.Add(new Link() { Rel = "http://www.con-dep.net/rels/sync/directory", Method = "PUT", Href = string.Format("{0}", dirLink) }); return(file); }