public Stream DownloadPreview(string userId, string id, PreviewSize size, long?version)
        {
            var webRequest = CreatePreviewDocumentRequest(userId, id, size, version);

            webRequest.Timeout = PREVIEW_TIMEOUT;

            HttpWebResponse webResponse = null;

            try
            {
                webResponse = (HttpWebResponse)webRequest.GetResponse();
            }
            catch (WebException e) when((e.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.NotFound)
            {
                throw new NotFoundException(e.Message, e);
            }
            catch (WebException e) when((e.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.NotAcceptable)
            {
                throw new NotAcceptableException(e.Message, e);
            }

            if (webResponse.StatusCode != HttpStatusCode.OK)
            {
                throw new RestClientException("Cannot download preview for document '" + id + "', received status code " + webResponse.StatusCode + ".");
            }

            return(DocumentStreamUtils.WrapDownloadStream(webResponse.GetResponseStream(), streamWrapper));
        }
        public UploadDocumentResponse UploadDocument(string userId, string filename, string path, DateTime?documentDate, List <string> collectionIds, List <string> folderIds, CancellationToken cancellationToken)
        {
            RestRequest uploadRequest = CreateRestRequest(URI_RESOURCE, Method.POST, ContentType.MULTIPART_FORM_DATA);

            uploadRequest.AlwaysMultipartFormData = true;
            uploadRequest.AddParameter(GenerateFormParameter(RestApiConstants.METADATA, GenerateDocumentUploadJson(filename, path, documentDate, collectionIds, folderIds), ContentType.APPLICATION_JSON));
            DocumentStreamUtils.AddFileToUpload(uploadRequest, RestApiConstants.DOCUMENT, path, streamWrapper, cancellationToken);
            uploadRequest.Timeout          = int.MaxValue;
            uploadRequest.ReadWriteTimeout = int.MaxValue; // Cannot use Timeout.Infinite here because resthsharp only uses this if > 0

            var result = Execute <UploadDocumentResponse>(GetOAuthInfo(userId), uploadRequest);

            return(UnwrapResponse(result, new StatusCodeResponseHandler <UploadDocumentResponse>(HttpStatusCode.Created)));
        }
        public NewVersionUploadResponse UploadNewVersion(string userId, string id, string filename, string filepath, CancellationToken token)
        {
            RestRequest newVersionRequest = CreateRestRequest(URI_RESOURCE + id, Method.POST, ContentType.MULTIPART_FORM_DATA);

            newVersionRequest.AlwaysMultipartFormData = true;
            newVersionRequest.AddParameter(GenerateFormParameter("metadata", GetMetadata(filename, filepath), ContentType.APPLICATION_JSON));
            DocumentStreamUtils.AddFileToUpload(newVersionRequest, "document", filepath, streamWrapper, token);
            newVersionRequest.Timeout          = int.MaxValue;
            newVersionRequest.ReadWriteTimeout = int.MaxValue; // Cannot use Timeout.Infinite here because resthsharp only uses this if > 0

            var result = Execute <NewVersionUploadResponse>(GetOAuthInfo(userId), newVersionRequest);

            return(UnwrapResponse(result, new StatusCodeResponseHandler <NewVersionUploadResponse>(HttpStatusCode.Created)));
        }
        public Stream DownloadDocument(string userId, string id, long?version, long?range)
        {
            HttpWebRequest  webRequest  = CreateDownloadDocumentRequest(userId, id, version, range);
            HttpWebResponse webResponse = null;

            try
            {
                webResponse = (HttpWebResponse)webRequest.GetResponse();
            }
            catch (WebException e) when((e.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.RequestedRangeNotSatisfiable)
            {
                throw new RequestedRangeNotSatisfiableException("The requested range cannot be downloaded");
            }
            catch (WebException e) when((e.Response as HttpWebResponse)?.StatusCode != HttpStatusCode.OK)
            {
                ThrowRestClientException(e, e.Response as HttpWebResponse);
            }

            ValidateResponse(webResponse, userId, range);
            return(DocumentStreamUtils.WrapDownloadStream(webResponse.GetResponseStream(), streamWrapper));
        }