Пример #1
0
        private string GetConflictSolverParameter(ResolveFileConflictMethod conflict = ResolveFileConflictMethod.Rewrite)
        {
            switch (conflict)
            {
            case ResolveFileConflictMethod.Rewrite:
                return("rewrite");

            case ResolveFileConflictMethod.Rename:
                return("rename");

            default: throw new NotImplementedException("File conflict method not implemented");
            }
        }
Пример #2
0
        private async Task <bool> AddFileInCloud(File fileInfo, ResolveFileConflictMethod conflict = ResolveFileConflictMethod.Rewrite)
        {
            //var hasFile = fileInfo.Hash != null && fileInfo.Size.DefaultValue != 0;
            //var filePart = hasFile ? $"&hash={fileInfo.Hash}&size={fileInfo.Size.DefaultValue}" : string.Empty;
            var filePart = $"&hash={fileInfo.Hash}&size={fileInfo.Size.DefaultValue}";

            string addFileString  = $"home={Uri.EscapeDataString(fileInfo.FullPath)}&conflict={GetConflictSolverParameter(conflict)}&api=2&token={_account.AuthToken}" + filePart;
            var    addFileRequest = Encoding.UTF8.GetBytes(addFileString);

            //var url = new Uri($"{ConstSettings.CloudDomain}/api/v2/{(hasFile ? "file" : "folder")}/add");
            var url     = new Uri($"{ConstSettings.CloudDomain}/api/v2/file/add");
            var request = (HttpWebRequest)WebRequest.Create(url.OriginalString);

            request.Proxy           = _account.Proxy;
            request.CookieContainer = _account.Cookies;
            request.Method          = "POST";
            request.ContentLength   = addFileRequest.LongLength;
            request.Referer         = $"{ConstSettings.CloudDomain}/home{Uri.EscapeDataString(fileInfo.Path)}";
            request.Headers.Add("Origin", ConstSettings.CloudDomain);
            request.Host        = url.Host;
            request.ContentType = ConstSettings.DefaultRequestType;
            request.Accept      = "*/*";
            request.UserAgent   = ConstSettings.UserAgent;
            var task = Task.Factory.FromAsync(request.BeginGetRequestStream, asyncResult => request.EndGetRequestStream(asyncResult), null);

            return(await task.ContinueWith(t =>
            {
                using (var s = t.Result)
                {
                    s.Write(addFileRequest, 0, addFileRequest.Length);
                    using (var response = (HttpWebResponse)request.GetResponse())
                    {
                        if (response.StatusCode != HttpStatusCode.OK)
                        {
                            throw new Exception();
                        }

                        return true;
                    }
                }
            }));
        }