/// <summary> /// Builds up the oauth parameters and updated the request Uri /// </summary> /// <param name="request"></param> /// <returns></returns> public HttpRequest Authenticate(HttpRequest request) { request.AddParameter("oauth_version", "1.0"); request.AddParameter("oauth_nonce", GenerateNonce()); request.AddParameter("oauth_timestamp", GenerateTimeStamp()); request.AddParameter("oauth_signature_method", SignatureMethod); request.AddParameter("oauth_consumer_key", ApiKey); if (!string.IsNullOrEmpty(UserToken)) { request.AddParameter("oauth_token", UserToken); } request.Parameters.Sort(new QueryParameterComparer()); request.AddParameter("oauth_signature", GenerateSignature(request)); //Now build the real Url var data = EncodeParameters(request); var url = string.Format("{0}?{1}", request.RequestUri, data); request.RequestUri = new Uri(url); //Does it need to do this? return request; }
/// <summary> /// A long-poll endpoint to wait for changes on an account. In conjunction with /delta, this call gives you a low-latency way to monitor an account for file changes. /// </summary> /// <param name="cursor">The value returned from the prior call to GetDelta.</param> /// <param name="cancellationToken"></param> /// <param name="timeout">An optional integer indicating a timeout, in seconds. /// The default value is 30 seconds, which is also the minimum allowed value. The maximum is 480 seconds.</param> /// <returns></returns> public async Task<LongpollDeltaResult> GetLongpollDelta(string cursor, CancellationToken cancellationToken, int timeout = 30) { var requestUrl = MakeRequestString("1/longpoll_delta", ApiType.Notify); var request = new HttpRequest(HttpMethod.Get, requestUrl); request.AddParameter("cursor", cursor); if (timeout < 30) timeout = 30; if (timeout > 480) timeout = 480; request.AddParameter("timeout", timeout); return await SendAsync<LongpollDeltaResult>(request, cancellationToken); }
/// <summary> /// Gets the deltas for a user's folders and files. /// </summary> /// <param name="cursor">The value returned from the prior call to GetDelta or an empty string</param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task<DeltaPage> GetDelta(string cursor, CancellationToken cancellationToken) { var requestUrl = MakeRequestString("1/delta", ApiType.Base); var request = new HttpRequest(HttpMethod.Post, requestUrl); request.AddParameter("cursor", cursor); var deltaResponse = await SendAsync<DeltaPageInternal>(request, cancellationToken); var deltaPage = new DeltaPage { Cursor = deltaResponse.Cursor, Has_More = deltaResponse.Has_More, Reset = deltaResponse.Reset, Entries = new List<DeltaEntry>() }; foreach (var stringList in deltaResponse.Entries) { deltaPage.Entries.Add(JRawListToDeltaEntry(stringList)); } return deltaPage; }
/// <summary> /// Created a new folder with the given path /// </summary> /// <param name="path"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task<Metadata> CreateFolder(string path, CancellationToken cancellationToken) { var requestUrl = MakeRequestString("1/fileops/create_folder", ApiType.Base); var request = new HttpRequest(HttpMethod.Get, requestUrl); request.AddParameter("path", path); request.AddParameter("root", Root); var response = await SendAsync<Metadata>(request, cancellationToken); return response; }
/// <summary> /// Moves a file or folder on Dropbox /// </summary> /// <param name="fromPath"></param> /// <param name="toPath"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task<Metadata> Move(string fromPath, string toPath, CancellationToken cancellationToken) { var requestUrl = MakeRequestString("1/fileops/move", ApiType.Base); var request = new HttpRequest(HttpMethod.Get, requestUrl); request.AddParameter("from_path", fromPath); request.AddParameter("to_path", toPath); request.AddParameter("root", Root); var response = await SendAsync<Metadata>(request, cancellationToken); return response; }
/// <summary> /// Gets the deltas for a user's folders and files. /// </summary> /// <param name="cursor">The value returned from the prior call to GetDelta or an empty string</param> /// <returns></returns> public async Task<DeltaPage> GetDelta(string cursor) { var requestUrl = MakeRequestString("1/delta", ApiType.Base); var request = new HttpRequest(HttpMethod.Post, requestUrl); request.AddParameter("cursor", cursor); _oauthHandler.Authenticate(request); var response = await _httpClient.SendAsync(request); //TODO - Error Handling string responseBody = await response.Content.ReadAsStringAsync(); var deltaResponse = JsonConvert.DeserializeObject<DeltaPageInternal>(responseBody); var deltaPage = new DeltaPage { Cursor = deltaResponse.Cursor, Has_More = deltaResponse.Has_More, Reset = deltaResponse.Reset, Entries = new List<DeltaEntry>() }; foreach (var stringList in deltaResponse.Entries) { deltaPage.Entries.Add(StringListToDeltaEntry(stringList)); } return deltaPage; }
private HttpRequest MakeThumbnailRequest(string path, ThumbnailSize size) { var requestUrl = MakeRequestString(string.Format("1/thumbnails/{0}/{1}", Root, path.CleanPath()), ApiType.Content); var request = new HttpRequest(HttpMethod.Get, requestUrl); request.AddParameter("size", ThumbnailSizeString(size)); _oauthHandler.Authenticate(request); return request; }
/// <summary> /// Deletes the file or folder from dropbox with the given path /// </summary> /// <param name="path">The Path of the file or folder to delete.</param> /// <returns></returns> public async Task<Metadata> Delete(string path) { var requestUrl = MakeRequestString("1/fileops/delete", ApiType.Base); var request = new HttpRequest(HttpMethod.Get, requestUrl); request.AddParameter("path", path); request.AddParameter("root", Root); var response = await SendAsync<Metadata>(request); return response; }
private HttpRequest MakeChunkedUploadCommitRequest(string path, string filename, string uploadId) { var requestUrl = MakeRequestString(string.Format("1/commit_chunked_upload/auto/{0}{2}{1}", path.CleanPath(), filename, path.CleanPath().Length > 0 ? "/" : ""), ApiType.Content); var request = new HttpRequest(HttpMethod.Post, requestUrl); request.AddParameter("upload_id", uploadId); _oauthHandler.Authenticate(request); return request; }
private HttpRequest MakeChunkedUploadPutRequest(long offset, string uploadId = null) { var requestUrl = MakeRequestString(string.Format("1/chunked_upload"), ApiType.Content); var request = new HttpRequest(HttpMethod.Put, requestUrl); if (!String.IsNullOrEmpty(uploadId)) { request.AddParameter("upload_id", uploadId); } request.AddParameter("offset", offset); _oauthHandler.Authenticate(request); return request; }
private HttpRequest MakeUploadPutRequest(string path, string filename, string parentRevision) { var requestUrl = MakeRequestString(string.Format("1/files_put/{0}/{1}/{2}", Root, path.CleanPath(), filename), ApiType.Content); var request = new HttpRequest(HttpMethod.Put, requestUrl); _oauthHandler.Authenticate(request); if (!string.IsNullOrEmpty(parentRevision)) request.AddParameter("parent_rev", parentRevision); return request; }
/// <summary> /// Copies a file or folder on Dropbox /// </summary> /// <param name="fromPath"></param> /// <param name="toPath"></param> /// <returns></returns> public async Task<MetaData> Copy(string fromPath, string toPath) { var requestUrl = MakeRequestString("1/fileops/copy", ApiType.Base); var request = new HttpRequest(HttpMethod.Get, requestUrl); request.AddParameter("from_path", fromPath); request.AddParameter("to_path", toPath); request.AddParameter("root", Root); var response = await SendAsync<MetaData>(request); return response; }