示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }