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"); } }
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; } } })); }