From 2d0f9f8a32baf4238e33c95adcba3621dd1a4716 Mon Sep 17 00:00:00 2001 From: Ewan Mellor Date: Mon, 31 Dec 2012 18:13:34 -0800 Subject: [PATCH 01/65] Added null checks for ModifiedDate and UTCDateModified. --- DropNet/Models/MetaData.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/DropNet/Models/MetaData.cs b/DropNet/Models/MetaData.cs index 2893232..a8e2263 100644 --- a/DropNet/Models/MetaData.cs +++ b/DropNet/Models/MetaData.cs @@ -24,7 +24,7 @@ public DateTime ModifiedDate get { //cast to datetime and return - return DateTime.Parse(Modified); //RFC1123 format date codes are returned by API + return Modified == null ? DateTime.MinValue : DateTime.Parse(Modified); //RFC1123 format date codes are returned by API } } @@ -33,6 +33,8 @@ public DateTime UTCDateModified get { string str = Modified; + if (str == null) + return DateTime.MinValue; if (str.EndsWith(" +0000")) str = str.Substring(0, str.Length - 6); if (!str.EndsWith(" UTC")) str += " UTC"; return DateTime.ParseExact(str, "ddd, d MMM yyyy HH:mm:ss UTC", System.Globalization.CultureInfo.InvariantCulture); From 07b83e933920f5c9874eab53cb29f11345215be3 Mon Sep 17 00:00:00 2001 From: Ewan Mellor Date: Wed, 27 Feb 2013 21:59:10 -0800 Subject: [PATCH 02/65] Escape the URL parameters in BuildAuthorizeUrl. In particular this means that the callback URL passed in to this function and DropNetClient.GetTokenAndBuildUrl will be correctly escaped. --- DropNet/Client/Client.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DropNet/Client/Client.cs b/DropNet/Client/Client.cs index 2163ef3..7f73507 100644 --- a/DropNet/Client/Client.cs +++ b/DropNet/Client/Client.cs @@ -125,8 +125,8 @@ public string BuildAuthorizeUrl(UserLogin userLogin, string callback = null) } //Go 1-Liner! - return string.Format("https://www.dropbox.com/1/oauth/authorize?oauth_token={0}{1}", userLogin.Token, - (string.IsNullOrEmpty(callback) ? string.Empty : "&oauth_callback=" + callback)); + return string.Format("https://www.dropbox.com/1/oauth/authorize?oauth_token={0}{1}", userLogin.Token.UrlEncode(), + (string.IsNullOrEmpty(callback) ? string.Empty : "&oauth_callback=" + callback.UrlEncode())); } #if !WINDOWS_PHONE && !WINRT From 099c7638b074d6676ff1dcfb46cde02710efaeca Mon Sep 17 00:00:00 2001 From: David De Sloovere Date: Mon, 4 Mar 2013 14:27:27 +0100 Subject: [PATCH 03/65] Fix typo in readme.markdown Endore -> Endorse --- README.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.markdown b/README.markdown index 9adf35d..c7f8990 100644 --- a/README.markdown +++ b/README.markdown @@ -76,6 +76,6 @@ Want to chat about DropNet? http://jabbr.net/#/rooms/DropNet *** - **Like DropNet?** Endore me on Coderwall + **Like DropNet?** Endorse me on Coderwall - [![endorse](http://api.coderwall.com/dkarzon/endorsecount.png)](http://coderwall.com/dkarzon) \ No newline at end of file + [![endorse](http://api.coderwall.com/dkarzon/endorsecount.png)](http://coderwall.com/dkarzon) From ede43a0672d6fa06a90dae26083a410186af6f4c Mon Sep 17 00:00:00 2001 From: Ewan Mellor Date: Mon, 4 Mar 2013 11:33:51 -0800 Subject: [PATCH 04/65] Implement GET //copy_ref//. This adds GetCopyRef, GetCopyRefAsync, and GetCopyRefTask to DropNetClient. It includes a new CopyRefResponse class. --- DropNet/Client/Files.Async.cs | 17 +++++++++++++++++ DropNet/Client/Files.Sync.cs | 18 ++++++++++++++++++ DropNet/Client/Files.Task.cs | 9 +++++++++ DropNet/DropNet.csproj | 1 + DropNet/Helpers/RequestHelper.cs | 11 +++++++++++ DropNet/Models/CopyRefResponse.cs | 14 ++++++++++++++ 6 files changed, 70 insertions(+) create mode 100644 DropNet/Models/CopyRefResponse.cs diff --git a/DropNet/Client/Files.Async.cs b/DropNet/Client/Files.Async.cs index 0b15d1e..f9d01bc 100644 --- a/DropNet/Client/Files.Async.cs +++ b/DropNet/Client/Files.Async.cs @@ -332,5 +332,22 @@ public void GetThumbnailAsync(string path, ThumbnailSize size, Action su failure); } + /// + /// Creates and returns a copy_ref to a file. + /// + /// This reference string can be used to copy that file to another user's Dropbox by passing it in as the from_copy_ref parameter on /fileops/copy. + /// + /// The path + /// Success callback + /// Failure callback + public void GetCopyRefAsync(string path, Action success, Action failure) + { + if (!path.StartsWith("/")) path = "/" + path; + + var request = _requestHelper.CreateCopyRefRequest(path, Root); + + ExecuteAsync(ApiType.Base, request, success, failure); + } + } } diff --git a/DropNet/Client/Files.Sync.cs b/DropNet/Client/Files.Sync.cs index 3f795b9..eb24a2d 100644 --- a/DropNet/Client/Files.Sync.cs +++ b/DropNet/Client/Files.Sync.cs @@ -357,6 +357,24 @@ public byte[] GetThumbnail(string path, ThumbnailSize size) return response.RawBytes; } + /// + /// Creates and returns a copy_ref to a file. + /// + /// This reference string can be used to copy that file to another user's Dropbox by passing it in as the from_copy_ref parameter on /fileops/copy. + /// + /// + /// + public CopyRefResponse GetCopyRef(string path) + { + if (!path.StartsWith("/")) + { + path = "/" + path; + } + var request = _requestHelper.CreateCopyRefRequest(path, Root); + + return Execute(ApiType.Base, request); + } + /// /// Gets the deltas for a user's folders and files. /// diff --git a/DropNet/Client/Files.Task.cs b/DropNet/Client/Files.Task.cs index 928710d..2f92e3b 100644 --- a/DropNet/Client/Files.Task.cs +++ b/DropNet/Client/Files.Task.cs @@ -153,5 +153,14 @@ public Task GetThumbnailTask(string path, ThumbnailSize size) return ExecuteTask(ApiType.Content, request); } + public Task GetCopyRefTask(string path) + { + if (!path.StartsWith("/")) path = "/" + path; + + var request = _requestHelper.CreateCopyRefRequest(path, Root); + + return ExecuteTask(ApiType.Base, request); + } + } } diff --git a/DropNet/DropNet.csproj b/DropNet/DropNet.csproj index f18f0d5..c44d235 100644 --- a/DropNet/DropNet.csproj +++ b/DropNet/DropNet.csproj @@ -77,6 +77,7 @@ + diff --git a/DropNet/Helpers/RequestHelper.cs b/DropNet/Helpers/RequestHelper.cs index 24054ac..9315fdf 100644 --- a/DropNet/Helpers/RequestHelper.cs +++ b/DropNet/Helpers/RequestHelper.cs @@ -62,6 +62,17 @@ public RestRequest CreateMediaRequest(string path, string root) return request; } + public RestRequest CreateCopyRefRequest(string path, string root) + { + var request = new RestRequest(Method.GET); + request.Resource = "{version}/copy_ref/{root}{path}"; + request.AddParameter("version", _version, ParameterType.UrlSegment); + request.AddParameter("path", path, ParameterType.UrlSegment); + request.AddParameter("root", root, ParameterType.UrlSegment); + + return request; + } + public RestRequest CreateGetFileRequest(string path, string root) { var request = new RestRequest(Method.GET); diff --git a/DropNet/Models/CopyRefResponse.cs b/DropNet/Models/CopyRefResponse.cs new file mode 100644 index 0000000..bab5afc --- /dev/null +++ b/DropNet/Models/CopyRefResponse.cs @@ -0,0 +1,14 @@ +using System; + +namespace DropNet.Models +{ + public class CopyRefResponse + { + public string Copy_Ref { get; set; } + public string Expires { get; set; } + public DateTime ExpiresDate + { + get { return DateTime.Parse(Expires); } + } + } +} From 5ba2918639797cd119ed3432a83a2b769d00cb1b Mon Sep 17 00:00:00 2001 From: Ewan Mellor Date: Mon, 4 Mar 2013 12:09:58 -0800 Subject: [PATCH 05/65] Implement POST //fileops/copy using from_copy_ref. This adds CopyFromCopyRef, CopyFromCopyRefAsync, and CopyFromCopyRefTask to DropNetClient. --- DropNet/Client/Files.Async.cs | 16 ++++++++++++++++ DropNet/Client/Files.Sync.cs | 17 +++++++++++++++++ DropNet/Client/Files.Task.cs | 9 +++++++++ DropNet/Helpers/RequestHelper.cs | 13 +++++++++++++ 4 files changed, 55 insertions(+) diff --git a/DropNet/Client/Files.Async.cs b/DropNet/Client/Files.Async.cs index 0b15d1e..e5eff13 100644 --- a/DropNet/Client/Files.Async.cs +++ b/DropNet/Client/Files.Async.cs @@ -198,6 +198,22 @@ public void CopyAsync(string fromPath, string toPath, Action succ ExecuteAsync(ApiType.Base, request, success, failure); } + /// + /// Copies a file or folder on Dropbox using a copy_ref as the source. + /// + /// Specifies a copy_ref generated from a previous /copy_ref call + /// The path to where the file or folder is getting copied + /// Success callback + /// Failure callback + public void CopyFromCopyRefAsync(string fromCopyRef, string toPath, Action success, Action failure) + { + if (!toPath.StartsWith("/")) toPath = "/" + toPath; + + var request = _requestHelper.CreateCopyFileFromCopyRefRequest(fromCopyRef, toPath, Root); + + ExecuteAsync(ApiType.Base, request, success, failure); + } + /// /// Moves a file or folder on Dropbox /// diff --git a/DropNet/Client/Files.Sync.cs b/DropNet/Client/Files.Sync.cs index 3f795b9..8df61d9 100644 --- a/DropNet/Client/Files.Sync.cs +++ b/DropNet/Client/Files.Sync.cs @@ -234,6 +234,23 @@ public MetaData Copy(string fromPath, string toPath) return Execute(ApiType.Base, request); } + /// + /// Copies a file or folder on Dropbox using a copy_ref as the source. + /// + /// Specifies a copy_ref generated from a previous /copy_ref call + /// The path to where the file or folder is getting copied + /// True on success + public MetaData CopyFromCopyRef(string fromCopyRef, string toPath) + { + if (!toPath.StartsWith("/")) + { + toPath = "/" + toPath; + } + var request = _requestHelper.CreateCopyFileFromCopyRefRequest(fromCopyRef, toPath, Root); + + return Execute(ApiType.Base, request); + } + /// /// Moves a file or folder on Dropbox /// diff --git a/DropNet/Client/Files.Task.cs b/DropNet/Client/Files.Task.cs index 928710d..eb4697e 100644 --- a/DropNet/Client/Files.Task.cs +++ b/DropNet/Client/Files.Task.cs @@ -92,6 +92,15 @@ public Task CopyTask(string fromPath, string toPath) return ExecuteTask(ApiType.Base, request); } + public Task CopyFromCopyRefTask(string fromCopyRef, string toPath) + { + if (!toPath.StartsWith("/")) toPath = "/" + toPath; + + var request = _requestHelper.CreateCopyFileFromCopyRefRequest(fromCopyRef, toPath, Root); + + return ExecuteTask(ApiType.Base, request); + } + public Task MoveTask(string fromPath, string toPath) { if (!fromPath.StartsWith("/")) fromPath = "/" + fromPath; diff --git a/DropNet/Helpers/RequestHelper.cs b/DropNet/Helpers/RequestHelper.cs index 24054ac..35036d7 100644 --- a/DropNet/Helpers/RequestHelper.cs +++ b/DropNet/Helpers/RequestHelper.cs @@ -165,6 +165,19 @@ public RestRequest CreateCopyFileRequest(string fromPath, string toPath, string return request; } + public RestRequest CreateCopyFileFromCopyRefRequest(string fromCopyRef, string toPath, string root) + { + var request = new RestRequest(Method.GET); + request.Resource = "{version}/fileops/copy"; + request.AddParameter("version", _version, ParameterType.UrlSegment); + + request.AddParameter("from_copy_ref", fromCopyRef); + request.AddParameter("to_path", toPath); + request.AddParameter("root", root); + + return request; + } + public RestRequest CreateMoveFileRequest(string fromPath, string toPath, string root) { var request = new RestRequest(Method.GET); From ef621a60dbdb6af883d487105c05966b22010c37 Mon Sep 17 00:00:00 2001 From: zeroid Date: Wed, 17 Apr 2013 14:51:36 -0600 Subject: [PATCH 06/65] Update Client.cs Added optional proxy parameter to constructors. --- DropNet/Client/Client.cs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/DropNet/Client/Client.cs b/DropNet/Client/Client.cs index 7f73507..31b34a8 100644 --- a/DropNet/Client/Client.cs +++ b/DropNet/Client/Client.cs @@ -45,7 +45,9 @@ public UserLogin UserLogin private RestClient _restClient; private RestClient _restClientContent; - private RequestHelper _requestHelper; + private RequestHelper _requestHelper; + + private IWebProxy _proxy; /// /// Gets the directory root for the requests (full or sandbox mode) @@ -60,11 +62,14 @@ string Root /// /// The Api Key to use for the Dropbox Requests /// The Api Secret to use for the Dropbox Requests - public DropNetClient(string apiKey, string appSecret) + /// The proxy to use for web requests + public DropNetClient(string apiKey, string appSecret, IWebProxy proxy = null) { _apiKey = apiKey; _appsecret = appSecret; + _proxy = proxy; + LoadClient(); } @@ -75,11 +80,14 @@ public DropNetClient(string apiKey, string appSecret) /// The Api Secret to use for the Dropbox Requests /// The User authentication token /// The Users matching secret - public DropNetClient(string apiKey, string appSecret, string userToken, string userSecret) + /// The proxy to use for web requests + public DropNetClient(string apiKey, string appSecret, string userToken, string userSecret, IWebProxy proxy = null) { _apiKey = apiKey; _appsecret = appSecret; + _proxy = proxy; + LoadClient(); UserLogin = new UserLogin { Token = userToken, Secret = userSecret }; @@ -88,6 +96,9 @@ public DropNetClient(string apiKey, string appSecret, string userToken, string u private void LoadClient() { _restClient = new RestClient(ApiBaseUrl); + + _restClient.Proxy = _proxy; + _restClient.ClearHandlers(); _restClient.AddHandler("*", new JsonDeserializer()); From d350d7a84b293aafdd1bb93d0ae1c7177dca3972 Mon Sep 17 00:00:00 2001 From: Damian Karzon Date: Fri, 26 Apr 2013 18:39:35 +1000 Subject: [PATCH 07/65] v1.9.4 - Merged in Proxy support (and fixed WP/WinRT builds) --- DropNet.WinRT/DropNet.WinRT.csproj | 6 +++- .../DropNet.WindowsPhone.csproj | 3 ++ DropNet/Client/Client.cs | 34 +++++++++---------- dropnet.nuspec | 2 +- 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/DropNet.WinRT/DropNet.WinRT.csproj b/DropNet.WinRT/DropNet.WinRT.csproj index 24cfe61..ed3d554 100644 --- a/DropNet.WinRT/DropNet.WinRT.csproj +++ b/DropNet.WinRT/DropNet.WinRT.csproj @@ -29,9 +29,10 @@ pdbonly true bin\Release\ - TRACE;NETFX_CORE + TRACE;NETFX_CORE;WINRT prompt 4 + x86 true @@ -127,6 +128,9 @@ Models\AccountInfo.cs + + Models\CopyRefResponse.cs + Models\DeltaPage.cs diff --git a/DropNet.WindowsPhone/DropNet.WindowsPhone.csproj b/DropNet.WindowsPhone/DropNet.WindowsPhone.csproj index 80615fd..06d7a2e 100644 --- a/DropNet.WindowsPhone/DropNet.WindowsPhone.csproj +++ b/DropNet.WindowsPhone/DropNet.WindowsPhone.csproj @@ -80,6 +80,9 @@ Models\AccountInfo.cs + + Models\CopyRefResponse.cs + Models\DeltaPage.cs diff --git a/DropNet/Client/Client.cs b/DropNet/Client/Client.cs index 31b34a8..126651d 100644 --- a/DropNet/Client/Client.cs +++ b/DropNet/Client/Client.cs @@ -31,7 +31,7 @@ public UserLogin UserLogin SetAuthProviders(); } } - + /// /// To use Dropbox API in sandbox mode (app folder access) set to true /// @@ -45,9 +45,11 @@ public UserLogin UserLogin private RestClient _restClient; private RestClient _restClientContent; - private RequestHelper _requestHelper; - - private IWebProxy _proxy; + private RequestHelper _requestHelper; + +#if !WINDOWS_PHONE && !WINRT + public IWebProxy Proxy { get; set; } +#endif /// /// Gets the directory root for the requests (full or sandbox mode) @@ -56,20 +58,18 @@ string Root { get { return UseSandbox ? SandboxRoot : DropboxRoot; } } - + /// /// Default Constructor for the DropboxClient /// /// The Api Key to use for the Dropbox Requests /// The Api Secret to use for the Dropbox Requests /// The proxy to use for web requests - public DropNetClient(string apiKey, string appSecret, IWebProxy proxy = null) + public DropNetClient(string apiKey, string appSecret) { _apiKey = apiKey; _appsecret = appSecret; - _proxy = proxy; - LoadClient(); } @@ -81,13 +81,11 @@ public DropNetClient(string apiKey, string appSecret, IWebProxy proxy = null) /// The User authentication token /// The Users matching secret /// The proxy to use for web requests - public DropNetClient(string apiKey, string appSecret, string userToken, string userSecret, IWebProxy proxy = null) + public DropNetClient(string apiKey, string appSecret, string userToken, string userSecret) { _apiKey = apiKey; _appsecret = appSecret; - _proxy = proxy; - LoadClient(); UserLogin = new UserLogin { Token = userToken, Secret = userSecret }; @@ -96,9 +94,11 @@ public DropNetClient(string apiKey, string appSecret, string userToken, string u private void LoadClient() { _restClient = new RestClient(ApiBaseUrl); - - _restClient.Proxy = _proxy; - + +#if !WINDOWS_PHONE && !WINRT + _restClient.Proxy = Proxy; +#endif + _restClient.ClearHandlers(); _restClient.AddHandler("*", new JsonDeserializer()); @@ -182,7 +182,7 @@ private IRestResponse Execute(ApiType apiType, IRestRequest request) { response = _restClientContent.Execute(request); - if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.PartialContent) + if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.PartialContent) { throw new DropboxException(response); } @@ -224,7 +224,7 @@ private void ExecuteAsync(ApiType apiType, IRestRequest request, Action { - if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.PartialContent) + if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.PartialContent) { failure(new DropboxException(response)); } @@ -268,7 +268,7 @@ private void ExecuteAsync(ApiType apiType, IRestRequest request, Action(request, (response, asynchandle) => { - if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.PartialContent) + if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.PartialContent) { failure(new DropboxException(response)); } diff --git a/dropnet.nuspec b/dropnet.nuspec index 952cce8..411780c 100644 --- a/dropnet.nuspec +++ b/dropnet.nuspec @@ -2,7 +2,7 @@ DropNet - 2.0 + 1.9.4 Damian Karzon, Github Contributors Damian Karzon .NET Client for the Dropbox API (.NET 3.5 and Windows Phone) From 8ad2fc4c3652760924f3755ec6541be3c5b1412c Mon Sep 17 00:00:00 2001 From: derigel Date: Fri, 24 May 2013 12:53:07 +0400 Subject: [PATCH 08/65] RestSharp dependency as nuget package --- DropNet.Tests/DropNet.Tests.csproj | 4 +- DropNet.Tests/packages.config | 4 + .../DropNet.WindowsPhone.csproj | 3 +- DropNet.WindowsPhone/packages.config | 4 + DropNet/DropNet.csproj | 233 +- DropNet/packages.config | 4 + Lib/net35/RestSharp.dll | Bin 160256 -> 0 bytes Lib/sl4-wp71/RestSharp.WindowsPhone.dll | Bin 178176 -> 0 bytes dropnet.nuspec | 7 +- .../RestSharp.104.1/RestSharp.104.1.nupkg | Bin 0 -> 605731 bytes .../RestSharp.104.1/RestSharp.104.1.nuspec | 19 + .../lib/net35-client/RestSharp.dll | Bin 0 -> 146944 bytes .../lib/net35-client/RestSharp.xml | 2611 +++++++++ .../RestSharp.104.1/lib/net35/RestSharp.dll | Bin 0 -> 146944 bytes .../RestSharp.104.1/lib/net35/RestSharp.xml | 2611 +++++++++ .../lib/net4-client/RestSharp.dll | Bin 0 -> 150016 bytes .../lib/net4-client/RestSharp.xml | 2680 +++++++++ .../RestSharp.104.1/lib/net4/RestSharp.dll | Bin 0 -> 150016 bytes .../RestSharp.104.1/lib/net4/RestSharp.xml | 2680 +++++++++ .../lib/sl4-wp71/RestSharp.WindowsPhone.dll | Bin 0 -> 165376 bytes .../lib/sl4-wp71/RestSharp.WindowsPhone.xml | 3494 ++++++++++++ .../lib/sl4/RestSharp.Silverlight.dll | Bin 0 -> 124928 bytes .../lib/sl4/RestSharp.Silverlight.xml | 4897 ++++++++--------- packages/RestSharp.104.1/readme.txt | 19 + packages/repositories.config | 8 +- 25 files changed, 16686 insertions(+), 2592 deletions(-) create mode 100644 DropNet.Tests/packages.config create mode 100644 DropNet.WindowsPhone/packages.config create mode 100644 DropNet/packages.config delete mode 100644 Lib/net35/RestSharp.dll delete mode 100644 Lib/sl4-wp71/RestSharp.WindowsPhone.dll create mode 100644 packages/RestSharp.104.1/RestSharp.104.1.nupkg create mode 100644 packages/RestSharp.104.1/RestSharp.104.1.nuspec create mode 100644 packages/RestSharp.104.1/lib/net35-client/RestSharp.dll create mode 100644 packages/RestSharp.104.1/lib/net35-client/RestSharp.xml create mode 100644 packages/RestSharp.104.1/lib/net35/RestSharp.dll create mode 100644 packages/RestSharp.104.1/lib/net35/RestSharp.xml create mode 100644 packages/RestSharp.104.1/lib/net4-client/RestSharp.dll create mode 100644 packages/RestSharp.104.1/lib/net4-client/RestSharp.xml create mode 100644 packages/RestSharp.104.1/lib/net4/RestSharp.dll create mode 100644 packages/RestSharp.104.1/lib/net4/RestSharp.xml create mode 100644 packages/RestSharp.104.1/lib/sl4-wp71/RestSharp.WindowsPhone.dll create mode 100644 packages/RestSharp.104.1/lib/sl4-wp71/RestSharp.WindowsPhone.xml create mode 100644 packages/RestSharp.104.1/lib/sl4/RestSharp.Silverlight.dll rename Lib/net35/RestSharp.xml => packages/RestSharp.104.1/lib/sl4/RestSharp.Silverlight.xml (91%) create mode 100644 packages/RestSharp.104.1/readme.txt diff --git a/DropNet.Tests/DropNet.Tests.csproj b/DropNet.Tests/DropNet.Tests.csproj index b768e33..cca1de4 100644 --- a/DropNet.Tests/DropNet.Tests.csproj +++ b/DropNet.Tests/DropNet.Tests.csproj @@ -14,6 +14,7 @@ v4.0 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + true @@ -41,7 +42,7 @@ ..\Lib\Ploeh.AutoFixture.dll - ..\Lib\net35\RestSharp.dll + ..\packages\RestSharp.104.1\lib\net4\RestSharp.dll @@ -76,6 +77,7 @@ + + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {E9580EFC-6014-4D3B-82A8-5F6D57213CE4} + Library + Properties + DropNet + DropNet + 512 + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + True + full + False + bin\Debug\ + TRACE;DEBUG;FRAMEWORK + prompt + 4 + + + pdbonly + True + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\RestSharp.104.1\lib\net4\RestSharp.dll + + + + + + + + + + + + + Code + + + + + + + + + + + + + + + + + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + + + + + \ No newline at end of file diff --git a/DropNet/packages.config b/DropNet/packages.config new file mode 100644 index 0000000..6b04fa8 --- /dev/null +++ b/DropNet/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Lib/net35/RestSharp.dll b/Lib/net35/RestSharp.dll deleted file mode 100644 index 2b6e047dff8b0cd7fa5224b3b19ba8bf500d42bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160256 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�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

P0nvu8+i>_Ltlk8?A7?& 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 b!<1#X4}bMSJbazIG5hdE{-5)I2Lk^F^|sWV diff --git a/Lib/sl4-wp71/RestSharp.WindowsPhone.dll b/Lib/sl4-wp71/RestSharp.WindowsPhone.dll deleted file mode 100644 index 71445263d50a92c4f90040a53f253586a848dc40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178176 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

  • nUfzu+xqVGciT^maC(K2__!9%psEeMXt3u#7`r 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

    uy7UfWq3OB0q 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 RY|fqInbyDh`Tvgs{|l03@J;{# diff --git a/dropnet.nuspec b/dropnet.nuspec index 411780c..37d6fec 100644 --- a/dropnet.nuspec +++ b/dropnet.nuspec @@ -2,7 +2,7 @@ DropNet - 1.9.4 + 1.9.4.1 Damian Karzon, Github Contributors Damian Karzon .NET Client for the Dropbox API (.NET 3.5 and Windows Phone) @@ -11,11 +11,12 @@ https://github.com/dkarzon/DropNet/blob/master/LICENSE.txt http://dkdevelopment.net/img/DropNetIcon.png DROPBOX API .NET WP7 + + + - - diff --git a/packages/RestSharp.104.1/RestSharp.104.1.nupkg b/packages/RestSharp.104.1/RestSharp.104.1.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..c9822a350075d25d1bc14751851bb2983fef1d2e GIT binary patch literal 605731 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%0Aks!h#a!->Nd#u35|j8v-}3P>`L!s* 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

  • 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 z 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

    U55ZH*eETH6@ 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

    + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authoriztion header value as "OAuth accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + Converts a string to camel case + + String to convert + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + HttpWebRequest wrapper (sync methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (async methods) + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute an async POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + URL to call for this request + + + + + Proxy info to be sent with request + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + + + + + + + + + + + + + + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + X509CertificateCollection to be sent with request + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = "http://example.com"; + + + + + Proxy to use for requests made by this client instance. + Passed on to underying WebRequest if set. + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + diff --git a/packages/RestSharp.104.1/lib/net35/RestSharp.dll b/packages/RestSharp.104.1/lib/net35/RestSharp.dll new file mode 100644 index 0000000000000000000000000000000000000000..66e381771de20f8c5dd8c6db91e0ed09eb074cbf GIT binary patch literal 146944 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�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�LDRKE-eBAt#N1D-Eem%4D4Pa?*IXN;berxkBUFL=_C{46jV#ufovG z|2kZmQegAv3LRnyQbJ`vUTOB6U*7LnM#tFUdc!t09^{tEgGv zKtn9Yhp4cw;{tLF@qDqOw7|y=O?ex*mWQ?>flnI}`KU)FO$sb9wBQ!XuaM=Yr3SX- z%@pOQ4Ge6>%@nVY-RpI;TR?LZ ziTX&d{4U-eB1f7Bi54+y{S6TEjtt3?>VIHp&rO3c_d?da{x;r$k0M&ch5&WsTNRD2 zzt@n=;|F8NMQjS#I`iFd?GR}eP%57fR|}C=0CnMQ;7&lKlKO`XUHK?Q@7F(O=*IK2 zrEO3B&kQ}eH3tdKW$N$Od-0PKkz}cR@h^y$LJrpry?Bk2w!yt44;0~fRc~&7TBc$N zx@+je!xhcpIvLobPLoVN{2+s|l;0K&! zH0JR!Q)I}_a5nf9U*e=r@IK+4ibmJ3;N$rrC$)nQb^Yw57RIM}z*LzEw%9Ygp`tE9 z+xTRjtY~0R1)su~D#8|<%GWsQx?vjMrwCj6Iex@R*A36}TZ*uU6!0Gv&GG7Ke1VH; zGWR)NeT*~sM50A-)|zRY#k1fxRT!_?Q$e|GF8`QFw)9+nl4vQL6qI9}%jd)Wq;$3$ zG{*QMKk1|wjPv;~ib{iCGrr2bo|hpv11;oXigp7n;ms5s1X|8h6rBKC$@?if2egKd zRCE=nm`_wx8uWp&gwIm68R#v(RMBprxA|L&4g$T)cPKgmw2>cHbPi|>Kda~}&Q{Ab1qDgXg{=OZFVtzT?Y@3fWSy z-QvD8&{oJwgX_E9;e4hHxh;4l|AD(J+7le^YXykcZuLCuN3o zcA>nGo^HZvn-($xZku<+!}Cpplkj}Aj^>AKf!Aj{LM{&(??NRZ+l8Ccwj(6LP)EL@ zz1>VsTU_V>7fKJ!ax*(^!$SYzLSsV5xZ%5x@K<4(8amm9UJ9MzLW@IRcA=tBm}fcT zZ48BZmXpfB=HaBz!B$7NLYKLDI&D9OuBs!$)u6R*7KhDH3gqRagFxO+Iss&L(qPjoqQdsO z1Mv`|G@>L4vn5tceg zYoiED9i(+pgj*Y=^;3l94AO=x!jc7PPb$Jv2W!)a3fKdn5Uog2z3}~Rp<4KhSh4~Z z8J@|)wA_~@wF#eX3e(Dn3R(Z~S54uX=R9c}8NS>Up=B$Y0MtM$Q#3RDbyK9abv}l? z!g1T9wOvFrO{L-6MYMKE(JrFT6dfVDtmq8UU7{;y+~cCPe<{K}E?U!HrX0+;$HizK zig1sM(R>x*UffU%R)l+TLoHen?)|Y^6Ggc9$7-z<;hxh->p)asx){FR)JW^5Y`7OU z)_N<#y|}TKsR;MtI4xTd?!|H1Xhpae$7|yh;a(iCO;Lne`IQ^tx`7JrxUaiWiv$_HYI59DjV+M&9rTba1U>$eWVEY@Iza^{hwjeSM-5MP*fCu!-gA{D}`F^}p= zTDGEY5vNT_+EzuwBEB-U)b1&o03lmxo(p6uuSYC5wbE88dKaj*mQ*NhyCQN~8?8)H zCD__%0Sje*=OXT!+G_2I3fT3CTKlNV$ma2WA2uH9k+5ts4f_2qCQG_E{H?3L`j$l1B&!w^~ zkqxZoH0`9KjzH;J-ZE+H-yqc7TQe<}^mv1Kb6+iZg``&+Gz04Ynxv8j9n6nt`9y{6 z{RZ951GFy`?QM`@epJg}DMNk=@djx#S0NR$OAWHjL$sHP3Rq2pOg2WbH#`>m8lTCTsf? z4T;VJI;!ZO(aYSXXrC&2CVCanIYqOgw~MLTB}IkN35KcKcZya+n$xsas5O2EXt>|dGR0%a-CdMYx;vNXDHhUa*dExggMKpS1^dZBil=!zNZ zdZBhk5!UrW?Q2C?*Ne2Pim7tnt?|!z*U2>m^zPMOfEMw8o0C zu9s*n6k%O2)gDrWb-h$eRfKiDOzWix>w1|sKoQpUa&4$0tn204V~Vh@S7=Wu!n$6e zO;Ut){hIbXkvuZLrp;A0tofDN0%gOa?@DcjvSB-{(ux&fJFL>)R)p=aTHCA$+hMh~ zOA)ri8g0KKY=<>kr6OE6eO)`P2v_}H*Ul@#Rlg$bvLamdE7EQ$!d1Uw?MFqp>Q}7& zMkH7L)@p7=*bXp8!m8g|%_@oZv2|J$(G^^G!*( z>i3qmQ4y~Cy{(0>mo{AWdrupyC@rv+`$nxx5<2uZH`eW3YL z?u86j{kCgIDV0L@%fO@ccWD1o^w6V6>+jSCy@TrbZ`>mH!&*Bhz2<&YdsfkrxOMKwwM&Y=h}+>Djc5ti&5EkO~M?4s6M5ti(tmMn=%c1i2*67rJP z$0g(?ZIB{79$nUQ6yfpcvi7(nO67_+UfD3eE7}xAnBNs`h9XSmsy0s%rgBwVEQwON zrmZ59=SSDHvt~tkKJVU7?JR|znX~Q$3I>Ixe>rNY<5!F%s`0e6`)7B9pm>-*urW@wx0fr)_q8o(nCEzwds_VKdAL(mY(r?s3Oqv*7vBT_@rB zk&_JT;}bl7aM*y_c+@z^g6AFhG9y_pc;4Y8!^Zfo9zQy4hMn;l9zQwhFwno8v@?FB z$1hGg45S`ghpS#^I&EXXR!37qH+xu|wwFS8yHG)s3KyE+q|$|!HGz8zo$*SVz`cb|+SKGz4{s;! zZ}O!J;jsg5*j44kV@Dm~@xkV_;qjr4K7;(=>rg7*709oS@a!5sAEj(~c3nr<2jK%# z%7%Tgj(%#gMc}Ke@K<3FO{+Xy>6(YXi|wvQeJ6P~{lz2Hg$$nIPV#N)=^5cd2G2+* zg*Nr`jB=q+&uABl@oea%I4BEzHBgnTB~ZMRIs!FykR`ooqGvNFjc)o-9T{dd&4ec@ zRVtPrqMq@rqu-*Yxe$(L&7C1}JgXxdKU+9$IDXa<&ZUx^Hk?b<5zeJrI&Bx4=D85g ztl)$6a{DYev#KMUS+#cBaAs9UIJ0WwwBgLEj&NoL-}O{!;>@a!aAwucX~UUS9W4%> z;R)XcRq@7z-gmDfoITYM&YtQBXHV^&@o@H3M>u}GvTj#|EtaB(D#8{^(Hknl7VD%Z zD8d%&q_$8+2wN;we_Ro^SgJlj5w=(teX1gCu`c>dMc86p_4$gh z#k%TC6k&^X(^o6P7VDcNJl4_R@b=gsqvb>zicFV{4}Co{F$FGjv}? z*qRx7IMGrQPdMw@TR%x8*QNUCU;K`$B+=FQKKeC9cnt5Of3N6>*A36Udaa_|! zcqGZz^A+K2CP$yE2xl`ndZ8km&5Y1jD8kvy2z@P4g&AivBlQi6a5ghiuO%vA2NSwm zM(MHJD0hyti^ue$50DDju84k?f9jb#B%MtdWXaWIcT2jKFw*k4-s>Yt&HTq$^7Ly& z6&&Y8Pw4~qqOF4C9A&Kjq#~T7OwgmsWV|^+`IcvNuX3b9W@xtFGDQziKXmSuYI0SsBl zGMjmNy{1Pi`X|sTy(tl<*~Vjy-hl|yoa6Dj-doXCpkh6nsDMpsX7^gBTd7qF+2G83 zwh}!^(P*GI^u^Rhh3r|NH}yH&W$x8LZ|RE_g$$b5V7-1&QR1L`wo?71qAr78YVfws zscj3{Ah5lo2P=AVP*H;odb*;w!S=5H43$jYSMr`-C`)a|`QUr{3Pm^{d{1Ai2u)Q<`QZEd4k9^9ZPX(UVyTfTJvQpioCJ6J>g}A=*=w`j$4RT)w(5hOl;*WfKS^|j zJza1Qo`o-N6YbLg{rE>VH0HhhZLS$&+c;f(q#eX_D$44>uomHvXV;r#lX z{*oe`U!T(#DZ=^nd3~iKoL`^UOBCV!`hvbe5zenK=-U+G{Q7Hsk0P93f2~(2!ntCV zeq0gG6|3~m72({wTK`%R&b_PkYl?90{f&M{5zf88(Q6gq-20-=4^s`AaqfLlcPE-{ z8kKm%^OEkPXnf*rpdb|zN7KuCq#_(mFYED=IL=$I=7>dlVQ z7ExJ#bIh*|qnq#WauVG|O0Us}pcNKOrH(LnE-($WVeWN=rPiD_EOi~>xs&d+;Y?f? zZCuJC#6TzI!CQQDiLP)gnL%ukME9Z^#V$oyGNU-42utQBDivYL+{9;!uw*82UJ;he zB(5mJl9|OVMOZSk_=#w?X+rZoUhd*IMfuJ50huas+i}$2=j9>%i7F_hrwDV}GMT4n zP9(R%Q?!#rZEF#o6k%B`B25vtpO<(<5pJKC$Wnyc=PgDl!tL`GPb$J~u!^S@;Wk*s zb42o3WfSWp(Hz<)-cf}6kxgt>gm<+1h~0|tj#eLWP!Zm-TTdKQge%YW#2G~!n;-M? z6&DnJ)cjMRtBNX{!|H*!t>{ei@j&+_v8v{0z3igTF-Lu7GJi4BNqIo|M6w10MDj@t ziTC|p_X-r1pGfN2Vux3d2>TRC-fJ5y8Y;pX3>M84VGV|eHj1zYLqv)q>>;6|hazm1 zP|;5j)^3;>tO#p2Ox!(z`4zIN9(SU{1w3d#bU(`;6Cr{Xg$`{K(?GOV)V$Z=m`E{_ zQjx6^C7y87co8Kg63KItXfaFLOn&yCy`sfpqD5>%3+5dotfw)*D}1Qk!#h@lDSEDj z&AYK^BFX$x3%hrmXs2wIb{kN4MT=U5ddG`LRmfO-w0Bc6N|B%aSJ70AS0wyByc0x$ ziZ|5W#5+-}QiONmHy5RfcH3KfHy7s=9ki!-w-CvnQ90?p`<5bI5#D#-QuL9;D zF-p-Gd%AZk@eGlC2B4LgOC;;1l~_O|Yp|6lAzI3YCA|#s4k;R&w9vb?xbL*B@NO$w zoWZhS$aUWB#luc|+q;7p;H0hI$zrUcSxLLRQ^YDK?f331HYi$>1o!=l<)34ki`jcg zhrGLp*e@h~nDn`Kcd0-4*$@G+GCX%JVX0SW7Q!me_qk(yXLF>u@pZYe`L8Hnffu zHx)hHvW4|AQC1~w=`A0!=87+>B@J!a+4{KX{|(Yo)2x>1)+fZ{ir#AZ2+(*%ms$?D z=83sPvK{gqBfBA@)i|(W8gP6t3`=^}`jlAU5^}8ANOXXwwVG)iE5a^PNRIKwi#Ccd z-bC@>3fd0v{;d{SpAqnqAfgcva*|l3Xfn`b(f%6Rl`PE)`zSw{Vv`-r|n{^6IOWrGNp;}KC`~+B+(jc4?R7EgI>szyBU?XY zD-tD&Cbmws6$^N@N7>SCYek--iLD3P)`_)}=LHc zFW#e6uy&`}N=3DkX4u{qzBe)V*=$jZCAN1&q$C&>*Vx__iOM#{{)X*6k*sK_eJjuc zNi@^hDBdGl%C@!MZ`&x&D%#unh;57b%_ZbE;r1Qox0D@gebTl~1Q5w~-!8&`N3l*? zZrUzdOJdcnGuaN&s}ZIG_xN_|=d(i;DZ*!(c8K+g>?zxUCN`#!=C?bo_S_++N#a$V zFqN5#JUSyCP$9c^z5yXm5n;*3Ln?QO3fKw=xl?4u)#biZ6e+^ocZ&6jF!!AzKfW&a zono#e%6+F;pa^r{DR!xlnEOs~h)CwXQ(Ps2+*32zhvKmWOjFj`hvF$otbdmtz8{LQ zo$GA7#j}!_y~i73x9FZ)XWJwCNMZ|m^b~uTLVOG)XKWJ@#2a%cq`9y+Jk2TIl|(gPA+{>Q zny(NasE}Cm72+czS@RX*&XT%vek|@wVw3w*5_3Ur1snz;;}?m6DBJ0XiYZzFimcqk9_^K+3Vi5(mKO7Q1my^HNju~FH60^66u zvahb3UkN`+ENaLr!C#4)v}z>NJTK-;Vs8wo<>$p0#~tyu+AfG&l1z_ft@f-EKPsA) zH7uY?z{9iflQXL-F-lQJr&pq@#0Evnv$lw8G2>fDnwhLx%#*}U47=f3Ei$gV+6GEu z{=;`ztHnz$wr|8jWoteBg!LP7#l?0>+)}og5bu&`=R5{vvdbb>5-W#zm*Ggl+11wg z#`IgDoc&1d-^hK*?T=Pd8}#{~P%lVXWA!QhI=9Xm{mG{#_z3pUzwtM)ZvWQW=igc} zF1!)_PhqfT1d}!6TEbxvQqVgMeqWPywW_mel-exP2ko#9rS58r?z|M-_6-lATl!#{ zzfbKy@sVjRptz_Sy(59c8>P@K{fo)Hfx@7_!@7~&_-+J^?Q^=}eR|}B??uqrC*+Us zLE!W@1P*VM!tl4rNA`+Z^7)l~q*c&1;@b=~_Gh;Y^LIT8tuhzRq9~mh(korizfspZ zl_|uNHHq|LQ0*`Js;j@N`|rvi{bk5bkfzSkKn3gXl8f}ucJY^Ga7|OTzSJiuE`He# zzRUxvGwF|YtFdRuNA3&KXD0cezfk+gA459!h`$bRQ2WbP>U*Q0_B1BlL2&eU^hQsx zLV3u?wdDWX-B{0@$=a6n{MSC3YK6Lx@O46pi?KAej9Q`iZ+x(aaFqh?HFDqiD}9SX z{yEG>mlRxkrW_Nb%90$UkgonG!ADc02f8_{Q^#K5I`YVRkY#W!k88eXD4qYj^=0_4 zDb`gg&nSwV}77I3;lytXOZ9| z80O3AtsWYaxno=n-iC*<;we_04`;6K=h85))b_p5-HPI-w9_DNI;ddtC? z%14$;T4hP38)Ly6St-0M+j;WAG&Sbx;~ECbFI39t&zUTPjOCh(>-NepvLu%%mW=zy zl>aWZ-BxJ?iid zMy$8G+W7yr`+F#@reuaC_&Y*2CU=5MNLOnL_``dTN&Edt<(Mza@Sl(Ne-0_|-A9hPGKGKd{y(V!*%q>g zNH@;>`73a&i&z=5r6WjD}xSi6vxrvkNL`(#(!nc!kQP9nxp?S|b)`FlUj?&6Gk1V-#*QNGX>BzcuJ=6cMx?S5>=2%GOLDf`E{@F+FP5;$> zS;l$|QvUs3U+3f4>*b8=f8)L{*L7WM^}owqOf7=PP@TOCZpZ4h>)!Y0yyVCrN6tT6 zrH?#T{`)X8q&!ppPeT4(UUF{WnxmXu$Ta_b%Cc{3Lvep`Rk@-iSHLg@O|6FEy0>FB zOs;`DRQn5mN5};bi>vkXos^nff0O=u!H2WG?JK4mB1IvGDBpufxbb;A(Ys$5D=Q4%v*{4^e8;$5mxN=|NU(N5@!) zvrW$AoKqf&WGmxY5`1Om4RKu+v!iFq++`RUYXjA)YzxP}fZ^*}M`P0=Wt|mJ`m%Lqk^5y(jlD*0dHx#%_aNZ6 zLQv&ZhCI4bBil%(FRwVra|Bn#aY6~q=tgza+wXmJ_*#d6KLh;v!?i_! z_zH(Vd>O+Zz7SELje;*jjAHQ382DQZ-+m}zalp+XY+K-m*&WsqzG~4C{wKpn*PR9Pp756rf4w2K-YgXU8o*y5>&H^zs|7vTFmMlJ8Spm_{)WQ03wpBQ z;5QunhJ)X5@Egt6veDo-n!O2s9?SH?0eE$Qm&zonbbxa zNE!i}U}!|{MAEjTDdgXS+6UIcd*e9;7b3c-zU zs6cnA_Gz-s+f46(EY)t>{e4Qc3(3Kt*OKA6Itahnx=FL9#QXGzt?1{I#qI~L_N-=f zr;ZkvlF7;`olz7rn8M^ym{RS_l+8Ygv~`L6V#;=(i7K`0DF=O~LCAAHGb!XWhVMY0 zNokg94^rOerCLTO_j;SO0iAs6Ev7VAseBD^_enLlZ+L!5`BrPqQhU{_);gtb5he8H zpA!1UP6^~S9(?foKPB`npc4B2PYHbssD$A?P$dk%0#rg@1S)~=^IY{Tp?j4|7~bRZ zEv3Je(%DMsY^4--v*%jOtGAos-CmWHVVS7@m>!m=xXT56RjmukYShtz% zdkt$Zk$;m~Q?FFJotg`6degocTCm0*;9IKwl)4fg^3c09^gYbRdd2&`$UM6=_pR0N z8yBToc$cN1O}k*M7G2JPw(XJ(u`)W@ydOY$u=U4w$poJ%UEnL2tf0#@au@inU~hKW z##gZIq}Zb{%sjA;>$(T@Lh@l>K_&DA#dIch{o2=8xu5Im=2y(-b!`W_sB1^i*Sp4> ziy_D3r0L*O+OX=sqDD*vcK5VXEIrHvz+1yBv@Ak6a zPO8I1y?wXUex+KcZd=4omfmeGxchZm@0X}&k^ddHcOm7RZteWq>iG84L_WUTM}C{M z-S(?~Hu5Re#&^5#7fhv%A}!UP?B2v4Pwo}$r_?U?6>M5}c<&3FL+Tx~MXX>;!QF$( z)>q%({jzxwm39TY2>vp7a-o3!X2JM2l6<}@hz_xASWu3;~=XyBj9agXc8 zagVE^{)S=3!z*1g?7jUrX(c^I`1`U-`@DL-4DWmPWxL6J(Ec3wW3TXKcwaMobI3m1 z-;>qY=Y!&V!#yFjMc@|x^Zm!^AM{w`58o~BQR<&WeLIQrI>l>xY=<|D^PcDY`%|g1 zpgiY%Mp1cAaqpg`{wp{>1CvMAOr0ob?MO#rqYU6IbZhHpu zpHf- zf0JGa;Wuev{;$=y@zs!yjhB+{B*hY*(tXmGLCJ&DbK#rYKLl-X$5_h(w^BNrw9e^Q zA#R9UXi%v(DLpwT1^hGN8w)ei8~Ud3k{(s&!|dhs^dKDJ^Wa(nhC^0fqg1`nK#^|}yLNu{cU^3+hiLBX4tU&e6=6PD2~7{hc7 zPN6nUq4&_Arts(B4&Sw&m%zQ*dXwW9*lNh<0a+iA&jXJ4M+(@w%~l-k^O&cG`(|5x zT!t+K$D)9cQWz6#-lf`{44XHMQ5kXIKQ7}T(04Nqn#}@ZnZ<6fn#H!@{vkHuXCD$0 zD6VIW2#El9Zb+iQwy4$g-eVw^NALcA5d!zkViweUBKQooPX=w&dvXY-vl2$*tX_*k zZ2Ilg6_ERblp@gPz25}Aow^9ZjPJHHWHfKtH;=Uy_=bSdJQduvTJOGB!GCbyz2Nf{ z_>AULNMG%nU>MEuiD+Ni(qP!et+qn`df!|~p-s3?Xb*9quTN-OflraN6{q^v@J-B+ z5d%Kw!&-uV11asYL}^F7R(p=-llzSqcr+go8V_Z__d24sCru@-)?e$lJE#}9--nd%KO&DNdqewc zH0#iC3=Gz=rv+=+(|omyt+v|QiZP*QLitwQV0-q=vC-9lL zw!**vGPiL8pACe1gXhWnLO-kxok+2!QLLHdo=@(@kjq-n$sFIkFqz|<4N?R?d6OdO zO${QZe+|6F8{e=nnd7?@QUtykVKQGFniDoz;H+<)z$YEY34Eq;oWQ3S#|eB+ah$*> z62}RA_HdlQrwqpl981Rud~$G{z-I)<349uGoWSS)#!)XCC-7OmRn$vUXxmGayGMT* z)5PhF1!0Xu@BT0XYw_Kdhru>lR)>|-UeH#o>OUN6>}Sx!%r;=NPXX^e;D%>gF>HW2 zyoZ=Iz!qM>R}M%DFNAvAY+WHP4rmwNR^YwkZN+Z``h{(o3W_NozFWztvW% z9ZXxvA5hKIXn1^lKq_=RN#(xqIpO<_P#&Z`%II{uJvJ)!t$8Q;<*8Rw&hGxR?2UV0cu2{bH+_s7o*k zZM9|T_@%@w9lyAkrC)287BvduX0lP_GfMejm{B_3lbc83^T-PC1c2}pDf~q8nW%g) z{6rn^)15})r;&9US!YuCndCE5`C#~&I^Mf0Xm6TN<)07b{5a}M(PhYa(7{9C>0;O- zc&Zrs-o>bRO6MH)s1+=K2p)eILYQwU%(tR!NDX}R{KSxLJf7<36#r_7CAyYff{+Jf zUxm1r&9x9dKDt&k^KTx_4Y=*xfL{@*6{DMXiSDb8(dci3@SETmJ=A{N6Wy-{nj!r1 z=v6v?Lvodl-;l)P(dOt4x~P8yG^5k$=&j`5O70E%@~qkZTS<3A`M273>v-q!DIPm? zyV$Mcea8oA+bc;=lb$2J1g+oC=O(p&ElYy%HjX1nF`O}-^@@O!jA$57r9~Yt+S9zN z21>itR-@y1RinSu;?;&VI`+dF9iJGf(PQl^!3W2&8XbFV4fV_#9ghn&kmD|};Welr~U17)> z_H8WAweEm5f7q{J#phf+p@*;b^o22MSb(pBd1(e~eS1rT-mIPY|V>^rnRgKz1KY_DU!^Kv=HA)p&d(fALSsT|f z({R7WsZ_T1d-6F9y>5r~Fw8kmfMyKeE)MgdsF02&`V@b2_#=%^@h?DADb`_r zd3dRRFM(f_?N6!ohhz5|TNahPm%#7M_7~Wi{VDzavQ%)sGp8}m>a$=KVH7LmCRk}` zsF~Pu77toP?hhS=*C4 zncS%qvO9(BMIrm>{ULmReUQ5s%hZQ~X6ZTLGm2v6Qmj0RHI`ycq*%!Y%sthBxpy~U z?!63{`$Y18mi(uYe?IxoG+?Rb8ZfW;XT|inyT1>i*PY_S~m65xgw2HKvlxdVZX*g*FX);XJwv+P zFnj@NksF3DCU+UR%gJ3u?rL%~6Ncd?%7xs?q}inTq(!7qW?qYJ6k(QHIkyev34@{YphI?RM5#&xLcM7>Xdtgbj z$tQ<=3P_7ci%H8!%Src>R*_bdUL<9nlozQ^8bKOKnnK!{G@CSsbR=m$X#wdB(jwAg z(siU|q~)ahNe_6|gDt8ecQxrnQf9%D=%m7eVZzBBK^jS#OqxR4nKYF`W|KRIbR=m$ zX#wdB(qhteq~)ahNvlaOl5#I918D?lBxwq1XVM(fk)#ErGf0a`*O8W!?kBA#<=&Js zX#{B`X=l=rq%%m1NY{~;k?tq0BE3k;tdtsQIB6tlGHEtxK4}qYF=-iTIcXJXH7T=U zYMeBjG=emlG=(&qG>0^ww1BjTw3xJvw4Ahxw3?LpQ2M0dq!Faaq$#A?q&cMdqy?l! zq{XCVq~)Ylq}8OX9;HtjP8va)OqxQPO`1cRPg+1)L|RN*Mp{laMB3U zWYQGUY|1Iir!e{`0wy&*%U7$I4;+t74yGL2*KHQgKSrY}WXS1;q))NyRBevqj@5wkq~178EBG zz3qQj_pa5;6Hic^ZFLvvGXRqRtNC{8F&DVp6H zQ?XUCpg5s8sW_!*_GnDSR>eNWg5reYq~esK*{kstTNV2h3yKqplZsP{rc>i9wkq~1 z78EBGCl#j@`}Rxxg5reYq~esKIUu2}ihYU&#Rsfrq~esKxk1ZSY*p-2EGSMWPAQrjHKt;#VxM9`aYAuYaZ1tL zB=K7n`xFa`6N*!c=BVbW*s8c|pk7iP7k-~&L2*KHQgKSr3~E}%g5reYq~esKIiYbB zTNV2h3yKqplZsP{Cav)m3yKqplZsP{=5~#vIH5SHIHhP#YN%qX;*_EpQodrVVxMBc z@`oj~Rk2U8pg5s8sW_!*Ml>JAR>eNWg5reYq~esK$w>Ud9fA{zEjcYqu}`s}IH5SH zIHhRvT9#s~VnK02aZ+*0(x)Znl%hGKsT2!}6N=`n@)cVZ`xFa`uRmKaHB@?1aZ1tL zsi_oO75fwmiW7?FE{&tus@SJkP@GVlRGd;YuhIC5t%`k$1;q))NyRBeb57$cwkq~1 z78EBGCl#j@&1*HjVyj}GVnNZoPD2%275fwmiW8O|mpBuOlZsP{=Dem=Y*p-2EGSM` z{%=d1KE;CKgyN*)l%jdP=A+oBSWui$oK&1rG;h$Dimi%$iUmu*Q9=uf6N;0HQ;OzI znpUw@u}`s}IH5Rc`EUCY{@a4$q~erf%O428Rk5Hrp*W>z{!l{|`xK|{7moRVl&{#Q zIH5Rc>33vb>GeYfsR;=75p^*7fK)Tisu)c=0{1N9%N|8o6H z^}ndETCi-v$^}<1IJMxu1%JI@%fh`22N#Yn{QZR=Uihr}=)%8QxM0zeMb|9azvz}l z1B-HtUc2bci{7>9vx{mQu4>rXaI_)QaJJ$8hCgd~qT$lT{fqBk{Po2zExvNex0md_ zR2_j>W!-=R{hDUM_2v*s_(D* zk5#`~Rk^xh_4d_Wt8ZPMUj4Dv-(0-+3u~TT^Nlqxt@+P2O=}OVy>adF zwWrsPuYJqf_pJT$+MVkjT=(I1|F~}LWt%SBdD-5}ZoaJVvI<6^(#$t=O&#YJ>&-&5 z*ev3#VuQKHEa6<@C7elIYW8rFv6J(M`^_rT#c9S~v&Ll2T9Y^H%z0wpi%U1qCyv)RUp$E!Hucr_;)U+KNZT#M)|oclfG zXX)G@g6rr01iW_cFTk$3KA}f6G^seMcuMiS;+qxUs`xI&hZR4j_#MTjd6NH1#jd&X zTc}Is3ulGm<@1~2Y*X5nWlMRYUgG?f;(E>JDWz?RUsBrE;aR1l<$hZ^FDu%1*%sMW z*!tUiF4Q{PBAdT$SF~qrp3xG&woq#Og5pmUYZ^Y!*MkxbPlJmUn;V{mUfnPS)--$* z{DTHb^~Z|uiwRxMd0_Enl|k<{#U<^9;yioFv&8(?CEo&HQrz0~6~0k)u=zRA_Q@^H zQiuL#$tTzRb@*>={to!o=9j^DH2(~IUvp)ZF&}8=0gZXIS!y+@_@(A0aK6&K4E*3K z$>HOQpHcjK#b_zETw4d5=dUmK*Oz!5--$A2&+133jTu-YwHjI@^*Oyp_^(sW8e?;S0$$ax%=@Tn~Th>+1Hl}Tz!jQ_E64Vmt@(#y3kdx$%753oOQ8RE7VS#WyL}&M#ZK?SWq(YU4!bsip1M zMaT3&<{{~6* z#~Y4A+qPKAe?<9KW~`Kce1nY3-)tBn=APB}fWKLPexUiSq1 z2Fj({j`fB3%j-TvzgaBToKeZQI@4;=J1f6Qs+KJxR~O2;rs3v!$m*6}aB;&RSksUJ zquM*REj8bmzpXq8)--&q&Y1VNixhpWU3xD{|Lei;A?=p`^J^r|dvAT~YQ9jx8zY{H zgS-=g?ci~SzY=;jJkQKgtbylaQwY|=^UOTOI#UB@KFF7O;Q74&Ah-bQ!^8FvY#_wP z1`%8gkGFt9z92`4hb__o-3ZS!O^VI%d~6fJ7I>anuDH@P!&#xY4W4gqe((he#kXJ`dFCF)-@`)k&F_L9-gI_jh!52A+;hUGtIq+rk zI%56+__dvfJWE{N*px>kTfcJhl?^S%C_YnN|D?Y^O4&OWodgf2PhoS#O z@dMrmp&#aqt#AI!`!M)H?=kQZ?<2(g5a^pf_nv_MFv$1iyuW~cOz|o2<8VHs_?-7w z(EsE;3I4P9NpQ;h6!^UNY2tq!^vyST^TRXWRQwn3@8En(@!Q_#;C~17%?sWap#K&0 z&A)kHgnm)+yWW@JyrlR&?-}^tSNwtZ75FcMp80q0YtTPb{E_#MaQ;K_C*E`Lf2{aZ z@1NoSr{d4O=i&bh^vo~4Z$SS-@e2Q2a5jSUzyEFM&7jXY;TNE{?Fj= zQS9`80e>&(nd|*uLBCpYALo5Mvmf-$0Y3(P5cJIR;GY3KbCwd1AX&a|4QiBfj++oeiih%;&1y`!#NM~Wk3Iw z(63i~qkk=&H-YGF|5ea;gJ^8O4f@TXZ{Fg!L*E1PZBM@g`eDTn`g`E~nc^dUC;Sg7 ze%QYr{-1-)8h=0ZqlzE#55jpIMEm)Npg#(t1O0C3kAY}E{|NM7f@nYgM(9b!Px?pU zd_wWB{afIFO7S!PZSX%0dggEaUg)P3Kkp~ud_nPxen0%bSNsP*1^-JRI@2G7eg;Hm z`f2E|D1Oa93FoVd|J@&ke$LMj`cELU+rI<)>xwV=IXEvWe%Bv^|2@z*-}g_0FZ*Y~ zANY5{{~_pe=J_1-k3ir2hyOb0A1nUUABXc3#sBnw8~)D}f8oCY{?9?r{K|h5^e+`n z>~1(7$eYBmH-qzI_rR$GeSX37_n;Smd^0e1AM_&7Hx043LN8XlB=$BqOB9#J{t$kn z;j-UYo1^v&wnyP+=yeX}O^9&l~!0dQUH{qQeS zd`0XbIF~D~kNqk94T>9M55vC#^vssn2cb7BZjF5i&XtN+#Xbywo8tD^WALvAeSU-T zBhaq|(K)dvps!VYRqQX|T&LI?`#AhI#rD`=!QTmb{KDds(7P0O$36*Xk78%+Q}FjH zzB=}4_}44$k39u{ABeVz{T=iH#je=r;2Z+cGqEo~-vFX#Vqb*5N%7{`m*5-)vA$x@ zK=&#pV_$)D3`C#Az6L!2Vt2*<5&Cuz?GbwpdI&^&#Qqt2L~%6sJe-W;9kFk~&no6) z--4e5J##AdZRjz@)3F!eoB@4vHui7OcY@68*h|p&fUKUe??FER`sRJHm!aRU_*bzX z!udsL#mzoYoCu_ib#fUL!_ zX6S!Yd?~gZ&UY2RA6p6kdx|f|R>S`R$Xd)fUDjog868^({ZqxC#V&{QpNc<^t%v^$ zMZe+-_#Wu-3rCxvV~Uj(Tj0zBeSWj(O6V$(T}H)K&@~`?jf$(G=YeQ|idRC{Db`n9 z3n!ttpyE~V7lLSjiZ<|)igq|l6`LwL;4~^OtJnj-S#fzqC;S%0l@-^+Uj;JXD_DEY zr6BXY;vn=|#mg!V!C9wxc||w;S14|+I0AnQ$TvkRZiK#4@v4fWaJDO6Q*jIYs}*-v z+y=e7q8IF}NP@4f=qKj&pl`Y=QsAMAK{%roY3PjN9Tg{`-&HXT{#iu^{19(oV|7>L zz>ijpf&Wl(8hobWEcnZcyTD&nobwyZXT2CZg9oc(?38YmVbZwPnOSKQNN;b#flY|t=PEYGb^53@q-odmGf3MtZZ5N`jsD8`L`=? zT{W=k)T-C6x_8yvSABHVg4GYMeq!|}RzJJCaOqnv{m`Xfyz~c`Hmqr0^QJYQUh|2y zv)0wGYh1Tt-Ntp>*1fQ<^0MQXjb3)=WfcX(j#QqS1plppV4o8H$1Y%&+?4V@pu8A6 z_256|{9>U?dB49@c%^9v_6e^=$Kq0UmV3=j>;;eV_gi=Xdim>Pw36)1kMY;2k zmwueTL9>DyuV7SHvVXpm-Q1;Sh`(X}M%Y_t_#5T#4*s(2opbD&^JXXex1Ht`f2YAS zT+i}%Cx3Ub|2;?9ujTJ`{1x~c=g;6*$eIDXz=nACdY8MNbJy3p>+9TgoU8QZxLJkw zqk?^(P4@-eg!*Ii8r5jB5eHcyXz0!_21p~C+4bKCI6q8oqSco zu>Y{}8+?21aM!=n>wN4po9`Fh^-J#hjJtltUBBk8|LCsIx$8^r`aO4j*yLP(k6MCI*o^qn|=K2LCMH@gz;W+-tRe`RvT z+b?N1+b`J*y&RfVW$6Rn_Dde{KD*@c%J()*@>dxfURD{)@pqQL?Y#dyckyGfiRBM? z6U*=Mo?Tw)J-wpRdx5`Su2|ylO8l+=-iH66+%d{q6n}QPiNCkumC$=D`&aMguhN^i zwB3C2(kuOMTw3YPTI1pAS%=5!GXD5)$NtQ~*ih;^b2ydDcb`aRM>h-%4VliivHXeD zNIu=4%xAL2Kyx5JG+Y{XP;NJs@`{<2@N-5ZZ!Tdv-jQtj&{!&awkw%U4yW>|>`ak_ zm&vB@Oy<*>k;ADw#;Ek(RB~W??DoviP^w=db)3nkMsg6jVk0(`WS!ffmD&)Asf@^d zcRrgQ8H_M`(!;69?Tx8pUCDH$n`SJ*Xf)S4vp1g~?aJixVSCFtJ!eN#ws*ovdy^vr zL)68xyVHXs$^2M0wLe9_3`}G8WK+rfFoS6MJ(CYerN*~Fmhtm18N+0Tu)D*ECMG~SzSCrJqcnY(9 zC{5Qzn4L0WMsattpIKoGFd_>F$MW6zB(;|~?U~HUbjrpIO4NYxhBlToEgW7Qm|e+y za(5;>oXi_Hu5eP06XYSqjpfY#bgn;AM=5@1GMDZzk#Hpcc=>do5|Na<(?hAS8d_W7 zC}AgEY3#l))vzp7nW4EKnjBSNXA=4>Xj8C};$KYAhmFdr1AgDO}GBa}8O;*(x zL(HC3UX=^g?=F)2Q^Utn+5O4UeHqcRrajqzB1M;HhEB;HvtUXVA zX;r_;?AgA}<_2`bfW(o(vL!nfiW%k|W9e)#^g5Dlxw9kvwmN1w*PqD_G0nTr=JKgw zc@fNFpxjBaR5p2RD8-%4F`7IY!GwBfhKL)w zM^pV)=M5McOBytmDwZW}9!u$b?g^529yBFl64bDyudYv>)ughZ&~^LAhGY@W<->mN zA%^MEI3^<3sh|`@n?`3-1G0Q48SefFy+IV08BFDS52unt!zLF}!V4!@xXeg+IalIN zUwb6xbY4lk;&N0HwaAv(+F=r|gm6&uIT+h$ynQqYo*;MX?A(CD9 zB7!9ih2NFUDm6F5`)~k^PTNTLnt*om$_k&N;{;t}f=Lx=I4el!1QF#-k8px5Uq2)>B&Sxbzx)m zU{Z9j9LhX6oE#ZU5lwArtK+5RY@SjW=n~@QqAhKAHZxqpa0?M#GKK|lc0+si>}WnS zm`#qJz{*VKPP7dTGPUw2hV@Qr7O4B4)S3K-!>Pfsp=7q>%qY`1*zF9a&Kw+-JrGvE zyLRRdj13JP%s!%T`4icq0*);C)kq_vu@i~*D0upooDl@oasuTLa?vZY!}Nemx^|t zSiE9bt99KynnVTBX9w7p$o0rb`iu?DgrtnP?Oj#Zvij;eCu_6nMlro9mA%SIF zo1LbU+{GXca|>^RkggAv|{*M2UnVDac7aT>GN;EaY^Bq&GW) zGRrEeAyR>vLu^syVUcpm0)w)Q5ZX2&T%{uk%_-^W-d^H~VwXs|QVXL;kkyu04BGXJn>W$v>PL zN}iEg2Ml@`%h?=|`6nA{rzS#WoHN~-Y|&|u>p0UtG$z#wm9eVae0Hp#jg=bHgcVDau;QJB1q*<+YTPoY z)5sQ&$0}+U>8+%b^{#D@Hfh4*orK}%aC>PfuXwjZt6L`hJHpzQ2Zfa_4+?5NLx`Gi zQq}UXu%_ifVMWV=Y&VD1EUwLL(X0{b)<^B0un6(txQ>u+i4M1jiFD3%p2UkRpFy-~ zER7XiSHpPInLEeQLl}`Nnkr}Nds1#B&myxZb2A2)38|(;b?c5(3vh*54^0qaGn+AJ zdWkbeDl6A!k1-&sFEU@@+%%1aRa|U79aT2EJ0eY;Iec2LmgO+51XG%!ZX82fU52W6 zH0eB(Ih|^qvelMBl@-sjbUDn4xf9vuwr7S(nZ_p}`)O1Y+xg+lsZ<+IWMYQ=?R z_M}+xbptLsH`t5|UA`6H5CpSVXICFh*glj>;(cJ*WX;GyjGpbuxPq;s$c&)|r23sX ztl5EsBSU9R=g0sS(Q&RQim;wmTWE6?Y+clp^9uc>lW`8)7$vaJICr{))?7h(> zi-k-r&0FszEaKIZz{qVh*J2viMSF%a$7E?xAGmR*mRBUB=n5%DDK+q0p zU(qKcEiB&c2+6YKuHSI8ZP=F{xx?JFE7Ok*A|O^&i#>c(FqB=HQS9k_N_s&I&Tz4` zTX$ja!U#FV7@Wd^Cpn00Yez|Z%2HXkYwXUm8sVm}iV_yyxX?1=`b6rCS`vnurt|4k zPOTT2VyS`RnBgJ{!p%VHcoNIpS{7NuULs3aa4Wsn;j*%m#D*)q%O*8;+b-4Bw%D}J zYo*eHZ6zkk$e_Dx!`x!KWFy+tHe5^^u^U|$+*yhZfo=fy=J7vU>tD#QJ0d){nK-}{ z(})o>NqVNV1m$#&q={?0i#j=?-8D35q!@P2Q;X9QN4_&_85P^(8YrZ#D*R5Q#RW^T zwq`+7!nUy)aoZo)G{*=c_GDb&|zru+dkRo>7yXo7Tbv33=eu%jMzhCIGJ25 zyYCcXm#93d$nw-h>HSh)qV;6h{P!n^bnn`eX-8@;y+3&}C8B`)Q}+iNp);pj1Er~d zqB0y4L4o6@#=PTIUY^%O61HmMr29XdaAuz zl0d6l&K8G)bEiwf{mC<>wJc#s3@bv`qzFaK-pcOLQno)W?M#`SnE~qoj^0a#?moIH zmAcNrme>fa_MTkjaTx}&i;2ggIJw$#d(hE3<1Cv{IHr^Mn0{x@>abf%O0yJeWaxGe zhHv^XS?jW-YfJhl=$}a6*nSE6B-;KN8YvA6Ya>&qmj}kFo%j(>s#|BL%r&0Nh+OLf zD7zm(!->n8wDM4TOf;UoXG(O-(-`}hUGy=GSYF08kQK|E zKERgCwzOYuD%WrOQX_*n$vQQZ;xSxU4|H2(m*a3B+il$}q88np3WKOyMAU3SK~us= zZgCCo8DEWAI=rD2YFI=R)fYhFWp?F`$ZVe>uvGh(M^NdUfnBQU%OjNQkMcNCg;E~s zXQe~cNaS;(|8Q^F}xSHzC zAXDAdSpx!E$5~>Ol^Sf<%L2jzf;=Q|cEoB9S(Rex2w$Ayks!I1&|MtlNV+F^0j>PZ zFne50vCERe#nF!;V4wR1bdhh(1IxEdsHkY&153%_jigZ5u5gu5j%?zUBZP3&qOdzy zM+#ROkA}eYDUpkJJ6s2p^;Qr-lgq;jS{`!3et{4TdlnvY@77nV(=mW*l6{ho$Jil&Vr0hEk3UljG=WAq#0F zR>+IQQ=3Q>{}^)%KdX*^@m5mL7>Z-0KbzLaOj?AE6y-`zC~Lc=l6=A&4RPi|Fg*e- z9?Xw!@$TD4@s5n9vZZOkK|;rpSRL#yvio^3mgFIwlw88VgPyYW4&xSCVeBHSw2P;A zue)cH9Cl%OSA;DODl4sY%_^;%)Vx@9Z@+y~qy~fT99=7!TKWjdE~;e`7z76cULK)X z-3x_9hO#_L(4ZMYisM=yXq#NlkM_X@Lc>le3%5&x*k1NwlkC@nEvlZNQs+!ZkLfzt z4IJq)yE^uD^mLfL9c{bJ!LFXpg9o}zS6ff}UelS&Y~Qw#V`^eE_aNUqm>Eg21C+yW zSZhXWYTAx5MY-!v;`q#A#>jr$3VK`4ZTWl0a_&e6u2y$!!|m82r?BiHD)r{kfY2#I zMY_k1^$(Ho;Bh)TIOK$nf(Os~;82`=;#;*_@V1<6S=9$OpmSJ_GCO}9xx-$|`p*T+ zWZ230Drj#RSru${JH8cSl89`2KdmU1LcgGN{Pxl3Wjt>`WcU=YzVyL0a@vOCv56);ZG8?lhO;nQU08u)(EGD``a- z`9c{>p@Bk{%IWS#m`W&QM#Y#KO84_Dd53Vy<^#))9`KSyIXL($nYoOuN0@WTk-|cr z_A|#)M)l#ojU!KDqW9&}B|Xh^>mk-V>mdv7^tnfvdG9edeIinu>O6iRg%4steD`)& zE%gpO`Em}Wc;MFT9vkWJ+se7th_^#-WR}>?6lS=b84K2_=%MW*FLQcih~uH!pPJN;z~W5TmYnU(qkQ#wd$&ow6}&&bQ>U>OIm?>NwV;NXD{)1zejk;D6r_8#o&I8ef9 z-*>P(h|+!NNZa9#UC~GZD;ll+;J$-lCI|QLZ*v)T_Z;p#u*cmTII@3d$6g*>;!3ADsZa((o$T#kLEZNWp zxHC1F9&sTZBLj|dbF}!nLy?iwHy>oi=Jae82c_jz2obCUsnZ-O$S37Un7k%I@|-;m zr*=GELWY@m;VQ0-?jnOlkTYxfvw_(!E@6VzGd!9c7?M+Ky#wJ36|{F}Dt|h~*~?CO z;+7t8zSOqtpna|#@m}iI#PsWP8{^g`GnR8(k#Hw+O3zF7N6y*@G>!*3SKnVej%@OJ zgkI5wVj~4d<)a67laUj-5!xl<bQ4{xV)C?+L8RtM zlb5#&NzCTV@W@wvm1hPr{k-*@l|v#SH)n?A5XdOfsSU(baUCOCGL==PC9QhYRXTWt zp`pPBm(w`3XoJq-%qSE8R2s9=;A}1Sc1dcRVeXhYriTSG$B&}|X^tH0=|_(BaX~s4 zJaET7FT=~!Dx>x&n3!DcMdX9Nitg!5e;Snpxk{J^o zSQnoU5AaIlfXTBckXp_*6@zj{U%yb{VwlCh#*|{N$WvyU?gZwy+tr;eK57)Xup=my z7V*eubmJY&Q71H-#63vMnxyD33_W>PA{|QqIipfdOJS*toA#WLPB_jqlHnus_7f?z z2&W^Nsr|-nCPz}IRb!4I$aWEwddZ#19J}3|iEbHB%Sx#N5o|jK!Yv-fNHZ0vo;}l$ zO`evOEuxF)dkyOCKW3X^HKN2SrV2K?r|qkBfvOS{DbQ9ztIV6*<&8M1D(}b%9WE&t z+ir1HwjG+>nCc^Xh7*X?8HJLw=a+LPIbzrJq#H(-F03^stb6~BPf5rtvbHSkv~W7u zE_9E<^(IW^-kRerq9N88(#vRss(u*9{&4b){B?8GR}_)zZ=E{9jhzW?xg0ea65}aw zvleGg5ZLave0nl$reJi($l3A$)}H~63zrAT!8+BEXy3<6 zxOmLu)qx^6sPzqYe_bB18(F+yU{5+flq#kn{~OY|G)D!Cygg&-f#TgXRU{Q6|7@s> zf@hdHmrqZoEbXpzl6NI?__TNzG<9rja8M3D6r))lNSc`KDGMn7z| zqC_L;n7*@I4CTSBeQ~|WDn4(twg>YjaFrEQzT0)(vEJS*t*>CSY42XO%&Da&Bn#ihKu zJmpmvmon+jrHSV~o6p%-WX6u6T}3PRWc2V)c*xE;anJ*Sk(YaJ#PZ-(R+PMK0_3nH zDk~?$EYEBpF(h4QqI|^{i}g|L(j9wdd<{-|@EBhqxv0+L?YIl)(tmMzSQj;GJP-ce z3B8_-oLb~ioNP(dQbJvD6o?KldTLWr(~TEb2FHE1Z&iNv1h9L5i1(+?lIzI8bpvEJ z<7>9TTe{IRzB_uZn|921$90=~d)?M47_j0wrSMhXFcZu_$wa1w+tkdIDmYe5Y~Gs^ zv%;d2h{%v{2!?#eb(?y7vBz-V?6_{Iw>NFimi3%qLTU8sToc+lW9<2?8{lSUN?y=EPeJB!{9MRY4L^ie|8#|;g zr1e*s9UN`L(vlk#NTmHJg`i`SMe>*y%{g<-0hAs_i*+9qB}A=jEBePS{udlrP zCMLCr%aNYl+f^TO2$LfOCuE<;o(2WrUYP5^Q_fr0Y=Dg=t<;M=^!Lic`_ZA~*>-t8 zLz6UX4n3Z=vnh~ZR&>)gIGDAs%exv$>7iB%4mx+*K-T3`X)#pnn?t*>-ko(4yb={* z$>Sz{ueRhxI;p`HF*G^MeKDGQ+ss*PB@4c9a#2|@kX_=ZIV77VTVJWgl}1nKc4G#} z(`@-31zI_>ij~L&`hTc_#^sLQe)8VGFP1^E6C$nw&3& zD@D5fw=NlSZ%+|-oS~(1dnDg44I}lottcBr1y8{a9-Ocd*hb(7b4e84_>0 zxZ&AicKpxYAd{+WXv%%{;n;Iyp9mz~(Fb)o0$jRuRt$w~N@i|hBTHkq39nvRZ}t~;#VR8(M+ z{Z+`F-I~Z*aNamT@-XdKi$bT<9uCOKroJpc%ETEZxuBICwNX2}Jvm~xo1{g}$ex5Z z3^d5yp4BXOr?WYpqX#Y5e&HOf?jkh;=_9wq)3uSQ>#SRee5vMpX{g z;C$awmW=BTbu5bUA`RIl9yhhs#TO`kHY%v~?#zY$Nq4XQM;;bmk5|N?D%ERq(7F;- zMRlA(Z-@>N!O=&69PCf?;-x*OZe#~h{0hhsIX_Yql91{_v8Q;BDizk(Y;Hnlh+khc zw{x&?giJgKDm1uqoSnsLHUoc?t9}@nO7U{HZXfKsCU&nb<>_$*X}}1NoQmt2Do9DM z{ze4HbnD?$f-Kn-@aW^$Xjp^Mz zyfzkn2S+4`Nj4MvD!NtLG2W#8iz|vn zrO8`v@;b{N-YMZzT)}tXRG5^<6F3RtdETh~h=DBYEX)`k`_n^sxSZ)A<03Z3!Q;F5 z7*k+nm{(`;+K2>+MBHG%hmg~qP9W&TLd&-(Y$SKM`QS{WX?va-wh}X0`qT1|x&|h_ zZYxG)&MOu8IDfN@!%XR&vbO-N0G!e-`;37|z=hIb!(1o`3*|yVTQ6>{J$B(7FheiK z4(`8j4%_tcGHPrD6IP5=nXH^4aRzPha6q`7$MFQogOLGD2=@-CoqzTu7EUytPN%YJ z2g)u>5_O}d+fR&*oa7LPjO%`Pa8Vtp&bJC(oW2q%^q(S_?!*l8C4Obek_Yr|1ur^< zWTjO%d=~=EESDXet(9%dri~kA8B34w9SwQiZ8-R}h;{Y2vn*qIj_2YKD~X|HvN6k? z#H|pt%sXf5U<vieE z=)#N}#7q_oC6Xp!3Jbr2+sxQ!CP4+AS}7Z{&Bw(;wV^?Q+EhM}l#yz5%cptDlHmfd z7QR^RyVz;l7o{a7BR0KLueS4Rdv7mKy7?f{cKaMoEv^gZGsEs_6UzrE0&K<64`D|v5RCMp3|)yOHfb7y4A`n z%o1)lqLPo@wCu}_3_8=%Zrjivwv>`vu?*GqfhmZgg2d{M_##*LnTDQu$!b+R@F;~Q zjrdW^*cUm#n`TOjD3#@hRx9HnTV*^Xri^#ds{%8sJn_XY2I5Vf=B3;`gK@rT1`on! zR>rcl&V~vn?B>mwzB3*Z@6VqxJnSvo2W)a{YB7tg@?@UxN=)A|pvA=?vPby?6*NPg zw$HTP*i5&T)&AJ@n25fJi|F>U$nurYk~+!pRgH~fz&(?dxnrx12^TU4QR=(dZ>bs! zxK^j>M>y@YkXW6$Hs|Y-wN^L>dFU!GGG@J4g|d{(!%#`0ssOuAX1Mb{%HFxSdPzhr zhFV!u%ax(i-0cF`hi?d;l{>#e^dq#AUVRL#)7KsE?F}FE$rgPhpPbk+dfn~4y**4{ z9QbnNBvdg){^)gSd4eHd1(O;uw$oyk1ebed9Ms9Zk0)GNT#9zzq}3)MayMgPSG)N742#=u4>SJF$F!~Fi_3VvZ@ zBfqe*!o0$mdP`gGCgqxi{4T@yZIfFHttPq zz47Yzn*H3h^IIW+e-4^A{TTRU*uWR@P67s289leV!C$G!+Tf;Abt>wDTnD}b5 zS<29Bo4a1+uG`)9YGXQ+oKx%95jal2o}k}urv=g@oM+->+8y+1PW$>4zesY1hbMQE z?`D3lWGlZ{vW?&N+|F-$ZZxLwhBkhrgdeTor#W}?lbpP>W?s!FOZU;h1N^W~7eBQr z4eQ~jHE-Z&OK#$aRBop8|JM}1-fUo?Uu(R|)%>)nsg~wnDOBuQ8Y_Y_6b|Y&{DA2d zbf6AN^)+tTP4x+y$tgo)<^&X?$ge8dLA*3bvHu`lGek$U(8lS5*Fp#82rf0*$wue!LL`bmjXiM)o%ElXY^+GmaF_)XL2NN=Zn z{vz8mLa9m8^lN*hXJ=^7ri-gjF{Nq$pQn&MwynN^l3E>|_|yBUH|VPp^&nGg4Bb4sEKM06F;kQOwBQR>6DHdqr#7b$vh$@nr+zS zCCZw)$&Zgoe;y~-AzCDwAVWNnJc*xU)QA-qEip*!Vd98tnt7pw| z&7q$$-by~jJ8BT#$(XNdX`uUbq2?Y}u~ zgr{jSJpkQ73^6lIO*^T=+ShcHl+saBN=LDj>W(1an$D6Goh2zcBPlwA6mec^VqGyc z2k7CjrkE|!_8lzA=U_1(;zd$b9}IGxQ`8xTI2@=a2ayF+bEG8aBPBT>Ddt>#B*?4g zXh|HY?LpR+1N2-D;~?m{WJ$isk~A_p!H8I6Ef^6o)$E9fECnNyWDJ6Q?ONdEsYYbB zIPPN16=l<|j5_YssUTnECYnM_&SDCYWmm82bdVx0xTUJ|}-$_yj?Us2~Y`0i$rgB8_jMR2shR|rcN3{*S#USmjkzTj$7JXj4GjSkv0mIrYu>j zWM1l;KBp@}XEeqLam^g7w?(2&&1pE+ny~Ai$k(96stz_^(vLESbtcS{G2&$=TBUWX zmLAOV&mipqC9y3}fL%L97Q`-*xpkU6 zZ2q=4L@t7Kw(myh7tKE|mKW=jUdgjk>MWx!k|$RgQ4^QA)VIctxb!zGC*{ldiTxq- zSyntLS9+T?)K*5&?jckXD%HNL)G^b#AJaUv1S}hA4IH%;WKIP(gXAJMiP&w{@`|iM z^oH1%lt;S2P8g!SA}jPeHbF?!H^<@e%8RtICL6s|>CiSHO+lYX+&hUW7MGPO%10`s zCSr$Ki56**SL)0h(Zn)Kq4_CRv6tvGde-)bXahs*L3BxI8PK-kn$%5gB|p`VlpDFL zK1z;(jpo)CU5$ekPi#Q74Oye44)lqRmyDg|--%?5uq`)nq2xM5S&Sf7oNUxZ+GHN+ zdX7a_q{W%yEGv4nNayH>fG_n3Xt5jvT6DFeS*v8uiUi0A>?*mlBPm);X1kPFwC1GD z@J`oYwG^8+U@eH9(?X7-6J_>@bZGy@L~^8LDUBIcCp{#xD&wSMU03Q>!KqTXznv^b z_$PxW8)H$+<(uJSnvHDTMMa5HY$01wH=<5us9RK}Td|SqZ-8?|^J~G#iEgbopghFL z-RbgN%dc6=_FslgjAO}T0~-K5Sh3ms)zCdx;2x2trp#Jnx^FeN^83C;-mP%g;`ezK z`~iLycAeh6hC88O#oaAzE!N|2xs5H(RyH@ny%h{{^6F*!o~9m=a$wYPEidUZ z&Bu$esKl5EZD;9v`6s_ZyaqSNen&}**D!QzF#Gm`*YGEcr=?^|w+6Qko~U&}4(m1b zdeZR>Pg7l^DXt-Ij<_?&6z9rba+kcrm}@RBPjAb`#k&(V5&ZMk>}Mnf_zTjCBt**> z*8@tRTIwaWGO^1M&fj88#8-DSV{*A!MQdb~iX0ik;{7d*{(8#1jWP4)tYVwfOPbBb zESFd|OvYZqqv<5}Eu_4a9=pw@T(2p;>RTMwRQCq1ER3Ne^tFla(P<`i?x0S)Fc`!U z*Mn>BAXBhgCvyibA(@OFOuH^(_29(YYYe|HE7MWrMz)%PGr@92f@Nu0Pg>{Nz})6^Whe7WM&C|d>r@zk)2*{a6udW2=G1ZiWN|{dtn2}0Cg&V?J@qP`{@y}6 zAG72n+df+pk4>N58py(ImQ1f_592B|^Qwb6AiW}Hw?N%X4i-X1g3hE+@ z&oCtp5L1k=S2D*$o7io;DF3tgkga0!Zd^~y-|XLJ^`~yduX+{kh3(Au&CGZCyV`h# zCnQr_h*bd7o4Jc>%c>y_OH)xhY}ZiPnVS&!XQGa7X_^d{toxtKi=$lB{w*6`!n=3KPJlI!$x|5vm) zsIRTHw9<0Cg~ie>B|c-X{X%UyLmN)(zx9#+w%%vy%YIrb%guoCmR`#Q57hkn2#pGH z9%u1PtB<;VCp{wL*{^*o4=K#@3)SIvV(L2De4!Y;=PPS|O89WSScHc(y%im$~~Bds;2%FIPQi#Z{d zkXXZ#pV%_u1#~;A*fr#O3xBuK%3GOHg8WW8h$RiO+XH3qa4V?=>Ejqw3>AKDus}r@ z)>~2A(-+JQJco(?yHyt3^%t93V_$x;v9CAY!J?P81$nkw%9=#tw+~D+yYH4=q09); z6(Zx}<(Ki1dzpXq`7Pa%u?U{4SRaJ7L}fv?K4^I+l0+6H7umPTUP@+}jHf&h6qzX2 zh`cwo(XWGyhwNizA(JOIQ3FzHDRs6ZMv5owwew zWb4%3vlb?5yu?N>b@sB5OMGFX@b6x|sa%*??==#($**mkEm0QMU1`aMj;wC+y+q+V ziNcGqS&3^g*1SqMwY8Nko~QS<6;ObwYZYEytB|{t+$H2*CHD&1rDWGE<0t0V*2Yat zF11yrLa(*erqU9%v&}3=)y`>&x$+Y?k-Ro>t3RtYHmk0czg_(8<*zHY*3?$4r3M1K z1ojGa&6)3c3lj^yWoDVFneX`lz0A~wcL8tSeBWP2>`gwgNl{GO)Ht8mE~ABsHVHIx zPp{P`mRA~TwVc+}Ci>_X?r6U8>UP!AP$G0t!_JCoV@!qdd?NU83G!>3Y>cKxcyt88 znm(~#b7`t1m!?X(#T7+tukKLY5y||}Y;bnnA?el~+O0bv6Gw$i9F;EJPL8BiB5_o@ zYzHHFRQhEHkT~kks;Zz;rot2Of!F-sd`7xprsuX>qt8w*_5pC=_5U~95j^YN`kPdO z5xUKv)yO3oB zCVLfszH+OoHhRp*MB)3A@t9^jMqL_fXOlyt)ojwxvx#$!Ra^_>5aiy-h3*}bsUQhF z-=F2rlG#&ugH)+8QMh}a=$>=h-oo9aoZV8Op_;VzCD7jJk zK1(xhu`0T=@HW3TMww@-*uRMKh%x^XXBaQ${e1pa88qwsMB)A_6Kkq$s;pvydVY+7 z^`<7OQcAEV5Epr+f;7 zv$)n)Rf(|3twcuIG!gEjb0kqr1CX)Aa&)y1CQ?+4(o%`#Xj24%MMV2Pfhr%*+hsx& zB*W1#pSnhQF80z=e&GQG#AY*|UsRF}LF7XoqJ4u%x)Py%B}8f3t?R>hh13mRZQ~p| zREfI6BLP!dP@ zi+-XKVJ$o)B73cp4_7fKYz<^`*ct@XRCPdoHKZma?S4)Bgcfseh3sQ)knO{7_V3s2 z2&=RSw5$ptDtsKmw&O9Kh>xMWW~)AtdVjS@K3gQGisS?WilBehUZ&<*s|C3bF?mc@ zQWidxpNPYQlooFh>ap62S&70Q*$%EPcDDq%JCx3B!r?sWIM(KQl5{N0UZY>5nYz%A z+q(x{T*>|+ncdn5xqBGZsbdmwpACqqfS5oF?3cK95FQiqF&&l15Rtk=A|iF@d)9ZB zYZiIWo6T_56+R^$$c0##2hf7>CoO+c$Mh-N%TJ*sXOpQ!Un|jtoYYdDs+a}o&zddQ zPobYGr3O#YZl}wH|42oJ7zR*}3Ors>skeZiGya&79!FKE-bfr}e$oGEClrI|gwMq- zagG2VO?i&!D9>}uKe^~cnOi5igP$)<3q9T;6OmY?3 zS3+i$U3!?3b{dRV)H9_-{k-TTL=?&5jVw4tW}s8X^D3w)lox9@M%3DiapZSD+yyL< z#bj0~)h^lS6r3%gm>G+tRZlP0)>2>)PqTu);l*$$=1Vr*J8d*RpYdYr zL9^=(JyLJNIX*tWNLGkMzUU^*`22vVU;|5!{+zUlaTA+WZ-(gC4OR^a!%w zsMUK!^7*2`?`w@%b`t}(7$w!Rsqv(9$QWW)i!7)E)Gsk0L&=a-*;b)_Xq7067ZZhh zWrZJ?hM{iemy9!=xQ5XvlNjp#41;v9(;Q^?*nAQ6$0EFj7FoL_PtubhSOXh3dK#cC zKo?#qLF5`aWqn7~WjsZUQFMi`LElRm526xPBi<_lLFV^LUuxTDsoG*|;H1)ah#e=9 zB6c!`$I;cy0*D$bEq2b;)>?TB?wo8Dp0-`9;u4aDr|JLkMk!YV98q{$2$h^T&6fQN z16j*xnnX(E1Cs^Ofi!jFScGW4aqLGTqL0Qm%J7b>`G}dNnHQd8?@ENmDpqr6`=JMnHq{Wa|LAQMaYSGb@2++E>* zA~QAYRbo=U-zek8W|p}|eHjp{1!u2v_EuI2UvclO7T<52uZA^RT_W9DD}sadJbr?F z$7Mn_CaOgkn^+xWArOj%p^}0?VmB_9!Lw@VN$T*tC`YbOYGC6W5xFPD0@naU`N;*! zij*Q@QuOE!>*ZK7xLG>uG+M--ZuuM3)&RVOX80cPA zRh3vEwH9@$s2kr@!FXIdD~=N-F~1`2CFTo#Q{pB@h|#Q&62}h-kW)yW!MbJlz8G_g1d2Dyr#BF zH<*>dNI?J57}gWN)?Yl|kBO5^U20t6im!~u z%_fxIOpF&K(=oIYlYX3$P~TSLoH&_NE7{c|l}(r~)ShvmmfVBxo)D=D3XT2(Q1?}I zkEnL3hD|{=>{z<0C|{~kNi}G;-jma+`7!h-X{luC;7cP^3YK97$B0TV`dX^N;6^v$ zXv5V;9qJCvYOyo11-eFpjz}POM@?m%o7wfAslDp}Z_1pz<}Q6D3CF%n$?b{l(ich9 z%IvY@vZ<$fXjZXSd}cSzi>c|_6k`-o-Hi;(Y-CnOvNj%<5oMchyDG+frWaz;Q*?Z7 ztaffusF(2=-_yBGI&E9bx5Gv}Mh9TjYpF3_N_w1$j+3{JzO!Opr=8|B4a8nQ|vw(Cb{dfhFNvE9ZMSq|uu?j}zzUI<`#b8u?H2 z#|~?h!I7&f^}-8*QZKxKlghAyzTgx%3{ljD7Z`Nv#Uf=@pE6{&_{arD1xs<=_{S?H z?YTGt-N=xwj?b3$QInC9-B>MFlO{@xza_|r=K_K8!^Tz~51@SNy~Xia;#9L7Nf$&4 z#^{{LADJc2=@M}cS+8oWi(^dVf}^!qId>$+Z$rw&-WiwW4~_FAnnN8laPV`Ff2!^f zHbdR`Q=(49?)w~)P?%r4*b_|=^we590@$~f2I*XU<9 z?9Y1gIvt&go6q`I?pD)Pe0H^>EZ=}JDT9ITmF2W>U)b~a`Lg~OaO&MR*NLIt(5EC8 z9Dh#Nisz^>%kOjik1ErQX&YC&$zwS!+|6hOS7t!rZX!wy-J(dqeZlbFXNUK`Ikqpg z#41GI)`Q7fxLakka5u(><|8bvLE#>9l+}4i+j~zfJ||Z!0jlGqQ{_QNAjm38cL!zP z?YGC5B+iMnsd$jePYlWKT?*CuGnkCteqoJAxa0R?rQO{qDXVHki`}gP!gV&KAs4cM z)T1VF01TlQ3ga%nx$z28TF2>q(xQ8)J0f#;I1G0Orc2@OswKJ(jK37t-|38H-Yn^& zyQ@UeXg6?^82^2GS$a-KoH7{kF!;X2_}i=FED}t*m`He2%&K42&+M@E?%n9@cm?%= zAT#Mc9pd|AHSub!0W@Q*sw!4BCmy$V+}MeXuNT{^EUXn;43TRq^gn? zfMr5u=w(^+#9wSTQR6=n<6yD;vA-|>i8_yDJfN!<4RTj?~c`~ z9$P*qUQH}n$5_s_Tkc1@OU-}Ih^VDxDHVU+sk;3h(j0DW)oS=7nNn?tr#_bycbp?- zd&{U!(0&qyF)VMHnWq_PTxRWf-kN6<6i*DEc;aOdqojg0nC;i>xh>dh`d{7nFIWqC zf;P`oip{`C)}8m}v%<4OD&EbGS2Uq!adgx9N)jZ_*HDW3^sLu87Q@9XN)O%6iriF-u!zyZ%8nHv?r7FWYi+Y!Q~CD_ z79K-U%B5Cjf^&L`Dm+xnbanUa`w`#pc8<)v2i5cXl-7576$<10YB;hE9hG%JY)1u5{XHu!sm{Ocj{3?Afi^{X^8r)C0`w1B} z47#wQR>;q9Vvt45=oosTQ4D2KGLnrb$!E0NC=)Kqgj73m{_2EG>Q{1~~E>x>>Epd^tg5)jNXBV@e zQf6U7RNAxB@v_3noM5wizD6JMR_QXcA83eI&Zd%KbAsy1Y(Gj|>RWfdtx+~gW+Lu@eg)SKVoa>oH_Xn(?6aKCPBM zle}Hj#Q38w)q`aVid{{L3xKR9wM-zlprE(i%D}SV78Hsae|#k!C2?G+)AHjVbIau2 zEWnRf$KA8J`yz^-bzm}bi{AfhE9*y@j%-9KnHBnkOr}2F{BCa06jlS`kz(SU!$wgj z_V{?EtSHs2rHS#E6JtL1Ys}3GSyGW`6p>7;Wa3=$KtW=Otjg8SJgSxldnhL!$%&_2 zv;v(X+XbQ|#y_L8{~p@H06(1=|14=SD&yi(Fmx*uO?T;XozK1cMg!f;q5CcOp5UeH)+PPr}bWjqJr)dZ-ZJ# z&q4&&5h)ALDtBTUcS5;S)3{UG(q|PX6sMfkV{>9jS0cik5K~B)6A|WAz?8Wz^HQ#K z5B^4H(?0D2zIsbMVFd#3cD4@!XeUC*b4`f41dlQ^Gllztt5R&0#(Dg6KSF>yK7`}Lwx?q!%|ZsU8Vkxy$> zGvDT|6%(hsF2_@dAoU)f3f6h0g!4@o^35ncJ9r5qarJ&GtjmM0t zQ9;Z?G%Bv`d+8ai{IIC2!WU<;RuLd+&yT6HVv4+|Sv`%0Ws6YYnF&vxni|>OFA$|6 zMk)WxR8#wuDa@1x8xuzy3%?mEe-AxYZA6a<#Rvv-Uhcg)>WQ+c=gU(Oa+0P=@h>c3)MW2fcp<{CHL_$EquDqS zj!z8HN?}H2F{&u3G*eenG*#gRnThdVi}iwzDEhHctwBce zZH%NH%LUlKb}y_u9ZOP<=v+M4GKlxP<1t?u#a3-iK{Ofu_k&myNc~WRby?Jfi#3zEiwoaWUO@L-yhO*BrE`2AbaX?8--0l;o~h>Rih22DDDR)G_srVx7nfQ-@lZ<`*1|X0 z^l`8J*8O1_fCrj1)SY}&AK!$v+F;h9wfn~!bUoZPZ?{jsaIZePFk zs^eF$-<}-Uw*L6`tpmxcuio6hZR;_PR(s}>Fn|4Fwn6)a@gAw8F-WdF@iX|IDW}I@ zbR$1Y!q>*b4@~jdNxr`o==)24r?X39i?ko+@8>e`gMHLOO2;&-;V<1^y9RFS)3bby+hGe_*4f;7J?bc;~s{}sY` z{8n>z*U->@zR7NebN&20b!x-F5Qp*k?^ml$ORG}e5{<~4H4(f#+D*jA_;OgC>c-N12p`OJ@f!>E_*0S=)b)R-Ty_}(w&i#i_1w&lOz z%9oP#zY4I}qn5Xei$|_W4s7q{Ft@yvBFFdTbr$(=m624%w}whyCDa&?R6I+j9(5`n z?Jv*iagDQ)_igOItsKRt5BN+`3u)!06M5&$9u`L`$xU9OmDgM4p!i{0Eg$J=(L>~N z@O&?KJ-lnx!V3yr)VPH_dCi_*o}v}#{u6 + + + RestSharp + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authoriztion header value as "OAuth accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + Converts a string to camel case + + String to convert + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + HttpWebRequest wrapper (sync methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (async methods) + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute an async POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + URL to call for this request + + + + + Proxy info to be sent with request + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + + + + + + + + + + + + + + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + X509CertificateCollection to be sent with request + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = "http://example.com"; + + + + + Proxy to use for requests made by this client instance. + Passed on to underying WebRequest if set. + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + diff --git a/packages/RestSharp.104.1/lib/net4-client/RestSharp.dll b/packages/RestSharp.104.1/lib/net4-client/RestSharp.dll new file mode 100644 index 0000000000000000000000000000000000000000..c1da1b588cd958eec6ceeb4d5be40b3c0c65b17e GIT binary patch literal 150016 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≠0S1>^uhm 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 + + + RestSharp + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authoriztion header value as "OAuth accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + Converts a string to camel case + + String to convert + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (sync methods) + + + + + Execute an async POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + URL to call for this request + + + + + Proxy info to be sent with request + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + + + + + + + + + + + + + + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + X509CertificateCollection to be sent with request + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = "http://example.com"; + + + + + Proxy to use for requests made by this client instance. + Passed on to underying WebRequest if set. + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Provides implementation for type conversion operations. Classes derived from the class can override this method to specify dynamic behavior for operations that convert an object from one type to another. + + Provides information about the conversion operation. The binder.Type property provides the type to which the object must be converted. For example, for the statement (String)sampleObject in C# (CType(sampleObject, Type) in Visual Basic), where sampleObject is an instance of the class derived from the class, binder.Type returns the type. The binder.Explicit property provides information about the kind of conversion that occurs. It returns true for explicit conversion and false for implicit conversion. + The result of the type conversion operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that delete an object member. This method is not intended for use in C# or Visual Basic. + + Provides information about the deletion. + + Alwasy returns true. + + + + + Provides the implementation for operations that get a value by index. Classes derived from the class can override this method to specify dynamic behavior for indexing operations. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] operation in C# (sampleObject(3) in Visual Basic), where sampleObject is derived from the DynamicObject class, is equal to 3. + The result of the index operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that get member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as getting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member on which the dynamic operation is performed. For example, for the Console.WriteLine(sampleObject.SampleProperty) statement, where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The result of the get operation. For example, if the method is called for a property, you can assign the property value to . + + Alwasy returns true. + + + + + Provides the implementation for operations that set a value by index. Classes derived from the class can override this method to specify dynamic behavior for operations that access objects by a specified index. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 3. + The value to set to the object that has the specified index. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 10. + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown. + + + + + Provides the implementation for operations that set member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as setting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member to which the value is being assigned. For example, for the statement sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The value to set to the member. For example, for sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, the is "Test". + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown.) + + + + + Returns the enumeration of all dynamic member names. + + + A sequence that contains dynamic member names. + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + diff --git a/packages/RestSharp.104.1/lib/net4/RestSharp.dll b/packages/RestSharp.104.1/lib/net4/RestSharp.dll new file mode 100644 index 0000000000000000000000000000000000000000..c1da1b588cd958eec6ceeb4d5be40b3c0c65b17e GIT binary patch literal 150016 zcmdSCd7Kz{FWx0mj3H||b7HuJu=gCCoD z)EQ?sde_&3x7AO6d+(_yuUi*v=so51-ulLMy=SiL-T$z+_P#wh?eu|c)|(SXefR-} zad4Yu%(&#uhwIc{G|ZXlHrFurH4Vd2=!}y=_kteBler@elKJL8{WKl`NEZCFj3w_j zjLGu9^$eYg#n^h1X}pE>xM@5?K}`I2gK1=dtpwk+iGKge-D?;qLGzyr_tK`zFa|c9 ze(nai=j?;b!cWQ?=3BD?K53xdsGkZz@`gN0LHCa{E-{QH1NGC_24G}f4dmG%%hDbA z_N901ALWXF%$sQ>j5}U6jJwvg8Eu08_dmy&ez#$Grag*yZPOY>M0Ry z)Sw3pWkj8yXB%hX2{dO1KQIkv3^icaa-G{9)Th&!3dV6lg8SgB)Ry?uf!6V}-W*}% z<_J^rX8;XK`0;!3vTxPW z^?eXQ18VARLMf0PySxBtkqBN!JmneYNP_4rcnbjl%Blb%03Zzo2mt^(p#UKOq%<2mq*K6^9T2vKkNqK)VKn05C}dLI6OkP;m$WAg2K#0CZ?T2mpBv2qE=n z8oS{M`R5vgkY+kr2#_ZS4gbnU=o`V9&7w z)Su%h{V!(L&&QNlzITYPTY3Kn;*N_0Qde@g6Xk#|=NjKfYH3svD%A-- z&7{qsi}Ys{4W)B}uPPeqrh13BIQ2KGF}7_RvHfe;&wk*$k$kA1Q8ci;@?b!71?d55`X|ryTVa zXubg=@yZ42(p1##;iiEe&d6DI@F-d^1?_oGY3~4<=cSWf11YDF41A(?@I!EHMutpb z3!o}qw(&QlkhiViYw#R{s;Itd2&n3-2np^ZsY*~mpuAi0b8b*2naJ6>g!F`X^q?RT zcjH8a4}OIo@YTRq`|h?(&aEcl9Dwurux~`IsPuMgrblRuKauoONH3+*bC8~+(sOp2 zUaFN|3hAX(dS-xD>EykfcK}pGMiQi9?14WB$EX~baDs=ykw~H2{x*nAWg(z%Xy`G4 z`lHa}0_7RP3BD^1r!g0W+hhjRuzWg~J^(Uf{TPsyF?<7la(4Y~s75zEoYCRuTj$49gGcVk2g+8a33wW5+DXIpQ+5wWdd|wUOs8(lA=g> zoP&RswsEiVnDnYpoQZbFd*!?Co{F=rK#_pYM8I%Bc)||JO zDKthw>Zv8a0kj6ApoKmVBaQrvs_~$y@^CN$)cPjsbW_XU)70{!*7JmsZ9^bPuYL`O zFldYCnE{5Eu!WSJ`pxhtUIwEvW{M6 zeI-$U3Xi-E-R)L6baQSYB{I7)=N3~U7f_LGB04CiSG#Rndq;A60fWv|RY9tOq1`3e z2eiS%G_EyPzGk#j;4{=<4;w()EY>JGBbx)eJTb8Q$gopB(ysp!c`})2rx;oht3zK? zq-^a}!19aICZpE_mCLrhhmXo_EUB4R&_7-bxWtH%6FDxu zucpJ24bYD^6WW%6PBT~9-Z&B%YGd@RcskbTQG9^MGN4iHj9^yi9HCz#KgtPsty3 zv5NF3v3`TqfYX)sWbiifSxx{cdr383{c4++tU5{68H$dZC{oW%W?k8VKAuqhoE4nO zcnX@F{zW{;s7Qrmxh@N%Su%WVqaaXbi@Fb=!4pp+bE~XvgMo8&E zz6=Y@#z1dJ#}Ta?rcpEwTBXK%&Kc$*KY8TG+>Bg>_F{naJ*Pf}g;@_8=H)!oDLcvf zY(gl4YRkJIY$wC^dDUL0z6(74Iy`HWocbP3hh4D?QTNO_{~uLJ*S;Qv@#ptvZc&F@i8sOqoml*Ci!V&l#JJQApN5(9JrH zi@-QeNN^uEU1e;B=0FGRG%%`qxfbLw%zKpr^eSd_ZHt0(o^OE&9 zCX4kzp566^Jg3ypk!MdG%VO{!->VrY;}+@{5Oj<6_sFxm{(gB*sb3?{p8ECj9AAt; zJ(scRcwWwnylJKAv4Cz_hmaw{~B->(v^O6 zc()?vF$O9K8C(mm;KTgcf}iW8`*+aAKfTR!t4_-Q2+-%9#z*lehjx@_ELo<;tO5Tz z;66Gt%DjzZpwY{^@>c<(8h=c}vHe17?6=@I224$akf*6*luQyMk~_9osNj0|t8qyD zkeTPg@#d8JtH{3TyJ$SMlv(QA-p05!GI6$tX(phVo`Hd z|7K*U)}fdz#YzavF{gkz!i2Kh#t8C+2ADG&e}yjuu#Ya?g>b9+AtAwKewc=h@-qDT zow0p2@4Lu*3nf8Fa6b)6IAi;1mW#-;fGmUrmpLh{B9O4;k_Bdc$=Ov!~S64`sctY zLu?fYxk`s`Z>zKwvZ4Q%n*NiNfA1ID3`1Bj>rHASr3S;Nnyh~l+?6&rL`|-&d7&d5 zsi+60aRSPUF0E-3(f&|sa0G;uw)~^;@Hg@2Z2YvmGPZxNMzhW2b%Lo_S_5XmvOE0? zz+WCfmz)UcvRS}t=qO>z{d33*dedCHElYCMr1Ybc!NQ~`Tfl{|O0FKds5CG6=sUSiCSgrvf z0Ibk}5CG7#sUSjVs}UX;4wQ!w09I;12mnx0#UTU$^w|m!0>FtH5CXtS8V~{idM6b` z2mq&OKnMV*YCs48r)fY402t9#96|tCtpOnbptDpQLI5~J13~~eQv*T(Sfc?UV5fA- z+GttXQrn^2yRa|vw?a+rT2j`MCyRORcs^`*CvBqn`%ip(_Z*1W~rc1V>9uaNLD(!6o>~!7)K*Kw2`x`lJ#X`b-g;<0_$n>vn{nAT*%& zGU^Y7QB#6SX7Fjr433t}q;5m~DK=&GBtrg&vicraF){3C|0ue&Gg*l){W~euVQQ?W z+LQ$6cqAZUH z3!xT^Bg=rY21VOMwt%x^i6=}{znyO$@sVFiB zGwe;M?8^Gb0`Ni8az)SbC!s31gHgl|MiyIC6iJE$r*~p&3*)CwHHoc^!gfBU}hI6(2|~|$?{dC)be_Ou0-lK6N8f>G`C~XBC*C9URYxZP3C{>Q6vSzEo&3n& zs1N`!15$tx$mXLg06aEm4PUgqak?DyJ35(8Kr|K_L(E+ z=7OhNRhnC#?bE+bZ1#JnTq{O_(a0Tw;Sm;g-Otbj>u_c6VnT`AlE@u^rLM`cy}`f+tX@ zDq6Jo1y90N7ESIZg*FLuUm60=i=Zc^K68sA8g=(1AUT z#~5bWYCM{Q%r(9TXq=GXKBQXlJJ_=%gYUyDpBlaz`R+*hKY$BoTAslp>jpohALh8G z--B3uEP6Y+WNlIogT;3^SfCl==u0l?=Mfht?KP{j(w=iim>(PmW2tx;r@Al|JP*3s zn+h;md0R08w24moXr|ayN(C4pyuy~OYndsW)|rKrI)fL1Ax~)1-lCJcDX z2Fv>|;R%HS^)e{Q0~Rka)8TZ;10!aQ#aTW$gmeK08RLw&*DDSy2 zF#Ew6I(wsjdDBfPc_pw!qBxK^<+bP>R@|JNv+)!}PGy1Y!p(cfbZrTyLa+&ivOLDP z?58q>Ngwem6lfvjr1kK(h!=uVg>vdkVVFl_+u9 z+6oy)HPCemjo*V2J`;q14Q^{|SB$&XVQn3aA=NX{y&+=NJ#`^1y22D+LA;p?o4RCR z3w$yYqpT)fo~LL-TJe|{B3Fj%zlu0E(+3P=@uWL+#D5?UJ;8H9oM);UEo!dQ_#?O~ ziLuwnOfE1N;>;Px{}X))Lw=&lr&^-Q+0@o_oH@l^O!mIz)K=(nTclO@t2S5I!Y*W@ zSf?@^dsrOZv3;B$h!CAn1da{JfU&6AJ}_*nwj1`h7-Aq0HRcEb0Hs%e5CBj@1qcCP zTmwSHN2MBbfi$`9@?|{tVA?X!)Y2Wc8fLNJ7mhD~hK$hL{sj*VPW=e0YQIlm)#>V~ zyi6ZQ;T-=q`~-hhAq3!XR!hPl!M2|xV<38>$gmd^_~qcKPBUE@B$FxWo>Tr1P&JxY zvf9s|56~^6Bl=$?RzpYhH#~#C;?wVgg_j@v`4EXlh$f(o&P^wWq()_=c(&VDZ`dt@|DC-cQZzI*t? z@XQr+-COh!n+h@rxNroxDgZO*A;{D(y}OdfVC=YWQ84N91~_&AZ@IL%am{7mz!ZOD+7Z3Gv|EwA4>K zWA;*<&v-JrTDi0usE6-GuyB~4zw=?fN2i^|2*9yKOxQ(yt0uMe z!g%MgOUM#TVg@i_&1L+_AUBgQOp&h)rPMGm6%5Ig=~s~_pMzS+GE-P&2$+)!qYSw? z5aeNS-8__$Le(lbDf^;U-~-j~!JU7b!E7Z28rh z%`6cMGsf{k1_PWbp3-EHlI17?Mwm}V(%DneL6;Zpef@aI=HL(u33Wk{(Kkjz&I&`y zP$6SPEX?C*!(lxKjmKz$Vuj!Z%H{I8T+o5sbM>V%%7zmHx%_tL zaT=4bkv)G3RlLK@P0DrTCTk6wtmIiaHahx9XE+0c2kbNIlIjTaosdgs$iItSozu!g zSFWqt1?#fQ-;Fh20AoQh=DM-c-JR>s6)!(?@0G8=@do-ut`RIiNf)EV+R}SvD&4N? zx=hQFIMRuvvRuN|i5KI`0%8A=H0D%P|G{wum22#cIPqdl7YZB-4t*P&eA@AQAb^Zp zMF*i8xY?hCkeT}dI{t@Qo{{≠0S1>^uhm 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 + + + RestSharp + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authoriztion header value as "OAuth accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + Converts a string to camel case + + String to convert + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (sync methods) + + + + + Execute an async POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + URL to call for this request + + + + + Proxy info to be sent with request + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + + + + + + + + + + + + + + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + X509CertificateCollection to be sent with request + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = "http://example.com"; + + + + + Proxy to use for requests made by this client instance. + Passed on to underying WebRequest if set. + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Provides implementation for type conversion operations. Classes derived from the class can override this method to specify dynamic behavior for operations that convert an object from one type to another. + + Provides information about the conversion operation. The binder.Type property provides the type to which the object must be converted. For example, for the statement (String)sampleObject in C# (CType(sampleObject, Type) in Visual Basic), where sampleObject is an instance of the class derived from the class, binder.Type returns the type. The binder.Explicit property provides information about the kind of conversion that occurs. It returns true for explicit conversion and false for implicit conversion. + The result of the type conversion operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that delete an object member. This method is not intended for use in C# or Visual Basic. + + Provides information about the deletion. + + Alwasy returns true. + + + + + Provides the implementation for operations that get a value by index. Classes derived from the class can override this method to specify dynamic behavior for indexing operations. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] operation in C# (sampleObject(3) in Visual Basic), where sampleObject is derived from the DynamicObject class, is equal to 3. + The result of the index operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that get member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as getting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member on which the dynamic operation is performed. For example, for the Console.WriteLine(sampleObject.SampleProperty) statement, where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The result of the get operation. For example, if the method is called for a property, you can assign the property value to . + + Alwasy returns true. + + + + + Provides the implementation for operations that set a value by index. Classes derived from the class can override this method to specify dynamic behavior for operations that access objects by a specified index. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 3. + The value to set to the object that has the specified index. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 10. + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown. + + + + + Provides the implementation for operations that set member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as setting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member to which the value is being assigned. For example, for the statement sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The value to set to the member. For example, for sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, the is "Test". + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown.) + + + + + Returns the enumeration of all dynamic member names. + + + A sequence that contains dynamic member names. + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + diff --git a/packages/RestSharp.104.1/lib/sl4-wp71/RestSharp.WindowsPhone.dll b/packages/RestSharp.104.1/lib/sl4-wp71/RestSharp.WindowsPhone.dll new file mode 100644 index 0000000000000000000000000000000000000000..c68679709ecf1927aefab09a009de56849fd79e8 GIT binary patch literal 165376 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

    4cI%G^~-eDl%SFsV!ARzper+J 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 UvjLaFJa3g-U%&bM|D(Wv0(khuv;Y7A literal 0 HcmV?d00001 diff --git a/packages/RestSharp.104.1/lib/sl4-wp71/RestSharp.WindowsPhone.xml b/packages/RestSharp.104.1/lib/sl4-wp71/RestSharp.WindowsPhone.xml new file mode 100644 index 0000000..60bec58 --- /dev/null +++ b/packages/RestSharp.104.1/lib/sl4-wp71/RestSharp.WindowsPhone.xml @@ -0,0 +1,3494 @@ + + + + RestSharp.WindowsPhone + + + + + + +

    + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authoriztion header value as "OAuth accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Calculates a 32bit Cyclic Redundancy Checksum (CRC) using the same polynomial + used by Zip. This type is used internally by DotNetZip; it is generally not used + directly by applications wishing to create, read, or manipulate zip archive + files. + + + + + Returns the CRC32 for the specified stream. + + The stream over which to calculate the CRC32 + the CRC32 calculation + + + + Returns the CRC32 for the specified stream, and writes the input into the + output stream. + + The stream over which to calculate the CRC32 + The stream into which to deflate the input + the CRC32 calculation + + + + Get the CRC32 for the given (word,byte) combo. This is a computation + defined by PKzip. + + The word to start with. + The byte to combine it with. + The CRC-ized result. + + + + Update the value for the running CRC32 using the given block of bytes. + This is useful when using the CRC32() class in a Stream. + + block of bytes to slurp + starting point in the block + how many bytes within the block to slurp + + + + indicates the total number of bytes read on the CRC stream. + This is used when writing the ZipDirEntry when compressing files. + + + + + Indicates the current CRC for all blocks slurped in. + + + + + A Stream that calculates a CRC32 (a checksum) on all bytes read, + or on all bytes written. + + + + + This class can be used to verify the CRC of a ZipEntry when + reading from a stream, or to calculate a CRC when writing to a + stream. The stream should be used to either read, or write, but + not both. If you intermix reads and writes, the results are not + defined. + + + + This class is intended primarily for use internally by the + DotNetZip library. + + + + + + The default constructor. + + + Instances returned from this constructor will leave the underlying stream + open upon Close(). + + The underlying stream + + + + The constructor allows the caller to specify how to handle the underlying + stream at close. + + The underlying stream + true to leave the underlying stream + open upon close of the CrcCalculatorStream.; false otherwise. + + + + A constructor allowing the specification of the length of the stream to read. + + + Instances returned from this constructor will leave the underlying stream open + upon Close(). + + The underlying stream + The length of the stream to slurp + + + + A constructor allowing the specification of the length of the stream to + read, as well as whether to keep the underlying stream open upon Close(). + + The underlying stream + The length of the stream to slurp + true to leave the underlying stream + open upon close of the CrcCalculatorStream.; false otherwise. + + + + Read from the stream + + the buffer to read + the offset at which to start + the number of bytes to read + the number of bytes actually read + + + + Write to the stream. + + the buffer from which to write + the offset at which to start writing + the number of bytes to write + + + + Flush the stream. + + + + + Not implemented. + + N/A + N/A + N/A + + + + Not implemented. + + N/A + + + + Closes the stream. + + + + + Gets the total number of bytes run through the CRC32 calculator. + + + + This is either the total number of bytes read, or the total number of bytes + written, depending on the direction of this stream. + + + + + Provides the current CRC for all blocks slurped in. + + + + + Indicates whether the underlying stream will be left open when the + CrcCalculatorStream is Closed. + + + + + Indicates whether the stream supports reading. + + + + + Indicates whether the stream supports seeking. + + + + + Indicates whether the stream supports writing. + + + + + Not implemented. + + + + + Not implemented. + + + + + Describes how to flush the current deflate operation. + + + The different FlushType values are useful when using a Deflate in a streaming application. + + + + No flush at all. + + + Closes the current block, but doesn't flush it to + the output. Used internally only in hypothetical + scenarios. This was supposed to be removed by Zlib, but it is + still in use in some edge cases. + + + + + Use this during compression to specify that all pending output should be + flushed to the output buffer and the output should be aligned on a byte + boundary. You might use this in a streaming communication scenario, so that + the decompressor can get all input data available so far. When using this + with a ZlibCodec, AvailableBytesIn will be zero after the call if + enough output space has been provided before the call. Flushing will + degrade compression and so it should be used only when necessary. + + + + + Use this during compression to specify that all output should be flushed, as + with FlushType.Sync, but also, the compression state should be reset + so that decompression can restart from this point if previous compressed + data has been damaged or if random access is desired. Using + FlushType.Full too often can significantly degrade the compression. + + + + Signals the end of the compression/decompression stream. + + + + A class for compressing and decompressing GZIP streams. + + + + + The GZipStream is a Decorator on a . It adds GZIP compression or decompression to any stream. + + + Like the Compression.GZipStream in the .NET Base + Class Library, the Ionic.Zlib.GZipStream can compress while writing, or decompress + while reading, but not vice versa. The compression method used is GZIP, which is + documented in IETF RFC 1952, + "GZIP file format specification version 4.3". + + A GZipStream can be used to decompress data (through Read()) or to compress + data (through Write()), but not both. + + If you wish to use the GZipStream to compress data, you must wrap it around a + write-able stream. As you call Write() on the GZipStream, the data will be + compressed into the GZIP format. If you want to decompress data, you must wrap the + GZipStream around a readable stream that contains an IETF RFC 1952-compliant stream. + The data will be decompressed as you call Read() on the GZipStream. + + Though the GZIP format allows data from multiple files to be concatenated + together, this stream handles only a single segment of GZIP format, typically + representing a single file. + + + This class is similar to and . + ZlibStream handles RFC1950-compliant streams. + handles RFC1951-compliant streams. This class handles RFC1952-compliant streams. + + + + + + + + + + The last modified time for the GZIP stream. + + + GZIP allows the storage of a last modified time with each GZIP entry. + When compressing data, you can set this before the first call to Write(). When + decompressing, you can retrieve this value any time after the first call to + Read(). + + + + Create a GZipStream using the specified CompressionMode and the specified CompressionLevel, + and explicitly specify whether the stream should be left open after Deflation or Inflation. + + + + This constructor allows the application to request that the captive stream remain open after + the deflation or inflation occurs. By default, after Close() is called on the stream, the + captive stream is also closed. In some cases this is not desired, for example if the stream + is a memory stream that will be re-read after compressed data has been written to it. Specify true for the + leaveOpen parameter to leave the stream open. + + + As noted in the class documentation, + the CompressionMode (Compress or Decompress) also establishes the "direction" of the stream. + A GZipStream with CompressionMode.Compress works only through Write(). A GZipStream with + CompressionMode.Decompress works only through Read(). + + + + This example shows how to use a DeflateStream to compress data. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(outputFile)) + { + using (Stream compressor = new GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Dim outputFile As String = (fileToCompress & ".compressed") + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(outputFile) + Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, True) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream which will be read or written. + Indicates whether the GZipStream will compress or decompress. + true if the application would like the stream to remain open after inflation/deflation. + A tuning knob to trade speed for effectiveness. + + + + Dispose the stream. + + + This may or may not result in a Close() call on the captive stream. + See the ctor's with leaveOpen parameters for more information. + + + + + Flush the stream. + + + + + Read and decompress data from the source stream. + + + With a GZipStream, decompression is done through reading. + + + + byte[] working = new byte[WORKING_BUFFER_SIZE]; + using (System.IO.Stream input = System.IO.File.OpenRead(_CompressedFile)) + { + using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) + { + using (var output = System.IO.File.Create(_DecompressedFile)) + { + int n; + while ((n= decompressor.Read(working, 0, working.Length)) !=0) + { + output.Write(working, 0, n); + } + } + } + } + + + The buffer into which the decompressed data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + the number of bytes actually read + + + + Calling this method always throws a . + + irrelevant; it will always throw! + irrelevant; it will always throw! + irrelevant! + + + + Calling this method always throws a NotImplementedException. + + irrelevant; this method will always throw! + + + + The Comment on the GZIP stream. + + + + The GZIP format allows for each file to optionally have an associated comment stored with the + file. The comment is encoded with the ISO-8859-1 code page. To include a comment in + a GZIP stream you create, set this property before calling Write() for the first time + on the GZipStream. + + + + When using GZipStream to decompress, you can retrieve this property after the first + call to Read(). If no comment has been set in the GZIP bytestream, the Comment + property will return null (Nothing in VB). + + + + + + The FileName for the GZIP stream. + + + + The GZIP format optionally allows each file to have an associated filename. When + compressing data (through Write()), set this FileName before calling Write() the first + time on the GZipStream. The actual filename is encoded into the GZIP bytestream with + the ISO-8859-1 code page, according to RFC 1952. It is the application's responsibility to + insure that the FileName can be encoded and decoded correctly with this code page. + + + When decompressing (through Read()), you can retrieve this value any time after the + first Read(). In the case where there was no filename encoded into the GZIP + bytestream, the property will return null (Nothing in VB). + + + + + + The CRC on the GZIP stream. + + + This is used for internal error checking. You probably don't need to look at this property. + + + + + This property sets the flush behavior on the stream. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is 1024 bytes. + The minimum size is 128 bytes. You may get better performance with a larger buffer. + Then again, you might not. You would have to test it. + + + + Set this before the first call to Read() or Write() on the stream. If you try to set it + afterwards, it will throw. + + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Reading this property always throws a NotImplementedException. + + + + + The position of the stream pointer. + + + Writing this property always throws a NotImplementedException. Reading will + return the total bytes written out, if used in writing, or the total bytes + read in, if used in reading. The count may refer to compressed bytes or + uncompressed bytes, depending on how you've used the stream. + + + + + A general purpose exception class for exceptions in the Zlib library. + + + + + The ZlibException class captures exception information generated + by the Zlib library. + + + + + This ctor collects a message attached to the exception. + + + + + + Performs an unsigned bitwise right shift with the specified number + + Number to operate on + Ammount of bits to shift + The resulting number from the shift operation + + + + Performs an unsigned bitwise right shift with the specified number + + Number to operate on + Ammount of bits to shift + The resulting number from the shift operation + + + Reads a number of characters from the current source TextReader and writes the data to the target array at the specified index. + The source TextReader to read from + Contains the array of characteres read from the source TextReader. + The starting index of the target array. + The maximum number of characters to read from the source TextReader. + The number of characters read. The number will be less than or equal to count depending on the data available in the source TextReader. Returns -1 if the end of the stream is reached. + + + + Computes an Adler-32 checksum. + + + The Adler checksum is similar to a CRC checksum, but faster to compute, though less + reliable. It is used in producing RFC1950 compressed streams. The Adler checksum + is a required part of the "ZLIB" standard. Applications will almost never need to + use this class directly. + + + + + Encoder and Decoder for ZLIB and DEFLATE (IETF RFC1950 and RFC1951). + + + + This class compresses and decompresses data according to the Deflate algorithm + and optionally, the ZLIB format, as documented in RFC 1950 - ZLIB and RFC 1951 - DEFLATE. + + + + + The buffer from which data is taken. + + + + + An index into the InputBuffer array, indicating where to start reading. + + + + + The number of bytes available in the InputBuffer, starting at NextIn. + + + Generally you should set this to InputBuffer.Length before the first Inflate() or Deflate() call. + The class will update this number as calls to Inflate/Deflate are made. + + + + + Total number of bytes read so far, through all calls to Inflate()/Deflate(). + + + + + Buffer to store output data. + + + + + An index into the OutputBuffer array, indicating where to start writing. + + + + + The number of bytes available in the OutputBuffer, starting at NextOut. + + + Generally you should set this to OutputBuffer.Length before the first Inflate() or Deflate() call. + The class will update this number as calls to Inflate/Deflate are made. + + + + + Total number of bytes written to the output so far, through all calls to Inflate()/Deflate(). + + + + + used for diagnostics, when something goes wrong! + + + + + The number of Window Bits to use. + + + This gauges the size of the sliding window, and hence the + compression effectiveness as well as memory consumption. It's best to just leave this + setting alone if you don't know what it is. The maximum value is 15 bits, which implies + a 32k window. + + + + + Create a ZlibCodec that decompresses. + + + + + Initialize the inflation state. + + + It is not necessary to call this before using the ZlibCodec to inflate data; + It is implicitly called when you call the constructor. + + Z_OK if everything goes well. + + + + Initialize the inflation state with an explicit flag to + govern the handling of RFC1950 header bytes. + + + + By default, the ZLIB header defined in RFC 1950 is expected. If + you want to read a zlib stream you should specify true for + expectRfc1950Header. If you have a deflate stream, you will want to specify + false. It is only necessary to invoke this initializer explicitly if you + want to specify false. + + + whether to expect an RFC1950 header byte + pair when reading the stream of data to be inflated. + + Z_OK if everything goes well. + + + + Initialize the ZlibCodec for inflation, with the specified number of window bits. + + The number of window bits to use. If you need to ask what that is, + then you shouldn't be calling this initializer. + Z_OK if all goes well. + + + + Initialize the inflation state with an explicit flag to govern the handling of + RFC1950 header bytes. + + + + If you want to read a zlib stream you should specify true for + expectRfc1950Header. In this case, the library will expect to find a ZLIB + header, as defined in RFC + 1950, in the compressed stream. If you will be reading a DEFLATE or + GZIP stream, which does not have such a header, you will want to specify + false. + + + whether to expect an RFC1950 header byte pair when reading + the stream of data to be inflated. + The number of window bits to use. If you need to ask what that is, + then you shouldn't be calling this initializer. + Z_OK if everything goes well. + + + + Inflate the data in the InputBuffer, placing the result in the OutputBuffer. + + + You must have set InputBuffer and OutputBuffer, NextIn and NextOut, and AvailableBytesIn and + AvailableBytesOut before calling this method. + + + + private void InflateBuffer() + { + int bufferSize = 1024; + byte[] buffer = new byte[bufferSize]; + ZlibCodec decompressor = new ZlibCodec(); + + Console.WriteLine("\n============================================"); + Console.WriteLine("Size of Buffer to Inflate: {0} bytes.", CompressedBytes.Length); + MemoryStream ms = new MemoryStream(DecompressedBytes); + + int rc = decompressor.InitializeInflate(); + + decompressor.InputBuffer = CompressedBytes; + decompressor.NextIn = 0; + decompressor.AvailableBytesIn = CompressedBytes.Length; + + decompressor.OutputBuffer = buffer; + + // pass 1: inflate + do + { + decompressor.NextOut = 0; + decompressor.AvailableBytesOut = buffer.Length; + rc = decompressor.Inflate(ZlibConstants.Z_NO_FLUSH); + + if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) + throw new Exception("inflating: " + decompressor.Message); + + ms.Write(decompressor.OutputBuffer, 0, buffer.Length - decompressor.AvailableBytesOut); + } + while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + + // pass 2: finish and flush + do + { + decompressor.NextOut = 0; + decompressor.AvailableBytesOut = buffer.Length; + rc = decompressor.Inflate(ZlibConstants.Z_FINISH); + + if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) + throw new Exception("inflating: " + decompressor.Message); + + if (buffer.Length - decompressor.AvailableBytesOut > 0) + ms.Write(buffer, 0, buffer.Length - decompressor.AvailableBytesOut); + } + while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + + decompressor.EndInflate(); + } + + + + The flush to use when inflating. + Z_OK if everything goes well. + + + + Ends an inflation session. + + + Call this after successively calling Inflate(). This will cause all buffers to be flushed. + After calling this you cannot call Inflate() without a intervening call to one of the + InitializeInflate() overloads. + + Z_OK if everything goes well. + + + + I don't know what this does! + + Z_OK if everything goes well. + + + + Set the dictionary to be used for either Inflation or Deflation. + + The dictionary bytes to use. + Z_OK if all goes well. + + + + The Adler32 checksum on the data transferred through the codec so far. You probably don't need to look at this. + + + + + A bunch of constants used in the Zlib interface. + + + + + The maximum number of window bits for the Deflate algorithm. + + + + + The default number of window bits for the Deflate algorithm. + + + + + indicates everything is A-OK + + + + + Indicates that the last operation reached the end of the stream. + + + + + The operation ended in need of a dictionary. + + + + + There was an error with the stream - not enough data, not open and readable, etc. + + + + + There was an error with the data - not enough data, bad data, etc. + + + + + There was an error with the working buffer. + + + + + The size of the working buffer used in the ZlibCodec class. Defaults to 8192 bytes. + + + + + The minimum size of the working buffer used in the ZlibCodec class. Currently it is 128 bytes. + + + + + Represents a Zlib stream for compression or decompression. + + + + + The ZlibStream is a Decorator on a . It adds ZLIB compression or decompression to any + stream. + + + Using this stream, applications can compress or decompress data via + stream Read and Write operations. Either compresssion or + decompression can occur through either reading or writing. The compression + format used is ZLIB, which is documented in IETF RFC 1950, "ZLIB Compressed + Data Format Specification version 3.3". This implementation of ZLIB always uses + DEFLATE as the compression method. (see IETF RFC 1951, "DEFLATE + Compressed Data Format Specification version 1.3.") + + + The ZLIB format allows for varying compression methods, window sizes, and dictionaries. + This implementation always uses the DEFLATE compression method, a preset dictionary, + and 15 window bits by default. + + + + This class is similar to , except that it adds the + RFC1950 header and trailer bytes to a compressed stream when compressing, or expects + the RFC1950 header and trailer bytes when decompressing. It is also similar to the + . + + + + + + + + Dispose the stream. + + + This may or may not result in a Close() call on the captive stream. + See the constructors that have a leaveOpen parameter for more information. + + + + + Flush the stream. + + + + + Read data from the stream. + + + + + + If you wish to use the ZlibStream to compress data while reading, you can create a + ZlibStream with CompressionMode.Compress, providing an uncompressed data stream. Then + call Read() on that ZlibStream, and the data read will be compressed. If you wish to + use the ZlibStream to decompress data while reading, you can create a ZlibStream with + CompressionMode.Decompress, providing a readable compressed data stream. Then call + Read() on that ZlibStream, and the data will be decompressed as it is read. + + + + A ZlibStream can be used for Read() or Write(), but not both. + + + The buffer into which the read data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + + + + Calling this method always throws a NotImplementedException. + + + + + Calling this method always throws a NotImplementedException. + + + + + Write data to the stream. + + + + + + If you wish to use the ZlibStream to compress data while writing, you can create a + ZlibStream with CompressionMode.Compress, and a writable output stream. Then call + Write() on that ZlibStream, providing uncompressed data as input. The data sent to + the output stream will be the compressed form of the data written. If you wish to use + the ZlibStream to decompress data while writing, you can create a ZlibStream with + CompressionMode.Decompress, and a writable output stream. Then call Write() on that + stream, providing previously compressed data. The data sent to the output stream will + be the decompressed form of the data written. + + + + A ZlibStream can be used for Read() or Write(), but not both. + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Uncompress a byte array into a single string. + + + + A buffer containing ZLIB-compressed data. + + + + + Uncompress a byte array into a byte array. + + + + + A buffer containing ZLIB-compressed data. + + + + + This property sets the flush behavior on the stream. + Sorry, though, not sure exactly how to describe all the various settings. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is 1024 bytes. + The minimum size is 128 bytes. You may get better performance with a larger buffer. + Then again, you might not. You would have to test it. + + + + Set this before the first call to Read() or Write() on the stream. If you try to set it + afterwards, it will throw. + + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Reading this property always throws a NotImplementedException. + + + + + The position of the stream pointer. + + + Writing this property always throws a NotImplementedException. Reading will + return the total bytes written out, if used in writing, or the total bytes + read in, if used in reading. The count may refer to compressed bytes or + uncompressed bytes, depending on how you've used the stream. + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + Converts a string to camel case + + String to convert + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + + + Execute an async POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + URL to call for this request + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + + + + + + + + + + + + + + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = "http://example.com"; + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + diff --git a/packages/RestSharp.104.1/lib/sl4/RestSharp.Silverlight.dll b/packages/RestSharp.104.1/lib/sl4/RestSharp.Silverlight.dll new file mode 100644 index 0000000000000000000000000000000000000000..c6b2687fff84b532e198eacf808316446fa09421 GIT binary patch literal 124928 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%0D>d^_?$mVxx~Dr2}!P`qNI0|RB~!^^W?(h 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 - - - RestSharp - - - - - Client to translate RestRequests into Http requests and process response result - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - X509CertificateCollection to be sent with request - - - - - Default constructor that registers default content handlers - - - - - Sets the BaseUrl property for requests made by this client instance - - - - - - Add a parameter to use on every request made with this client instance - - Parameter to add - - - - - Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) - Used on every request made by this client instance - - Name of the parameter - Value of the parameter - This request - - - - Adds a parameter to the request. There are four types of parameters: - - GetOrPost: Either a QueryString value or encoded form value based on method - - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection - - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} - - RequestBody: Used by AddBody() (not recommended to use directly) - - Name of the parameter - Value of the parameter - The type of parameter to add - This request - - - - Shortcut to AddDefaultParameter(name, value, HttpHeader) overload - - Name of the header to add - Value of the header to add - - - - - Shortcut to AddDefaultParameter(name, value, UrlSegment) overload - - Name of the segment to add - Value of the segment to add - - - - - Registers a content handler to process response content - - MIME content type of the response content - Deserializer to use to process content - - - - Remove a content handler for the specified MIME content type - - MIME content type to remove - - - - Remove all content handlers - - - - - Retrieve the handler for the specified MIME content type - - MIME content type to retrieve - IDeserializer instance - - - - Assembles URL to call based on parameters, method and resource - - RestRequest to execute - Assembled System.Uri - - - - Executes the request and callback asynchronously, authenticating if needed - - Request to be executed - Callback function to be executed upon completion providing access to the async handle. - - - - Executes the request and callback asynchronously, authenticating if needed - - Target deserialization type - Request to be executed - Callback function to be executed upon completion - - - - Executes the specified request and downloads the response data - - Request to execute - Response data - - - - Executes the request and returns a response, authenticating if needed - - Request to be executed - RestResponse - - - - Executes the specified request and deserializes the response content using the appropriate content handler - - Target deserialization type - Request to execute - RestResponse[[T]] with deserialized data in Data property - - - - Parameters included with every request made with this instance of RestClient - If specified in both client and request, the request wins - - - - - Maximum number of redirects to follow if FollowRedirects is true - - - - - X509CertificateCollection to be sent with request - - - - - Default is true. Determine whether or not requests that result in - HTTP status codes of 3xx should follow returned redirect - - - - - The CookieContainer used for requests made by this client instance - - - - - UserAgent to use for requests made by this client instance - - - - - Timeout in milliseconds to use for requests made by this client instance - - - - - Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked - - - - - Authenticator to use for requests made by this client instance - - - - - Combined with Request.Resource to construct URL for request - Should include scheme and domain without trailing slash. - - - client.BaseUrl = "http://example.com"; - - - - - Proxy to use for requests made by this client instance. - Passed on to underying WebRequest if set. - - - - - HTTP response data - - - - - HTTP response data - - - - - MIME content type of response - - - - - Length in bytes of the response content - - - - - Encoding of the response content - - - - - String representation of response content - - - - - HTTP response status code - - - - - Description of HTTP status returned - - - - - Response content - - - - - The URL that actually responded to the content (different from request if redirected) - - - - - HttpWebResponse.Server - - - - - Headers returned by server with the response - - - - - Cookies returned by server with the response - - - - - Status of the request. Will return Error for transport errors. - HTTP errors will still return ResponseStatus.Completed, check StatusCode instead - - - - - Transport or other non-HTTP error generated while attempting request - - - - - Exception thrown when error is encountered. - - - - - Default constructor - - - - - MIME content type of response - - - - - Length in bytes of the response content - - - - - Encoding of the response content - - - - - Lazy-loaded string representation of response content - - - - - HTTP response status code - - - - - Description of HTTP status returned - - - - - Response content - - - - - The URL that actually responded to the content (different from request if redirected) - - - - - HttpWebResponse.Server - - - - - Headers returned by server with the response - - - - - Cookies returned by server with the response - - - - - Status of the request. Will return Error for transport errors. - HTTP errors will still return ResponseStatus.Completed, check StatusCode instead - - - - - Transport or other non-HTTP error generated while attempting request - - - - - Exception thrown when error is encountered. - - - - - Base class for common properties shared by RestResponse and RestResponse[[T]] - - - - - Default constructor - - - - - The RestRequest that was made to get this RestResponse - - - Mainly for debugging if ResponseStatus is not OK - - - - - MIME content type of response - - - - - Length in bytes of the response content - - - - - Encoding of the response content - - - - - String representation of response content - - - - - HTTP response status code - - - - - Description of HTTP status returned - - - - - Response content - - - - - The URL that actually responded to the content (different from request if redirected) - - - - - HttpWebResponse.Server - - - - - Cookies returned by server with the response - - - - - Headers returned by server with the response - - - - - Status of the request. Will return Error for transport errors. - HTTP errors will still return ResponseStatus.Completed, check StatusCode instead - - - - - Transport or other non-HTTP error generated while attempting request - - - - - The exception thrown during the request, if any - - - - - Container for data sent back from API including deserialized data - - Type of data to deserialize to - - - - Container for data sent back from API including deserialized data - - Type of data to deserialize to - - - - Container for data sent back from API - - - - - The RestRequest that was made to get this RestResponse - - - Mainly for debugging if ResponseStatus is not OK - - - - - MIME content type of response - - - - - Length in bytes of the response content - - - - - Encoding of the response content - - - - - String representation of response content - - - - - HTTP response status code - - - - - Description of HTTP status returned - - - - - Response content - - - - - The URL that actually responded to the content (different from request if redirected) - - - - - HttpWebResponse.Server - - - - - Cookies returned by server with the response - - - - - Headers returned by server with the response - - - - - Status of the request. Will return Error for transport errors. - HTTP errors will still return ResponseStatus.Completed, check StatusCode instead - - - - - Transport or other non-HTTP error generated while attempting request - - - - - The exception thrown during the request, if any - - - - - Deserialized entity data - - - - - Deserialized entity data - - - - - Container for data sent back from API - - - - - Parameter container for REST requests - - - - - Return a human-readable representation of this parameter - - String - - - - Name of the parameter - - - - - Value of the parameter - - - - - Type of the parameter - - - - - Representation of an HTTP header - - - - - Name of the header - - - - - Value of the header - - - - - Helper methods for validating values - - - - - Validate an integer value is between the specified values (exclusive of min/max) - - Value to validate - Exclusive minimum value - Exclusive maximum value - - - - Validate a string length - - String to be validated - Maximum length of the string - - - - Representation of an HTTP parameter (QueryString or Form value) - - - - - Name of the parameter - - - - - Value of the parameter - - - - - Tries to Authenticate with the credentials of the currently logged in user - - - - - Wrapper for System.Xml.Serialization.XmlSerializer. - - - - - HttpWebRequest wrapper - - - HttpWebRequest wrapper (async methods) - - - HttpWebRequest wrapper (sync methods) - - - - - Creates an IHttp - - - - - - Default constructor - - - - - Execute a POST request - - - - - Execute a PUT request - - - - - Execute a GET request - - - - - Execute a HEAD request - - - - - Execute an OPTIONS request - - - - - Execute a DELETE request - - - - - Execute a PATCH request - - - - - True if this HTTP request has any HTTP parameters - - - - - True if this HTTP request has any HTTP cookies - - - - - True if a request body has been specified - - - - - True if files have been set to be uploaded - - - - - UserAgent to be sent with request - - - - - Timeout in milliseconds to be used for the request - - - - - System.Net.ICredentials to be sent with request - - - - - The System.Net.CookieContainer to be used for the request - - - - - Collection of files to be sent with request - - - - - Whether or not HTTP 3xx response redirects should be automatically followed - - - - - X509CertificateCollection to be sent with request - - - - - Maximum number of automatic redirects to follow if FollowRedirects is true - - - - - HTTP headers to be sent with request - - - - - HTTP parameters (QueryString or Form values) to be sent with request - - - - - HTTP cookies to be sent with request - - - - - Request body to be sent with request - - - - - Content type of the request body. - - - - - URL to call for this request - - - - - Proxy info to be sent with request - - - - - Container for files to be uploaded with requests - - - - - Creates a file parameter from an array of bytes. - - The parameter name to use in the request. - The data to use as the file's contents. - The filename to use in the request. - The content type to use in the request. - The - - - - Creates a file parameter from an array of bytes. - - The parameter name to use in the request. - The data to use as the file's contents. - The filename to use in the request. - The using the default content type. - - - - The length of data to be sent - - - - - Provides raw data for file - - - - - Name of the file to use when uploading - - - - - MIME content type of file - - - - - Name of the parameter - - - - - Base class for OAuth 2 Authenticators. - - - Since there are many ways to authenticate in OAuth2, - this is used as a base class to differentiate between - other authenticators. - - Any other OAuth2 authenticators must derive from this - abstract class. - - - - - Access token to be used when authenticating. - - - - - Initializes a new instance of the class. - - - The access token. - - - - - Gets the access token. - - - - - The OAuth 2 authenticator using URI query parameter. - - - Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 - - - - - Initializes a new instance of the class. - - - The access token. - - - - - The OAuth 2 authenticator using the authorization request header field. - - - Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 - - - - - Stores the Authoriztion header value as "OAuth accessToken". used for performance. - - - - - Initializes a new instance of the class. - - - The access token. - - - - - Container for HTTP file - - - - - The length of data to be sent - - - - - Provides raw data for file - - - - - Name of the file to use when uploading - - - - - MIME content type of file - - - - - Name of the parameter - - - - - Reflection extensions - - - - - Retrieve an attribute from a member (property) - - Type of attribute to retrieve - Member to retrieve attribute from - - - - - Retrieve an attribute from a type - - Type of attribute to retrieve - Type to retrieve attribute from - - - - - Checks a type to see if it derives from a raw generic (e.g. List[[]]) - - - - - - - - - Helper methods for validating required values - - - - - Require a parameter to not be null - - Name of the parameter - Value of the parameter - - - - Represents the json array. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The capacity of the json array. - - - - The json representation of the array. - - The json representation of the array. - - - - Represents the json object. - - - - - The internal member dictionary. - - - - - Adds the specified key. - - The key. - The value. - - - - Determines whether the specified key contains key. - - The key. - - true if the specified key contains key; otherwise, false. - - - - - Removes the specified key. - - The key. - - - - - Tries the get value. - - The key. - The value. - - - - - Adds the specified item. - - The item. - - - - Clears this instance. - - - - - Determines whether [contains] [the specified item]. - - The item. - - true if [contains] [the specified item]; otherwise, false. - - - - - Copies to. - - The array. - Index of the array. - - - - Removes the specified item. - - The item. - - - - - Gets the enumerator. - - - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Returns a json that represents the current . - - - A json that represents the current . - - - - - Gets the at the specified index. - - - - - - Gets the keys. - - The keys. - - - - Gets the values. - - The values. - - - - Gets or sets the with the specified key. - - - - - - Gets the count. - - The count. - - - - Gets a value indicating whether this instance is read only. - - - true if this instance is read only; otherwise, false. - - - - - This class encodes and decodes JSON strings. - Spec. details, see http://www.json.org/ - - JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). - All numbers are parsed to doubles. - - - - - Parses the string json into a value - - A JSON string. - An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false - - - - Try parsing the json string into a value. - - - A JSON string. - - - The object. - - - Returns true if successfull otherwise false. - - - - - Converts a IDictionary<string,object> / IList<object> object into a JSON string - - A IDictionary<string,object> / IList<object> - Serializer strategy to use - A JSON encoded string, or null if object 'json' is not serializable - - - - Determines if a given object is numeric in any way - (can be integer, double, null, etc). - - - - - Comment of the cookie - - - - - Comment of the cookie - - - - - Indicates whether the cookie should be discarded at the end of the session - - - - - Domain of the cookie - - - - - Indicates whether the cookie is expired - - - - - Date and time that the cookie expires - - - - - Indicates that this cookie should only be accessed by the server - - - - - Name of the cookie - - - - - Path of the cookie - - - - - Port of the cookie - - - - - Indicates that the cookie should only be sent over secure channels - - - - - Date and time the cookie was created - - - - - Value of the cookie - - - - - Version of the cookie - - - - - Container for data used to make requests - - - - - Adds a file to the Files collection to be included with a POST or PUT request - (other methods do not support file uploads). - - The parameter name to use in the request - Full path to file to upload - This request - - - - Adds the bytes to the Files collection with the specified file name - - The parameter name to use in the request - The file data - The file name to use for the uploaded file - This request - - - - Adds the bytes to the Files collection with the specified file name and content type - - The parameter name to use in the request - The file data - The file name to use for the uploaded file - The MIME type of the file to upload - This request - - - - Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer - - The object to serialize - The XML namespace to use when serializing - This request - - - - Serializes obj to data format specified by RequestFormat and adds it to the request body. - - The object to serialize - This request - - - - Calls AddParameter() for all public, readable properties specified in the white list - - - request.AddObject(product, "ProductId", "Price", ...); - - The object with properties to add as parameters - The names of the properties to include - This request - - - - Calls AddParameter() for all public, readable properties of obj - - The object with properties to add as parameters - This request - - - - Add the parameter to the request - - Parameter to add - - - - - Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) - - Name of the parameter - Value of the parameter - This request - - - - Adds a parameter to the request. There are five types of parameters: - - GetOrPost: Either a QueryString value or encoded form value based on method - - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection - - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} - - Cookie: Adds the name/value pair to the HTTP request's Cookies collection - - RequestBody: Used by AddBody() (not recommended to use directly) - - Name of the parameter - Value of the parameter - The type of parameter to add - This request - - - - Shortcut to AddParameter(name, value, HttpHeader) overload - - Name of the header to add - Value of the header to add - - - - - Shortcut to AddParameter(name, value, Cookie) overload - - Name of the cookie to add - Value of the cookie to add - - - - - Shortcut to AddParameter(name, value, UrlSegment) overload - - Name of the segment to add - Value of the segment to add - - - - - Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. - By default the included JsonSerializer is used (currently using JSON.NET default serialization). - - - - - Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. - By default the included XmlSerializer is used. - - - - - Container of all HTTP parameters to be passed with the request. - See AddParameter() for explanation of the types of parameters that can be passed - - - - - Container of all the files to be uploaded with the request. - - - - - Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS - Default is GET - - - - - The Resource URL to make the request against. - Tokens are substituted with UrlSegment parameters and match by name. - Should not include the scheme or domain. Do not include leading slash. - Combined with RestClient.BaseUrl to assemble final URL: - {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) - - - // example for url token replacement - request.Resource = "Products/{ProductId}"; - request.AddParameter("ProductId", 123, ParameterType.UrlSegment); - - - - - Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. - By default XmlSerializer is used. - - - - - Used by the default deserializers to determine where to start deserializing from. - Can be used to skip container or root elements that do not have corresponding deserialzation targets. - - - - - Used by the default deserializers to explicitly set which date format string to use when parsing dates. - - - - - Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. - - - - - In general you would not need to set this directly. Used by the NtlmAuthenticator. - - - - - Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. - - - - - How many attempts were made to send this Request? - - - This Number is incremented each time the RestClient sends the request. - Useful when using Asynchronous Execution with Callbacks - - - - - Default constructor - - - - - Sets Method property to value of method - - Method to use for this request - - - - Sets Resource property - - Resource to use for this request - - - - Sets Resource and Method properties - - Resource to use for this request - Method to use for this request - - - - Sets Resource property - - Resource to use for this request - - - - Sets Resource and Method properties - - Resource to use for this request - Method to use for this request - - - - Adds a file to the Files collection to be included with a POST or PUT request - (other methods do not support file uploads). - - The parameter name to use in the request - Full path to file to upload - This request - - - - Adds the bytes to the Files collection with the specified file name - - The parameter name to use in the request - The file data - The file name to use for the uploaded file - This request - - - - Adds the bytes to the Files collection with the specified file name and content type - - The parameter name to use in the request - The file data - The file name to use for the uploaded file - The MIME type of the file to upload - This request - - - - Adds the bytes to the Files collection with the specified file name and content type - - The parameter name to use in the request - A function that writes directly to the stream. Should NOT close the stream. - The file name to use for the uploaded file - This request - - - - Adds the bytes to the Files collection with the specified file name and content type - - The parameter name to use in the request - A function that writes directly to the stream. Should NOT close the stream. - The file name to use for the uploaded file - The MIME type of the file to upload - This request - - - - Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer - - The object to serialize - The XML namespace to use when serializing - This request - - - - Serializes obj to data format specified by RequestFormat and adds it to the request body. - - The object to serialize - This request - - - - Calls AddParameter() for all public, readable properties specified in the white list - - - request.AddObject(product, "ProductId", "Price", ...); - - The object with properties to add as parameters - The names of the properties to include - This request - - - - Calls AddParameter() for all public, readable properties of obj - - The object with properties to add as parameters - This request - - - - Add the parameter to the request - - Parameter to add - - - - - Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) - - Name of the parameter - Value of the parameter - This request - - - - Adds a parameter to the request. There are four types of parameters: - - GetOrPost: Either a QueryString value or encoded form value based on method - - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection - - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} - - RequestBody: Used by AddBody() (not recommended to use directly) - - Name of the parameter - Value of the parameter - The type of parameter to add - This request - - - - Shortcut to AddParameter(name, value, HttpHeader) overload - - Name of the header to add - Value of the header to add - - - - - Shortcut to AddParameter(name, value, Cookie) overload - - Name of the cookie to add - Value of the cookie to add - - - - - Shortcut to AddParameter(name, value, UrlSegment) overload - - Name of the segment to add - Value of the segment to add - - - - - Internal Method so that RestClient can increase the number of attempts - - - - - Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. - By default the included JsonSerializer is used (currently using JSON.NET default serialization). - - - - - Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. - By default the included XmlSerializer is used. - - - - - Container of all HTTP parameters to be passed with the request. - See AddParameter() for explanation of the types of parameters that can be passed - - - - - Container of all the files to be uploaded with the request. - - - - - Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS - Default is GET - - - - - The Resource URL to make the request against. - Tokens are substituted with UrlSegment parameters and match by name. - Should not include the scheme or domain. Do not include leading slash. - Combined with RestClient.BaseUrl to assemble final URL: - {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) - - - // example for url token replacement - request.Resource = "Products/{ProductId}"; - request.AddParameter("ProductId", 123, ParameterType.UrlSegment); - - - - - Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. - By default XmlSerializer is used. - - - - - Used by the default deserializers to determine where to start deserializing from. - Can be used to skip container or root elements that do not have corresponding deserialzation targets. - - - - - A function to run prior to deserializing starting (e.g. change settings if error encountered) - - - - - Used by the default deserializers to explicitly set which date format string to use when parsing dates. - - - - - Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. - - - - - In general you would not need to set this directly. Used by the NtlmAuthenticator. - - - - - Gets or sets a user-defined state object that contains information about a request and which can be later - retrieved when the request completes. - - - - - Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. - - - - - How many attempts were made to send this Request? - - - This Number is incremented each time the RestClient sends the request. - Useful when using Asynchronous Execution with Callbacks - - - - - Extension method overload! - - - - - Save a byte array to a file - - Bytes to save - Full path to save file to - - - - Read a stream into a byte array - - Stream to read - byte[] - - - - Copies bytes from one stream to another - - The input stream. - The output stream. - - - - Converts a byte array to a string, using its byte order mark to convert it to the right encoding. - http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx - - An array of bytes to convert - The byte as a string. - - - - Allows control how class and property names and values are serialized by XmlSerializer - Currently not supported with the JsonSerializer - When specified at the property level the class-level specification is overridden - - - - - Called by the attribute when NameStyle is speficied - - The string to transform - String - - - - The name to use for the serialized element - - - - - Sets the value to be serialized as an Attribute instead of an Element - - - - - The culture to use when serializing - - - - - Transforms the casing of the name based on the selected value. - - - - - The order to serialize the element. Default is int.MaxValue. - - - - - Options for transforming casing of element names - - - - - Executes the request and callback asynchronously, authenticating if needed - - The IRestClient this method extends - Request to be executed - Callback function to be executed upon completion - - - - Executes the request and callback asynchronously, authenticating if needed - - The IRestClient this method extends - Target deserialization type - Request to be executed - Callback function to be executed upon completion providing access to the async handle - - - - Default XML Serializer - - - - - Default constructor, does not specify namespace - - - - - Specify the namespaced to be used when serializing - - XML namespace - - - - Serialize the object as XML - - Object to serialize - XML as string - - - - Name of the root element to use when serializing - - - - - XML namespace to use when serializing - - - - - Format string to use when serializing dates - - - - - Content type for serialized content - - - - - Decodes an HTML-encoded string and returns the decoded string. - - The HTML string to decode. - The decoded text. - - - - Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. - - The HTML string to decode - The TextWriter output stream containing the decoded string. - - - - HTML-encodes a string and sends the resulting output to a TextWriter output stream. - - The string to encode. - The TextWriter output stream containing the encoded string. - - - - All text parameters are UTF-8 encoded (per section 5.1). - - - - - - Generates a random 16-byte lowercase alphanumeric string. - - - - - - - Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" - - - - - - - Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" - - - A specified point in time. - - - - - URL encodes a string based on section 5.1 of the OAuth spec. - Namely, percent encoding with [RFC3986], avoiding unreserved characters, - upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. - - - - - - - URL encodes a string based on section 5.1 of the OAuth spec. - Namely, percent encoding with [RFC3986], avoiding unreserved characters, - upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. - - - - - - - Sorts a collection of key-value pairs by name, and then value if equal, - concatenating them into a single string. This string should be encoded - prior to, or after normalization is run. - - - - - - - - Sorts a by name, and then value if equal. - - A collection of parameters to sort - A sorted parameter collection - - - - Creates a request URL suitable for making OAuth requests. - Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. - Resulting URLs must be lower case. - - - The original request URL - - - - - Creates a request elements concatentation value to send with a request. - This is also known as the signature base. - - - - The request's HTTP method type - The request URL - The request's parameters - A signature base string - - - - Creates a signature value given a signature base and the consumer secret. - This method is used when the token secret is currently unknown. - - - The hashing method - The signature base - The consumer key - - - - - Creates a signature value given a signature base and the consumer secret. - This method is used when the token secret is currently unknown. - - - The hashing method - The treatment to use on a signature value - The signature base - The consumer key - - - - - Creates a signature value given a signature base and the consumer secret and a known token secret. - - - The hashing method - The signature base - The consumer secret - The token secret - - - - - Creates a signature value given a signature base and the consumer secret and a known token secret. - - - The hashing method - The treatment to use on a signature value - The signature base - The consumer secret - The token secret - - - - - Uses Uri.EscapeDataString() based on recommendations on MSDN - http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx - - - - - Check that a string is not null or empty - - String to check - bool - - - - Remove underscores from a string - - String to process - string - - - - Parses most common JSON date formats - - JSON value to parse - DateTime - - - - Remove leading and trailing " from a string - - String to parse - String - - - - Checks a string to see if it matches a regex - - String to check - Pattern to match - bool - - - - Converts a string to pascal case - - String to convert - string - - - - Converts a string to pascal case with the option to remove underscores - - String to convert - Option to remove underscores - - - - - Converts a string to camel case - - String to convert - String - - - - Convert the first letter of a string to lower case - - String to convert - string - - - - Checks to see if a string is all uppper case - - String to check - bool - - - - Add underscores to a pascal-cased string - - String to convert - string - - - - Add dashes to a pascal-cased string - - String to convert - string - - - - Return possible variants of a name for name matching. - - String to convert - The culture to use for conversion - IEnumerable<string> - - - - Default JSON serializer for request bodies - Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes - - - - - Default serializer - - - - - Serialize the object as JSON - - Object to serialize - JSON as String - - - - Unused for JSON Serialization - - - - - Unused for JSON Serialization - - - - - Unused for JSON Serialization - - - - - Content type for serialized content - - - - - XML Extension Methods - - - - - Returns the name of an element with the namespace if specified - - Element name - XML Namespace - - - - - Types of parameters that can be added to requests - - - - - Data formats - - - - - HTTP method to use when making requests - - - - - Format strings for commonly-used date formats - - - - - .NET format string for ISO 8601 date format - - - - - .NET format string for roundtrip date format - - - - - Status for responses (surprised?) - - - - - Wrapper for System.Xml.Serialization.XmlSerializer. - - - - - Default constructor, does not specify namespace - - - - - Specify the namespaced to be used when serializing - - XML namespace - - - - Serialize the object as XML - - Object to serialize - XML as string - - - - Name of the root element to use when serializing - - - - - XML namespace to use when serializing - - - - - Format string to use when serializing dates - - - - - Content type for serialized content - - - - - Encoding for serialized content - - - - - Need to subclass StringWriter in order to override Encoding - - - - - Representation of an HTTP cookie - - - - - Comment of the cookie - - - - - Comment of the cookie - - - - - Indicates whether the cookie should be discarded at the end of the session - - - - - Domain of the cookie - - - - - Indicates whether the cookie is expired - - - - - Date and time that the cookie expires - - - - - Indicates that this cookie should only be accessed by the server - - - - - Name of the cookie - - - - - Path of the cookie - - - - - Port of the cookie - - - - - Indicates that the cookie should only be sent over secure channels - - - - - Date and time the cookie was created - - - - - Value of the cookie - - - - - Version of the cookie - - - - - Allows control how class and property names and values are deserialized by XmlAttributeDeserializer - - - - - The name to use for the serialized element - - - - - Sets if the property to Deserialize is an Attribute or Element (Default: false) - - - - - A class to encapsulate OAuth authentication flow. - - - - - - Generates a instance to pass to an - for the purpose of requesting an - unauthorized request token. - - The HTTP method for the intended request - - - - - - Generates a instance to pass to an - for the purpose of requesting an - unauthorized request token. - - The HTTP method for the intended request - Any existing, non-OAuth query parameters desired in the request - - - - - - Generates a instance to pass to an - for the purpose of exchanging a request token - for an access token authorized by the user at the Service Provider site. - - The HTTP method for the intended request - - - - - Generates a instance to pass to an - for the purpose of exchanging a request token - for an access token authorized by the user at the Service Provider site. - - The HTTP method for the intended request - - Any existing, non-OAuth query parameters desired in the request - - - - Generates a instance to pass to an - for the purpose of exchanging user credentials - for an access token authorized by the user at the Service Provider site. - - The HTTP method for the intended request - - Any existing, non-OAuth query parameters desired in the request - - - - - - - - - - - - + + + + RestSharp.Silverlight + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authoriztion header value as "OAuth accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + Converts a string to camel case + + String to convert + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + + + Execute an async POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + Collection of files to be sent with request + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + URL to call for this request + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + + + + + + + + + + + + + + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = "http://example.com"; + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + diff --git a/packages/RestSharp.104.1/readme.txt b/packages/RestSharp.104.1/readme.txt new file mode 100644 index 0000000..64e7da0 --- /dev/null +++ b/packages/RestSharp.104.1/readme.txt @@ -0,0 +1,19 @@ +*** IMPORTANT CHANGE IN RESTSHARP VERSION 103 *** + +In 103.0, JSON.NET was removed as a dependency. + +If this is still installed in your project and no other libraries depend on +it you may remove it from your installed packages. + +There is one breaking change: the default Json*Serializer* is no longer +compatible with Json.NET. To use Json.NET for serialization, copy the code +from https://github.com/restsharp/RestSharp/blob/86b31f9adf049d7fb821de8279154f41a17b36f7/RestSharp/Serializers/JsonSerializer.cs +and register it with your client: + +var client = new RestClient(); +client.JsonSerializer = new YourCustomSerializer(); + +The default Json*Deserializer* should be 100% compatible. + +If you run into any compatibility issues with deserialization, +please report it to http://groups.google.com/group/restsharp \ No newline at end of file diff --git a/packages/repositories.config b/packages/repositories.config index 594371e..d540560 100644 --- a/packages/repositories.config +++ b/packages/repositories.config @@ -1,4 +1,6 @@ - - - + + + + + \ No newline at end of file From 47084990ec6c72977077751a6c036556bccc4281 Mon Sep 17 00:00:00 2001 From: Damian Karzon Date: Mon, 17 Jun 2013 20:31:03 +1000 Subject: [PATCH 09/65] v1.5 - Shares can now use long Url --- .gitignore | 1 + DropNet.Tests/FileSyncTests.cs | 14 +++++++++++++- DropNet/Client/Files.Async.cs | 15 ++++++++++++++- DropNet/Client/Files.Sync.cs | 4 ++-- DropNet/Client/Files.Task.cs | 4 ++-- DropNet/Helpers/RequestHelper.cs | 3 ++- dropnet.nuspec | 4 ++-- 7 files changed, 36 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 516a5d3..c336050 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,4 @@ download/ .DS_Store *.pidb *.userprefs +/DropNet.Tests/TestVariables.cs diff --git a/DropNet.Tests/FileSyncTests.cs b/DropNet.Tests/FileSyncTests.cs index ca87cac..ea090b4 100644 --- a/DropNet.Tests/FileSyncTests.cs +++ b/DropNet.Tests/FileSyncTests.cs @@ -195,7 +195,19 @@ public void Can_Create_Folder() [TestMethod] public void Can_Shares() { - _client.GetShare("/Test/Getting Started.rtf"); + var shareResponse = _client.GetShare("/Test/Getting Started.rtf"); + + Assert.IsNotNull(shareResponse); + Assert.IsNotNull(shareResponse.Url); + } + + [TestMethod] + public void Can_Shares_Long() + { + var shareResponse = _client.GetShare("/Test/Getting Started.rtf", false); + + Assert.IsNotNull(shareResponse); + Assert.IsNotNull(shareResponse.Url); } [TestMethod] diff --git a/DropNet/Client/Files.Async.cs b/DropNet/Client/Files.Async.cs index 5f7d86c..b473b7d 100644 --- a/DropNet/Client/Files.Async.cs +++ b/DropNet/Client/Files.Async.cs @@ -254,10 +254,23 @@ public void CreateFolderAsync(string path, Action success, ActionSuccess callback /// Failure callback public void GetShareAsync(string path, Action success, Action failure) + { + GetShareAsync(path, true, success, failure); + } + + /// + /// Creates and returns a shareable link to files or folders. + /// Note: Links created by the /shares API call expire after thirty days. + /// + /// The path + /// True to shorten the share url + /// Success callback + /// Failure callback + public void GetShareAsync(string path, bool shortUrl, Action success, Action failure) { if (!path.StartsWith("/")) path = "/" + path; - var request = _requestHelper.CreateShareRequest(path, Root); + var request = _requestHelper.CreateShareRequest(path, Root, shortUrl); ExecuteAsync(ApiType.Base, request, success, failure); } diff --git a/DropNet/Client/Files.Sync.cs b/DropNet/Client/Files.Sync.cs index 4c580fa..651169d 100644 --- a/DropNet/Client/Files.Sync.cs +++ b/DropNet/Client/Files.Sync.cs @@ -295,14 +295,14 @@ public MetaData CreateFolder(string path) ///

    0ND}^=XwndhFoY1I0<+kQA{Er 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 ShRp!aUa-QrAe>gM% literal 0 HcmV?d00001 diff --git a/packages/RestSharp.104.1/RestSharp.104.1.nuspec b/packages/RestSharp.104.1/RestSharp.104.1.nuspec new file mode 100644 index 0000000..fb748c9 --- /dev/null +++ b/packages/RestSharp.104.1/RestSharp.104.1.nuspec @@ -0,0 +1,19 @@ + + + + RestSharp + 104.1 + RestSharp + John Sheehan, RestSharp Community + John Sheehan, RestSharp Community + https://github.com/restsharp/RestSharp/blob/master/LICENSE.txt + http://restsharp.org/ + http://dl.dropbox.com/u/1827/restsharp100.png + false + Simple REST and HTTP API Client + For full release notes see https://github.com/restsharp/RestSharp/blob/master/releasenotes.markdown + + en-US + REST HTTP API JSON XML + + \ No newline at end of file diff --git a/packages/RestSharp.104.1/lib/net35-client/RestSharp.dll b/packages/RestSharp.104.1/lib/net35-client/RestSharp.dll new file mode 100644 index 0000000000000000000000000000000000000000..66e381771de20f8c5dd8c6db91e0ed09eb074cbf GIT binary patch literal 146944 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�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�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 + + + RestSharp + + + +

  • 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

  • /// /// - public ShareResponse GetShare(string path) + public ShareResponse GetShare(string path, bool shortUrl = true) { if (!path.StartsWith("/")) { path = "/" + path; } - var request = _requestHelper.CreateShareRequest(path, Root); + var request = _requestHelper.CreateShareRequest(path, Root, shortUrl); return Execute(ApiType.Base, request); } diff --git a/DropNet/Client/Files.Task.cs b/DropNet/Client/Files.Task.cs index fd60bc1..8361254 100644 --- a/DropNet/Client/Files.Task.cs +++ b/DropNet/Client/Files.Task.cs @@ -120,11 +120,11 @@ public Task CreateFolderTask(string path, Action success, Ac return ExecuteTask(ApiType.Base, request); } - public Task GetShareTask(string path) + public Task GetShareTask(string path, bool shortUrl = true) { if (!path.StartsWith("/")) path = "/" + path; - var request = _requestHelper.CreateShareRequest(path, Root); + var request = _requestHelper.CreateShareRequest(path, Root, shortUrl); return ExecuteTask(ApiType.Base, request); } diff --git a/DropNet/Helpers/RequestHelper.cs b/DropNet/Helpers/RequestHelper.cs index 19824e6..4ee0b2b 100644 --- a/DropNet/Helpers/RequestHelper.cs +++ b/DropNet/Helpers/RequestHelper.cs @@ -40,13 +40,14 @@ public RestRequest CreateVersionsRequest(string path, string root, int rev_limit return request; } - public RestRequest CreateShareRequest(string path, string root) + public RestRequest CreateShareRequest(string path, string root, bool shortUrl) { var request = new RestRequest(Method.GET); request.Resource = "{version}/shares/{root}{path}"; request.AddParameter("version", _version, ParameterType.UrlSegment); request.AddParameter("path", path, ParameterType.UrlSegment); request.AddParameter("root", root, ParameterType.UrlSegment); + request.AddParameter("short_url", shortUrl); return request; } diff --git a/dropnet.nuspec b/dropnet.nuspec index 37d6fec..4ca34ce 100644 --- a/dropnet.nuspec +++ b/dropnet.nuspec @@ -2,7 +2,7 @@ DropNet - 1.9.4.1 + 1.9.5 Damian Karzon, Github Contributors Damian Karzon .NET Client for the Dropbox API (.NET 3.5 and Windows Phone) @@ -16,7 +16,7 @@ - + From e9b921578273bf8a4183f0abe7e82b288f8092bd Mon Sep 17 00:00:00 2001 From: Damian Karzon Date: Mon, 17 Jun 2013 20:32:46 +1000 Subject: [PATCH 10/65] nuspec update --- dropnet.nuspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dropnet.nuspec b/dropnet.nuspec index 4ca34ce..931cc8a 100644 --- a/dropnet.nuspec +++ b/dropnet.nuspec @@ -5,7 +5,7 @@ 1.9.5 Damian Karzon, Github Contributors Damian Karzon - .NET Client for the Dropbox API (.NET 3.5 and Windows Phone) + .NET Client for the Dropbox API (.NET 4 and Windows Phone) en-AU http://dkdevelopment.net/what-im-doing/dropnet/ https://github.com/dkarzon/DropNet/blob/master/LICENSE.txt From 2aea136e890559645d5d80561a951b20e65d5643 Mon Sep 17 00:00:00 2001 From: John Hoerr Date: Tue, 25 Jun 2013 09:09:44 -0400 Subject: [PATCH 11/65] Adding OAuth2 request authenticator --- DropNet/Authenticators/OAuth2Authenticator.cs | 41 +++++++++++++++++++ DropNet/DropNet.csproj | 1 + 2 files changed, 42 insertions(+) create mode 100644 DropNet/Authenticators/OAuth2Authenticator.cs diff --git a/DropNet/Authenticators/OAuth2Authenticator.cs b/DropNet/Authenticators/OAuth2Authenticator.cs new file mode 100644 index 0000000..5e0c0b2 --- /dev/null +++ b/DropNet/Authenticators/OAuth2Authenticator.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp; + +namespace DropNet.Authenticators +{ + public class OAuth2Authenticator : RestSharp.OAuth2Authenticator + { + public OAuth2Authenticator(string accessToken): base(accessToken) + { + } + + public override void Authenticate(IRestClient client, IRestRequest request) + { + request.AddHeader("Authorization", string.Format("Bearer {0}", AccessToken)); + } + } + + /// + /// OAuth 2.0 supports two authorization flows. For more information on the two flows, see Section 1.3 of the OAuth 2 spec. https://tools.ietf.org/html/draft-ietf-oauth-v2-31#section-1.3 + /// + public enum OAuth2AuthorizationFlow + { + /// + /// The token or implicit grant flow returns the bearer token via the redirect_uri callback, rather than requiring your app to make a second call to a server. This is useful for pure client-side apps, such as mobile apps or JavaScript-based apps. + /// + Token, + /// + /// The code flow returns a code via the redirect_uri callback which should then be converted into a bearer token using the /oauth2/token call. This is the recommended flow for apps that are running on a server. + /// + Code, + } + + public enum AuthorizationMethod + { + OAuth1, + OAuth2 + } +} diff --git a/DropNet/DropNet.csproj b/DropNet/DropNet.csproj index 38c4fbf..6c6d8fd 100644 --- a/DropNet/DropNet.csproj +++ b/DropNet/DropNet.csproj @@ -62,6 +62,7 @@ + Code From 1a49a991787dfcef870cf3dc80a008abce11f20e Mon Sep 17 00:00:00 2001 From: John Hoerr Date: Tue, 25 Jun 2013 09:36:04 -0400 Subject: [PATCH 12/65] Client ctor now supports OAuth2 Base ctor now requires an AuthenticationMode (OAuth1/OAuth2) to be set; defaults to OAuth1. Added ctor overload that just takes an OAuth2 access token and sets the Mode to OAuth2. SetAuthProviders() now delegates the creation of IAuthenticator to GetAuthenticator(), which respects the AuthenticationMode setting. Refactored some duplicated effort out of Client ctor. --- DropNet.WinRT/DropNet.WinRT.csproj | 5 +- DropNet/Authenticators/OAuth2Authenticator.cs | 19 +++---- DropNet/Client/Client.cs | 51 +++++++++++++------ 3 files changed, 47 insertions(+), 28 deletions(-) diff --git a/DropNet.WinRT/DropNet.WinRT.csproj b/DropNet.WinRT/DropNet.WinRT.csproj index ed3d554..de93796 100644 --- a/DropNet.WinRT/DropNet.WinRT.csproj +++ b/DropNet.WinRT/DropNet.WinRT.csproj @@ -104,6 +104,9 @@ Authenticators\OAuthAuthenticator.cs + + Authenticators\OAuth2Authenticator.cs + Client\Client.cs @@ -164,4 +167,4 @@ --> - \ No newline at end of file + diff --git a/DropNet/Authenticators/OAuth2Authenticator.cs b/DropNet/Authenticators/OAuth2Authenticator.cs index 5e0c0b2..b4f3a86 100644 --- a/DropNet/Authenticators/OAuth2Authenticator.cs +++ b/DropNet/Authenticators/OAuth2Authenticator.cs @@ -1,14 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RestSharp; +using RestSharp; namespace DropNet.Authenticators { public class OAuth2Authenticator : RestSharp.OAuth2Authenticator { - public OAuth2Authenticator(string accessToken): base(accessToken) + public OAuth2Authenticator(string accessToken) : base(accessToken) { } @@ -19,23 +15,24 @@ public override void Authenticate(IRestClient client, IRestRequest request) } /// - /// OAuth 2.0 supports two authorization flows. For more information on the two flows, see Section 1.3 of the OAuth 2 spec. https://tools.ietf.org/html/draft-ietf-oauth-v2-31#section-1.3 + /// OAuth 2.0 supports two authorization flows. For more information on the two flows, see Section 1.3 of the OAuth 2 spec. https://tools.ietf.org/html/draft-ietf-oauth-v2-31#section-1.3 /// public enum OAuth2AuthorizationFlow { /// - /// The token or implicit grant flow returns the bearer token via the redirect_uri callback, rather than requiring your app to make a second call to a server. This is useful for pure client-side apps, such as mobile apps or JavaScript-based apps. + /// The token or implicit grant flow returns the bearer token via the redirect_uri callback, rather than requiring your app to make a second call to a server. This is useful for pure client-side apps, such as mobile apps or JavaScript-based apps. /// Token, + /// - /// The code flow returns a code via the redirect_uri callback which should then be converted into a bearer token using the /oauth2/token call. This is the recommended flow for apps that are running on a server. + /// The code flow returns a code via the redirect_uri callback which should then be converted into a bearer token using the /oauth2/token call. This is the recommended flow for apps that are running on a server. /// Code, } - public enum AuthorizationMethod + public enum AuthenticationMethod { OAuth1, OAuth2 } -} +} \ No newline at end of file diff --git a/DropNet/Client/Client.cs b/DropNet/Client/Client.cs index 126651d..b8e65ef 100644 --- a/DropNet/Client/Client.cs +++ b/DropNet/Client/Client.cs @@ -8,6 +8,7 @@ using RestSharp; using RestSharp.Deserializers; using System.Threading.Tasks; +using OAuth2Authenticator = DropNet.Authenticators.OAuth2Authenticator; namespace DropNet { @@ -42,6 +43,7 @@ public UserLogin UserLogin private readonly string _apiKey; private readonly string _appsecret; + private readonly AuthenticationMethod _authenticationMethod; private RestClient _restClient; private RestClient _restClientContent; @@ -64,30 +66,41 @@ string Root /// /// The Api Key to use for the Dropbox Requests /// The Api Secret to use for the Dropbox Requests + /// The method (OAuth1/OAuth2) to use for user authentication. /// The proxy to use for web requests - public DropNetClient(string apiKey, string appSecret) + public DropNetClient(string apiKey, string appSecret, AuthenticationMethod authenticationMethod = AuthenticationMethod.OAuth1) { + LoadClient(); _apiKey = apiKey; _appsecret = appSecret; + _authenticationMethod = authenticationMethod; + UserLogin = null; + } - LoadClient(); + /// + /// Creates an instance of the DropNetClient given an API Key/Secret and an OAuth2 Access Token + /// + /// The Api Key to use for the Dropbox Requests + /// The Api Secret to use for the Dropbox Requests + /// The OAuth2 access token + /// The proxy to use for web requests + public DropNetClient(string apiKey, string appSecret, string accessToken) + : this(apiKey, appSecret, AuthenticationMethod.OAuth2) + { + UserLogin = new UserLogin { Token = accessToken }; } /// - /// Creates an instance of the DropNetClient given an API Key/Secret and a User Token/Secret + /// Creates an instance of the DropNetClient given an API Key/Secret and an OAuth1 User Token/Secret /// /// The Api Key to use for the Dropbox Requests /// The Api Secret to use for the Dropbox Requests - /// The User authentication token - /// The Users matching secret + /// The OAuth1 User authentication token + /// The OAuth1 Users matching secret /// The proxy to use for web requests public DropNetClient(string apiKey, string appSecret, string userToken, string userSecret) + :this(apiKey, appSecret) { - _apiKey = apiKey; - _appsecret = appSecret; - - LoadClient(); - UserLogin = new UserLogin { Token = userToken, Secret = userSecret }; } @@ -332,14 +345,20 @@ private UserLogin GetUserLoginFromParams(string urlParams) private void SetAuthProviders() { - if (UserLogin != null) - { - //Set the OauthAuthenticator only when the UserLogin property changes - _restClientContent.Authenticator = new OAuthAuthenticator(_restClientContent.BaseUrl, _apiKey, _appsecret, UserLogin.Token, UserLogin.Secret); - _restClient.Authenticator = new OAuthAuthenticator(_restClient.BaseUrl, _apiKey, _appsecret, UserLogin.Token, UserLogin.Secret); - } + _restClientContent.Authenticator = GetAuthenticator(_restClientContent.BaseUrl); + _restClient.Authenticator = GetAuthenticator(_restClient.BaseUrl); } + private IAuthenticator GetAuthenticator(string baseUrl) + { + var userToken = UserLogin == null ? null : UserLogin.Token; + var userSecret = UserLogin == null ? null : UserLogin.Secret; + return _authenticationMethod.Equals(AuthenticationMethod.OAuth1) + ? (IAuthenticator)(new OAuthAuthenticator(baseUrl, _apiKey, _appsecret, userToken, userSecret)) + : new OAuth2Authenticator(userToken); + } + + enum ApiType { Base, From 747eb5e3b593da291c3a99ce4e4c9e2c6e112d44 Mon Sep 17 00:00:00 2001 From: John Hoerr Date: Tue, 25 Jun 2013 10:21:20 -0400 Subject: [PATCH 13/65] Added OAuth2 auth url and access token fetching - Added Client.BuildAuthorizationUrl overload for generating the OAuth2 authorization URL. - Added User.* GetAccessToken overload for fetching an OAuth2 access token after being redirected back to the calling application. - Refactored deprecated IRestClient.BaseUrl & Authenticator setter code out of User.* --- DropNet.Tests/UserTests1.cs | 52 ++++++++++++++++ DropNet/Authenticators/OAuth2Authenticator.cs | 22 ++++--- DropNet/Client/Client.cs | 41 ++++++++++-- DropNet/Client/User.Async.cs | 35 ++++++----- DropNet/Client/User.Sync.cs | 41 ++++++------ DropNet/DropNet.csproj | 1 + DropNet/Helpers/RequestHelper.cs | 62 +++++++++++++++++++ DropNet/Models/OAuth2AccessToken.cs | 18 ++++++ 8 files changed, 220 insertions(+), 52 deletions(-) create mode 100644 DropNet/Models/OAuth2AccessToken.cs diff --git a/DropNet.Tests/UserTests1.cs b/DropNet.Tests/UserTests1.cs index 1bc7b60..f2528e8 100644 --- a/DropNet.Tests/UserTests1.cs +++ b/DropNet.Tests/UserTests1.cs @@ -1,4 +1,5 @@ using System; +using DropNet.Authenticators; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace DropNet.Tests @@ -66,5 +67,56 @@ public void Can_Get_AccountInfo() Assert.IsNotNull(accountInfo.uid); } + [TestMethod] + public void BuildOAuth2AuthorizationUrl_RedirectUriIsRequired() + { + try + { + _client.BuildAuthorizeUrl(OAuth2AuthorizationFlow.Code, null); + Assert.Fail(); + } + catch (ArgumentNullException ane) + { + Assert.IsNotNull(ane); + } + catch (Exception) + { + Assert.Fail(); + } + } + + [TestMethod] + public void BuildOAuth2AuthorizationUrl_CodeFlow_NoState() + { + TestOAuth2AuthorizationUrl(OAuth2AuthorizationFlow.Code, "code"); + } + + [TestMethod] + public void BuildOAuth2AuthorizationUrl_CodeFlow_WithState() + { + TestOAuth2AuthorizationUrl(OAuth2AuthorizationFlow.Code, "code", "foobar"); + } + + [TestMethod] + public void BuildOAuth2AuthorizationUrl_TokenFlow_NoState() + { + TestOAuth2AuthorizationUrl(OAuth2AuthorizationFlow.Token, "token"); + } + + [TestMethod] + public void BuildOAuth2AuthorizationUrl_TokenFlow_WithState() + { + TestOAuth2AuthorizationUrl(OAuth2AuthorizationFlow.Token, "token", "foobar"); + } + + private void TestOAuth2AuthorizationUrl(OAuth2AuthorizationFlow oAuth2AuthorizationFlow, string expectedResponseType, string state = null) + { + const string expectedFormat = "https://api.dropbox.com/1/oauth2/authorize?response_type={0}&client_id={1}&redirect_uri=http://example.com{2}"; + var stateQuery = string.IsNullOrWhiteSpace(state) ? string.Empty : string.Format("&state={0}", state); + var expected = string.Format(expectedFormat, expectedResponseType, TestVariables.ApiKey, stateQuery); + var actual = _client.BuildAuthorizeUrl(oAuth2AuthorizationFlow, "http://example.com", state); + Assert.IsNotNull(actual); + Assert.AreEqual(expected, actual); + } } } diff --git a/DropNet/Authenticators/OAuth2Authenticator.cs b/DropNet/Authenticators/OAuth2Authenticator.cs index b4f3a86..b90a68d 100644 --- a/DropNet/Authenticators/OAuth2Authenticator.cs +++ b/DropNet/Authenticators/OAuth2Authenticator.cs @@ -15,24 +15,26 @@ public override void Authenticate(IRestClient client, IRestRequest request) } /// - /// OAuth 2.0 supports two authorization flows. For more information on the two flows, see Section 1.3 of the OAuth 2 spec. https://tools.ietf.org/html/draft-ietf-oauth-v2-31#section-1.3 + /// OAuth 2.0 supports two authorization flows. Once the user has authorized your application + /// (via the URL provided by BuildAuthorizationUrl) Dropbox will redirect the user back to your + /// site/application with query string parameters that vary based on the authorization flow defined + /// here. For a description of these parameters, see https://www.dropbox.com/developers/core/docs#oa2-authorize. + /// See also Section 1.3 of the OAuth 2 spec at https://tools.ietf.org/html/draft-ietf-oauth-v2-31#section-1.3 /// public enum OAuth2AuthorizationFlow { /// - /// The token or implicit grant flow returns the bearer token via the redirect_uri callback, rather than requiring your app to make a second call to a server. This is useful for pure client-side apps, such as mobile apps or JavaScript-based apps. + /// The 'token' (or implicit) grant flow returns the bearer token via the redirect_uri callback, + /// rather than requiring your app to make a second call to a server. This is useful for pure + /// client-side apps, such as mobile apps or JavaScript-based apps. /// Token, /// - /// The code flow returns a code via the redirect_uri callback which should then be converted into a bearer token using the /oauth2/token call. This is the recommended flow for apps that are running on a server. + /// The 'code' flow returns a code via the redirect_uri callback which should then be converted + /// into a bearer token using the GetAccessToken(code, ) call. This is the recommended flow for apps + /// that are running on a server. /// Code, - } - - public enum AuthenticationMethod - { - OAuth1, - OAuth2 - } + } } \ No newline at end of file diff --git a/DropNet/Client/Client.cs b/DropNet/Client/Client.cs index b8e65ef..bf2b9df 100644 --- a/DropNet/Client/Client.cs +++ b/DropNet/Client/Client.cs @@ -66,7 +66,7 @@ string Root /// /// The Api Key to use for the Dropbox Requests /// The Api Secret to use for the Dropbox Requests - /// The method (OAuth1/OAuth2) to use for user authentication. + /// The authentication method to use. /// The proxy to use for web requests public DropNetClient(string apiKey, string appSecret, AuthenticationMethod authenticationMethod = AuthenticationMethod.OAuth1) { @@ -147,10 +147,25 @@ public string BuildAuthorizeUrl(UserLogin userLogin, string callback = null) { throw new ArgumentNullException("userLogin"); } + RestRequest request = _requestHelper.BuildAuthorizeUrl(userLogin.Token, callback); + return _restClient.BuildUri(request).ToString(); + } - //Go 1-Liner! - return string.Format("https://www.dropbox.com/1/oauth/authorize?oauth_token={0}{1}", userLogin.Token.UrlEncode(), - (string.IsNullOrEmpty(callback) ? string.Empty : "&oauth_callback=" + callback.UrlEncode())); + /// + /// This starts the OAuth 2.0 authorization flow. This isn't an API call—it's the web page that lets the user sign in to Dropbox and authorize your app. The user must be redirected to the page over HTTPS and it should be presented to the user through their web browser. After the user decides whether or not to authorize your app, they will be redirected to the URL specified by the 'redirectUri'. + /// + /// The type of authorization flow to use. See the OAuth2AuthorizationFlow enum documentation for more information. + /// Where to redirect the user after authorization has completed. This must be the exact URI registered in the app console (https://www.dropbox.com/developers/apps), though localhost and 127.0.0.1 are always accepted. A redirect URI is required for a token flow, but optional for code. If the redirect URI is omitted, the code will be presented directly to the user and they will be invited to enter the information in your app. + /// Arbitrary data that will be passed back to your redirect URI. This parameter can be used to track a user through the authorization flow in order to prevent cross-site request forgery (CRSF) attacks. + /// A URL to which your app should redirect the user for authorization. After the user authorizes your app, they will be sent to your redirect URI. The type of response varies based on the 'oauth2AuthorizationFlow' argument. . + public string BuildAuthorizeUrl(OAuth2AuthorizationFlow oAuth2AuthorizationFlow, string redirectUri, string state = null) + { + if (string.IsNullOrWhiteSpace(redirectUri)) + { + throw new ArgumentNullException("redirectUri"); + } + RestRequest request = _requestHelper.BuildOAuth2AuthorizeUrl(oAuth2AuthorizationFlow, _apiKey, redirectUri, state); + return _restClient.BuildUri(request).ToString(); } #if !WINDOWS_PHONE && !WINRT @@ -358,11 +373,27 @@ private IAuthenticator GetAuthenticator(string baseUrl) : new OAuth2Authenticator(userToken); } - enum ApiType { Base, Content } + + /// + /// Dropbox supports versions 1 and 2 of the OAuth spec. + /// + public enum AuthenticationMethod + { + /// + /// OAuth1 is the 'standard' authentication mode for Dropbox. For more information see https://www.dropbox.com/developers/core/docs#request-token + /// + OAuth1, + + /// + /// OAuth2 support in Dropbox was implemented in 2013. For more information see https://www.dropbox.com/developers/core/docs#oa2-authorize + /// + OAuth2 + } + } } diff --git a/DropNet/Client/User.Async.cs b/DropNet/Client/User.Async.cs index a512e50..b89c635 100644 --- a/DropNet/Client/User.Async.cs +++ b/DropNet/Client/User.Async.cs @@ -13,11 +13,7 @@ public partial class DropNetClient /// public void GetTokenAsync(Action success, Action failure) { - _restClient.BaseUrl = ApiBaseUrl; - _restClient.Authenticator = new OAuthAuthenticator(_restClient.BaseUrl, _apiKey, _appsecret); - var request = _requestHelper.CreateTokenRequest(); - ExecuteAsync(ApiType.Base, request, response => { var userLogin = GetUserLoginFromParams(response.Content); @@ -33,11 +29,7 @@ public void GetTokenAsync(Action success, Action fa /// public void GetAccessTokenAsync(Action success, Action failure) { - _restClient.BaseUrl = ApiBaseUrl; - _restClient.Authenticator = new OAuthAuthenticator(_restClient.BaseUrl, _apiKey, _appsecret, UserLogin.Token, UserLogin.Secret); - var request = _requestHelper.CreateAccessTokenRequest(); - ExecuteAsync(ApiType.Base, request, response => { var userLogin = GetUserLoginFromParams(response.Content); @@ -46,6 +38,25 @@ public void GetAccessTokenAsync(Action success, Action + /// Acquire an OAuth2 bearer token once the user has authorized the app. This endpoint only applies to apps using the AuthorizationFlow.Code flow. + /// + /// Action to perform with the OAuth2 access token + /// + /// The authorization code provided by Dropbox when the user was redirected back to your site. + /// The redirect Uri for your site. This is only used to validate that it matches the original /oauth2/authorize; the user will not be redirected again. + public UserLogin GetAccessTokenAsync(Action success, Action failure, string code, string redirectUri) + { + RestRequest request = _requestHelper.CreateOAuth2AccessTokenRequest(code, redirectUri, _apiKey, _appsecret); + ExecuteAsync(ApiType.Base, request, response => + { + var userLogin = new UserLogin { Token = response.Access_Token }; + UserLogin = userLogin; + success(userLogin); + }, failure); + } + /// /// Gets AccountInfo /// @@ -54,23 +65,15 @@ public void GetAccessTokenAsync(Action success, Action success, Action failure) { //This has to be here as Dropbox change their base URL between calls - _restClient.BaseUrl = ApiBaseUrl; - _restClient.Authenticator = new OAuthAuthenticator(_restClient.BaseUrl, _apiKey, _appsecret, UserLogin.Token, UserLogin.Secret); - var request = _requestHelper.CreateAccountInfoRequest(); - ExecuteAsync(ApiType.Base, request, success, failure); } - [Obsolete("No longer supported by Dropbox")] public void CreateAccountAsync(string email, string firstName, string lastName, string password, Action success, Action failure) { //This has to be here as Dropbox change their base URL between calls - _restClient.BaseUrl = ApiBaseUrl; - var request = _requestHelper.CreateNewAccountRequest(_apiKey, email, firstName, lastName, password); - ExecuteAsync(ApiType.Base, request, success, failure); } } diff --git a/DropNet/Client/User.Sync.cs b/DropNet/Client/User.Sync.cs index 5bcda99..a4ee4bc 100644 --- a/DropNet/Client/User.Sync.cs +++ b/DropNet/Client/User.Sync.cs @@ -10,7 +10,7 @@ namespace DropNet public partial class DropNetClient { /// - /// Shorthand method to get a token from Dropbox and build the Url to authorize it. + /// Shorthand method to get an OAuth1 token from Dropbox and build the Url to authorize it. /// /// public string GetTokenAndBuildUrl(string callback = null) @@ -20,51 +20,50 @@ public string GetTokenAndBuildUrl(string callback = null) } /// - /// Gets a token from the almightly dropbox.com (Token cant be used until authorized!) + /// Provisions an OAuth1 token from the almightly dropbox.com (Token cant be used until authorized!) /// /// public UserLogin GetToken() { - _restClient.BaseUrl = ApiBaseUrl; - _restClient.Authenticator = new OAuthAuthenticator(_restClient.BaseUrl, _apiKey, _appsecret); - var request = _requestHelper.CreateTokenRequest(); - var response = Execute(ApiType.Base, request); - var userLogin = GetUserLoginFromParams(response.Content); - UserLogin = userLogin; - return userLogin; } + /// + /// Authorizes the previously-requested OAuth1 token + /// + /// public UserLogin GetAccessToken() { - _restClient.BaseUrl = ApiBaseUrl; - _restClient.Authenticator = new OAuthAuthenticator(_restClient.BaseUrl, _apiKey, _appsecret, UserLogin.Token, UserLogin.Secret); - var request = _requestHelper.CreateAccessTokenRequest(); - var response = Execute(ApiType.Base, request); - var userLogin = GetUserLoginFromParams(response.Content); - //This is the new Access token we have UserLogin = userLogin; - return userLogin; } - + /// + /// Acquire an OAuth2 bearer token once the user has authorized the app. This endpoint only applies to apps using the AuthorizationFlow.Code flow. + /// + /// The authorization code provided by Dropbox when the user was redirected back to your site. + /// The redirect Uri for your site. This is only used to validate that it matches the original /oauth2/authorize; the user will not be redirected again. + /// An OAuth2 bearer token. + public UserLogin GetAccessToken(string code, string redirectUri) + { + RestRequest request = _requestHelper.CreateOAuth2AccessTokenRequest(code, redirectUri, _apiKey, _appsecret); + var response = Execute(ApiType.Base, request); + var userLogin = new UserLogin { Token = response.Access_Token }; + UserLogin = userLogin; + return userLogin; + } public AccountInfo AccountInfo() { - _restClient.BaseUrl = ApiBaseUrl; - _restClient.Authenticator = new OAuthAuthenticator(_restClient.BaseUrl, _apiKey, _appsecret, UserLogin.Token, UserLogin.Secret); - var request = _requestHelper.CreateAccountInfoRequest(); - return Execute(ApiType.Base, request); } diff --git a/DropNet/DropNet.csproj b/DropNet/DropNet.csproj index 6c6d8fd..2417e63 100644 --- a/DropNet/DropNet.csproj +++ b/DropNet/DropNet.csproj @@ -81,6 +81,7 @@ + diff --git a/DropNet/Helpers/RequestHelper.cs b/DropNet/Helpers/RequestHelper.cs index 4ee0b2b..1eb2dd1 100644 --- a/DropNet/Helpers/RequestHelper.cs +++ b/DropNet/Helpers/RequestHelper.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using DropNet.Authenticators; using RestSharp; using DropNet.Models; @@ -260,6 +261,67 @@ public RestRequest CreateNewAccountRequest(string apiKey, string email, string f return request; } + public RestRequest BuildAuthorizeUrl(string userToken, string callback = null) + { + if (string.IsNullOrWhiteSpace(userToken)) + { + throw new ArgumentNullException("userToken"); + } + + var request = new RestRequest(Method.GET); + request.Resource = "{version}/oauth/authorize"; + request.AddParameter("version", _version, ParameterType.UrlSegment); + request.AddParameter("oauth_token", userToken); + if (!string.IsNullOrWhiteSpace(callback)) + { + request.AddParameter("oauth_callback", callback); + } + + return request; + } + + /// + /// This is the first step the OAuth 2.0 authorization flow. This isn't an API call—it's the web page that lets the user sign in to Dropbox and authorize your app. The user must be redirected to the page over HTTPS and it should be presented to the user through their web browser. After the user decides whether or not to authorize your app, they will be redirected to the URL specified by redirect_uri. + /// + /// The type of authorization flow to use. See AuthorizationFlow documentation for descriptions of each. + /// + /// Where to redirect the user after authorization has completed. This must be the exact URI registered in the app console, though localhost and 127.0.0.1 are always accepted. A redirect URI is required for a token flow, but optional for code. If the redirect URI is omitted, the code will be presented directly to the user and they will be invited to enter the information in your app. + /// Arbitrary data that will be passed back to your redirect URI. This parameter can be used to track a user through the authorization flow. + /// A URL to which you should redirect the user. Because /oauth2/authorize is a website, there is no direct return value. However, after the user authorizes your app, they will be sent to your redirect URI. The type of response varies based on the response_type. + public RestRequest BuildOAuth2AuthorizeUrl(OAuth2AuthorizationFlow oAuth2AuthorizationFlow, string consumerKey, string redirectUri, string state = null) + { + var request = new RestRequest("{version}/oauth2/authorize", Method.GET); + request.AddParameter("version", _version, ParameterType.UrlSegment); + request.AddParameter("response_type", Enum.GetName(typeof(OAuth2AuthorizationFlow), oAuth2AuthorizationFlow).ToLower()); + request.AddParameter("client_id", consumerKey); + request.AddParameter("redirect_uri", redirectUri); + if (!string.IsNullOrWhiteSpace(state)) + { + request.AddParameter("state", state); + } + return request; + } + + /// + /// This is the second and final step in the OAuth 2.0 'code' authorization flow. It retrieves an OAuth2 access token using the code provided by Dropbox. + /// + /// The code provided by Dropbox when the user was redirected back to the calling site. + /// The calling site's host name, for verification only + /// + /// + /// + public RestRequest CreateOAuth2AccessTokenRequest(string code, string redirectUri, string consumerKey, string consumerSecret) + { + var request = new RestRequest("{version}/oauth2/token", Method.POST) { RequestFormat = DataFormat.Json }; + request.AddParameter("version", _version, ParameterType.UrlSegment); + request.AddParameter("code", code); + request.AddParameter("grant_type", "authorization_code"); + request.AddParameter("client_id", consumerKey); + request.AddParameter("client_secret", consumerSecret); + request.AddParameter("redirect_uri", redirectUri); + return request; + } + public RestRequest CreateAccountInfoRequest() { var request = new RestRequest(Method.GET); diff --git a/DropNet/Models/OAuth2AccessToken.cs b/DropNet/Models/OAuth2AccessToken.cs new file mode 100644 index 0000000..ab4e66b --- /dev/null +++ b/DropNet/Models/OAuth2AccessToken.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace DropNet.Models +{ + /// + /// + internal class OAuth2AccessToken + { + /// + /// + public string Access_Token { get; set; } + public string Token_Type { get; set; } + public string Uid { get; set; } + } +} From 9bacd710f9162a8d934af6c67a16ae6eb0bbc246 Mon Sep 17 00:00:00 2001 From: John Hoerr Date: Tue, 25 Jun 2013 10:26:34 -0400 Subject: [PATCH 14/65] Fixed GetAccessTokenAsync signature conflict --- DropNet/Client/User.Async.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DropNet/Client/User.Async.cs b/DropNet/Client/User.Async.cs index b89c635..09b53a5 100644 --- a/DropNet/Client/User.Async.cs +++ b/DropNet/Client/User.Async.cs @@ -46,7 +46,7 @@ public void GetAccessTokenAsync(Action success, Action /// The authorization code provided by Dropbox when the user was redirected back to your site. /// The redirect Uri for your site. This is only used to validate that it matches the original /oauth2/authorize; the user will not be redirected again. - public UserLogin GetAccessTokenAsync(Action success, Action failure, string code, string redirectUri) + public void GetAccessTokenAsync(Action success, Action failure, string code, string redirectUri) { RestRequest request = _requestHelper.CreateOAuth2AccessTokenRequest(code, redirectUri, _apiKey, _appsecret); ExecuteAsync(ApiType.Base, request, response => From 0091ffe52733bb2b262084356fc842a24c675c4c Mon Sep 17 00:00:00 2001 From: John Hoerr Date: Tue, 25 Jun 2013 10:38:05 -0400 Subject: [PATCH 15/65] OAuth2 auth header is selectively added. OAuth2Authenticator no longer adds an 'Authorization : Bearer ' header if the Access Token is null. --- DropNet/Authenticators/OAuth2Authenticator.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/DropNet/Authenticators/OAuth2Authenticator.cs b/DropNet/Authenticators/OAuth2Authenticator.cs index b90a68d..2862349 100644 --- a/DropNet/Authenticators/OAuth2Authenticator.cs +++ b/DropNet/Authenticators/OAuth2Authenticator.cs @@ -10,7 +10,10 @@ public OAuth2Authenticator(string accessToken) : base(accessToken) public override void Authenticate(IRestClient client, IRestRequest request) { - request.AddHeader("Authorization", string.Format("Bearer {0}", AccessToken)); + if (!string.IsNullOrWhiteSpace(AccessToken)) + { + request.AddHeader("Authorization", string.Format("Bearer {0}", AccessToken)); + } } } From 009c38b8c3f4e3aa20e6a6c356f13bb76c85e279 Mon Sep 17 00:00:00 2001 From: Michael Christopher Date: Sun, 7 Jul 2013 16:22:18 -0700 Subject: [PATCH 16/65] Adding chunked upload support --- DropNet/Client/Files.Sync.cs | 40 +++++++++++++++++++++++++++-- DropNet/Helpers/RequestHelper.cs | 44 +++++++++++++++++++++++++++++++- DropNet/Models/ChunkedUpload.cs | 19 ++++++++++++++ 3 files changed, 100 insertions(+), 3 deletions(-) create mode 100644 DropNet/Models/ChunkedUpload.cs diff --git a/DropNet/Client/Files.Sync.cs b/DropNet/Client/Files.Sync.cs index 651169d..5cf06a7 100644 --- a/DropNet/Client/Files.Sync.cs +++ b/DropNet/Client/Files.Sync.cs @@ -136,14 +136,12 @@ public byte[] GetFileContentFromFS(FileInfo localFile) } /// - /// NOTE: DOES NOT WORK, Use UploadFile /// Uploads a File to Dropbox given the raw data. /// /// The path of the folder to upload to /// The Name of the file to upload to dropbox /// The file data /// True on success - [Obsolete("PUT doesn't work with current RestSharp. Sorry :(")] public MetaData UploadFilePUT(string path, string filename, byte[] fileData) { if (!path.StartsWith("/")) @@ -197,6 +195,44 @@ public MetaData UploadFile(string path, string filename, Stream stream) return response.Data; } + /// + /// Starts a chunked upload to Dropbox given a byte array. + /// + /// The file data + /// A object representing the chunked upload on success + public ChunkedUpload StartChunkedUpload(byte[] fileData) + { + var request = _requestHelper.CreateChunkedUploadRequest(fileData); + var response = _restClientContent.Execute(request); + return response.Data; + } + + /// + /// Add data to a chunked upload given a byte array. + /// + /// A ChunkedUpload object received from the StartChunkedUpload method + /// The file data + /// A object representing the chunked upload on success + public ChunkedUpload AppendChunkedUpload(ChunkedUpload upload, byte[] fileData) + { + var request = _requestHelper.CreateAppendChunkedUploadRequest(upload, fileData); + var response = _restClientContent.Execute(request); + return response.Data; + } + + /// + /// Commit a completed chunked upload + /// + /// A ChunkedUpload object received from the StartChunkedUpload method + /// The full path of the file to upload to + /// A object representing the chunked upload on success + public MetaData CommitChunkedUpload(ChunkedUpload upload, string path) + { + var request = _requestHelper.CreateCommitChunkedUploadRequest(upload, path, Root); + var response = _restClientContent.Execute(request); + return response.Data; + } + /// /// Deletes the file or folder from dropbox with the given path /// diff --git a/DropNet/Helpers/RequestHelper.cs b/DropNet/Helpers/RequestHelper.cs index 1eb2dd1..cfe2370 100644 --- a/DropNet/Helpers/RequestHelper.cs +++ b/DropNet/Helpers/RequestHelper.cs @@ -129,7 +129,7 @@ public RestRequest CreateUploadFilePutRequest(string path, string filename, byte //Need to add the "file" parameter with the file name request.AddParameter("file", filename, ParameterType.UrlSegment); - request.AddFile("file", fileData, filename); + request.AddParameter("file", fileData, ParameterType.RequestBody); return request; } @@ -153,6 +153,48 @@ public RestRequest CreateUploadFileRequest(string path, string filename, Stream return request; } + public RestRequest CreateChunkedUploadRequest(byte[] fileData) + { + var request = new RestRequest(Method.PUT); + request.Resource = "{version}/chunked_upload?oauth_consumer_key={oauth_consumer_key}&oauth_nonce={oauth_nonce}"; + request.Resource += "&oauth_token={oauth_token}&oauth_timestamp={oauth_timestamp}"; + request.Resource += "&oauth_signature={oauth_signature}&oauth_signature_method={oauth_signature_method}&oauth_version={oauth_version}"; + request.AddParameter("version", _version, ParameterType.UrlSegment); + + request.AddParameter("file", fileData, ParameterType.RequestBody); + + return request; + } + + public RestRequest CreateAppendChunkedUploadRequest(ChunkedUpload upload, byte[] fileData) + { + var request = new RestRequest(Method.PUT); + request.Resource = "{version}/chunked_upload?upload_id={upload_id}&offset={offset}&oauth_consumer_key={oauth_consumer_key}&oauth_nonce={oauth_nonce}"; + request.Resource += "&oauth_token={oauth_token}&oauth_timestamp={oauth_timestamp}"; + request.Resource += "&oauth_signature={oauth_signature}&oauth_signature_method={oauth_signature_method}&oauth_version={oauth_version}"; + request.AddParameter("version", _version, ParameterType.UrlSegment); + request.AddParameter("upload_id", upload.UploadId, ParameterType.UrlSegment); + request.AddParameter("offset", upload.Offset, ParameterType.UrlSegment); + + request.AddParameter("file", fileData, ParameterType.RequestBody); + + return request; + } + + public RestRequest CreateCommitChunkedUploadRequest(ChunkedUpload upload, string path, string root) + { + var request = new RestRequest(Method.POST); + request.Resource = "{version}/commit_chunked_upload/{root}{path}"; + request.AddParameter("version", _version, ParameterType.UrlSegment); + request.AddParameter("path", path, ParameterType.UrlSegment); + request.AddParameter("root", root, ParameterType.UrlSegment); + + request.AddParameter("overwrite", true); + request.AddParameter("upload_id", upload.UploadId); + + return request; + } + public RestRequest CreateDeleteFileRequest(string path, string root) { var request = new RestRequest(Method.GET); diff --git a/DropNet/Models/ChunkedUpload.cs b/DropNet/Models/ChunkedUpload.cs new file mode 100644 index 0000000..eb0cecd --- /dev/null +++ b/DropNet/Models/ChunkedUpload.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; + +namespace DropNet.Models +{ + public class ChunkedUpload + { + public string UploadId { get; set; } + public long Offset { get; set; } + public string Expires { get; set; } + public DateTime ExpiresDate + { + get + { + return Expires == null ? DateTime.MinValue : DateTime.Parse(Expires); + } + } + } +} From 0b1390649890ac91530c82b34f6096e93f0c46e6 Mon Sep 17 00:00:00 2001 From: Tiago Margalho Date: Thu, 18 Jul 2013 09:28:59 +0100 Subject: [PATCH 17/65] Added the possibility to specify wether a chunked file upload can replace an existing file. Fixed a missing file reference to the chuckedupload.cs file in the DropNet project. --- DropNet/Client/Files.Sync.cs | 5 +++-- DropNet/DropNet.csproj | 1 + DropNet/Helpers/RequestHelper.cs | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/DropNet/Client/Files.Sync.cs b/DropNet/Client/Files.Sync.cs index 5cf06a7..9a3a475 100644 --- a/DropNet/Client/Files.Sync.cs +++ b/DropNet/Client/Files.Sync.cs @@ -225,10 +225,11 @@ public ChunkedUpload AppendChunkedUpload(ChunkedUpload upload, byte[] fileData) /// /// A ChunkedUpload object received from the StartChunkedUpload method /// The full path of the file to upload to + /// Specify wether the file upload should replace an existing file. /// A object representing the chunked upload on success - public MetaData CommitChunkedUpload(ChunkedUpload upload, string path) + public MetaData CommitChunkedUpload(ChunkedUpload upload, string path, bool overwrite = true) { - var request = _requestHelper.CreateCommitChunkedUploadRequest(upload, path, Root); + var request = _requestHelper.CreateCommitChunkedUploadRequest(upload, path, Root, overwrite); var response = _restClientContent.Execute(request); return response.Data; } diff --git a/DropNet/DropNet.csproj b/DropNet/DropNet.csproj index 2417e63..e14cf45 100644 --- a/DropNet/DropNet.csproj +++ b/DropNet/DropNet.csproj @@ -78,6 +78,7 @@ + diff --git a/DropNet/Helpers/RequestHelper.cs b/DropNet/Helpers/RequestHelper.cs index cfe2370..70f4712 100644 --- a/DropNet/Helpers/RequestHelper.cs +++ b/DropNet/Helpers/RequestHelper.cs @@ -181,7 +181,7 @@ public RestRequest CreateAppendChunkedUploadRequest(ChunkedUpload upload, byte[] return request; } - public RestRequest CreateCommitChunkedUploadRequest(ChunkedUpload upload, string path, string root) + public RestRequest CreateCommitChunkedUploadRequest(ChunkedUpload upload, string path, string root, bool overwrite) { var request = new RestRequest(Method.POST); request.Resource = "{version}/commit_chunked_upload/{root}{path}"; @@ -189,7 +189,7 @@ public RestRequest CreateCommitChunkedUploadRequest(ChunkedUpload upload, string request.AddParameter("path", path, ParameterType.UrlSegment); request.AddParameter("root", root, ParameterType.UrlSegment); - request.AddParameter("overwrite", true); + request.AddParameter("overwrite", overwrite); request.AddParameter("upload_id", upload.UploadId); return request; From ee07c3ee647f26929bd5f26df2a97a60c5fcaab2 Mon Sep 17 00:00:00 2001 From: Damian Karzon Date: Sat, 20 Jul 2013 16:37:23 +1200 Subject: [PATCH 18/65] Fixed the Phone build and WinRT is gone (use DropNet2) --- DropNet.WinRT/DropNet.WinRT.csproj | 170 ------------------ DropNet.WinRT/Properties/AssemblyInfo.cs | 29 --- .../DropNet.WindowsPhone.csproj | 9 + DropNet.sln | 66 +++---- DropNet/DropNet.csproj | 1 - DropNet/Models/AccountCreationResult.cs | 14 -- 6 files changed, 33 insertions(+), 256 deletions(-) delete mode 100644 DropNet.WinRT/DropNet.WinRT.csproj delete mode 100644 DropNet.WinRT/Properties/AssemblyInfo.cs delete mode 100644 DropNet/Models/AccountCreationResult.cs diff --git a/DropNet.WinRT/DropNet.WinRT.csproj b/DropNet.WinRT/DropNet.WinRT.csproj deleted file mode 100644 index de93796..0000000 --- a/DropNet.WinRT/DropNet.WinRT.csproj +++ /dev/null @@ -1,170 +0,0 @@ - - - - - Debug - AnyCPU - 8.0.30703 - 2.0 - {C449AB83-3052-4CFB-AC57-77A706DF717C} - Library - Properties - DropNet.WinRT - DropNet.WinRT - en-US - 512 - {BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - - true - full - false - bin\Debug\ - TRACE;DEBUG;NETFX_CORE;WINRT - prompt - 4 - x86 - - - pdbonly - true - bin\Release\ - TRACE;NETFX_CORE;WINRT - prompt - 4 - x86 - - - true - bin\ARM\Debug\ - DEBUG;TRACE;NETFX_CORE - ;2008 - full - ARM - false - prompt - true - - - bin\ARM\Release\ - TRACE;NETFX_CORE - true - ;2008 - pdbonly - ARM - false - prompt - true - - - true - bin\x64\Debug\ - DEBUG;TRACE;NETFX_CORE - ;2008 - full - x64 - false - prompt - true - - - bin\x64\Release\ - TRACE;NETFX_CORE - true - ;2008 - pdbonly - x64 - false - prompt - true - - - true - bin\x86\Debug\ - DEBUG;TRACE;NETFX_CORE - ;2008 - full - x86 - false - prompt - true - - - bin\x86\Release\ - TRACE;NETFX_CORE - true - ;2008 - pdbonly - x86 - false - prompt - true - - - - Authenticators\OAuthAuthenticator.cs - - - Authenticators\OAuth2Authenticator.cs - - - Client\Client.cs - - - Client\Files.Async.cs - - - Client\User.Async.cs - - - Exceptions\DropboxException.cs - - - Extensions\StringExtensions.cs - - - Helpers\RequestHelper.cs - - - Models\AccountCreationResult.cs - - - Models\AccountInfo.cs - - - Models\CopyRefResponse.cs - - - Models\DeltaPage.cs - - - Models\MetaData.cs - - - Models\SharesResponse.cs - - - Models\ThumbnailSize.cs - - - Models\UserLogin.cs - - - - - - ..\Lib\winrt\RestSharp.Metro.dll - - - - 11.0 - - - - diff --git a/DropNet.WinRT/Properties/AssemblyInfo.cs b/DropNet.WinRT/Properties/AssemblyInfo.cs deleted file mode 100644 index 7fb069c..0000000 --- a/DropNet.WinRT/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DropNet.WinRT")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("DropNet.WinRT")] -[assembly: AssemblyCopyright("Copyright © 2012")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] -[assembly: ComVisible(false)] \ No newline at end of file diff --git a/DropNet.WindowsPhone/DropNet.WindowsPhone.csproj b/DropNet.WindowsPhone/DropNet.WindowsPhone.csproj index 58407dc..8fa8730 100644 --- a/DropNet.WindowsPhone/DropNet.WindowsPhone.csproj +++ b/DropNet.WindowsPhone/DropNet.WindowsPhone.csproj @@ -56,6 +56,9 @@ + + Authenticators\OAuth2Authenticator.cs + Client\Client.cs @@ -80,6 +83,9 @@ Models\AccountInfo.cs + + Models\ChunkedUpload.cs + Models\CopyRefResponse.cs @@ -89,6 +95,9 @@ Models\MetaData.cs + + Models\OAuth2AccessToken.cs + Models\ThumbnailSize.cs diff --git a/DropNet.sln b/DropNet.sln index fb44fff..50c68ad 100644 --- a/DropNet.sln +++ b/DropNet.sln @@ -12,69 +12,51 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuGet", "NuGet", "{61EE82C6 dropnet.nuspec = dropnet.nuspec EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DropNet.WinRT", "DropNet.WinRT\DropNet.WinRT.csproj", "{C449AB83-3052-4CFB-AC57-77A706DF717C}" -EndProject Global GlobalSection(TestCaseManagementSettings) = postSolution CategoryFile = DropNet.vsmdi EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|ARM = Debug|ARM Debug|Any CPU = Debug|Any CPU + Debug|ARM = Debug|ARM Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 - Release|ARM = Release|ARM Release|Any CPU = Release|Any CPU + Release|ARM = Release|ARM Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Debug|ARM.ActiveCfg = Debug|Any CPU - {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Debug|Any CPU.Build.0 = Debug|Any CPU - {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Debug|x64.ActiveCfg = Debug|Any CPU - {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Debug|x86.ActiveCfg = Debug|Any CPU - {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Release|ARM.ActiveCfg = Release|Any CPU - {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Release|Any CPU.ActiveCfg = Release|Any CPU - {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Release|Any CPU.Build.0 = Release|Any CPU - {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Release|x64.ActiveCfg = Release|Any CPU - {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Release|x86.ActiveCfg = Release|Any CPU - {C449AB83-3052-4CFB-AC57-77A706DF717C}.Debug|ARM.ActiveCfg = Debug|ARM - {C449AB83-3052-4CFB-AC57-77A706DF717C}.Debug|ARM.Build.0 = Debug|ARM - {C449AB83-3052-4CFB-AC57-77A706DF717C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C449AB83-3052-4CFB-AC57-77A706DF717C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C449AB83-3052-4CFB-AC57-77A706DF717C}.Debug|x64.ActiveCfg = Debug|x64 - {C449AB83-3052-4CFB-AC57-77A706DF717C}.Debug|x64.Build.0 = Debug|x64 - {C449AB83-3052-4CFB-AC57-77A706DF717C}.Debug|x86.ActiveCfg = Debug|x86 - {C449AB83-3052-4CFB-AC57-77A706DF717C}.Debug|x86.Build.0 = Debug|x86 - {C449AB83-3052-4CFB-AC57-77A706DF717C}.Release|ARM.ActiveCfg = Release|ARM - {C449AB83-3052-4CFB-AC57-77A706DF717C}.Release|ARM.Build.0 = Release|ARM - {C449AB83-3052-4CFB-AC57-77A706DF717C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C449AB83-3052-4CFB-AC57-77A706DF717C}.Release|Any CPU.Build.0 = Release|Any CPU - {C449AB83-3052-4CFB-AC57-77A706DF717C}.Release|x64.ActiveCfg = Release|x64 - {C449AB83-3052-4CFB-AC57-77A706DF717C}.Release|x64.Build.0 = Release|x64 - {C449AB83-3052-4CFB-AC57-77A706DF717C}.Release|x86.ActiveCfg = Release|x86 - {C449AB83-3052-4CFB-AC57-77A706DF717C}.Release|x86.Build.0 = Release|x86 - {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Debug|ARM.ActiveCfg = Debug|Any CPU - {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Debug|x64.ActiveCfg = Debug|Any CPU - {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Debug|x86.ActiveCfg = Debug|Any CPU - {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Release|ARM.ActiveCfg = Release|Any CPU - {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Release|Any CPU.Build.0 = Release|Any CPU - {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Release|x64.ActiveCfg = Release|Any CPU - {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Release|x86.ActiveCfg = Release|Any CPU - {E9580EFC-6014-4D3B-82A8-5F6D57213CE4}.Debug|ARM.ActiveCfg = Debug|Any CPU {E9580EFC-6014-4D3B-82A8-5F6D57213CE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E9580EFC-6014-4D3B-82A8-5F6D57213CE4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9580EFC-6014-4D3B-82A8-5F6D57213CE4}.Debug|ARM.ActiveCfg = Debug|Any CPU {E9580EFC-6014-4D3B-82A8-5F6D57213CE4}.Debug|x64.ActiveCfg = Debug|Any CPU {E9580EFC-6014-4D3B-82A8-5F6D57213CE4}.Debug|x86.ActiveCfg = Debug|Any CPU - {E9580EFC-6014-4D3B-82A8-5F6D57213CE4}.Release|ARM.ActiveCfg = Release|Any CPU {E9580EFC-6014-4D3B-82A8-5F6D57213CE4}.Release|Any CPU.ActiveCfg = Release|Any CPU {E9580EFC-6014-4D3B-82A8-5F6D57213CE4}.Release|Any CPU.Build.0 = Release|Any CPU + {E9580EFC-6014-4D3B-82A8-5F6D57213CE4}.Release|ARM.ActiveCfg = Release|Any CPU {E9580EFC-6014-4D3B-82A8-5F6D57213CE4}.Release|x64.ActiveCfg = Release|Any CPU {E9580EFC-6014-4D3B-82A8-5F6D57213CE4}.Release|x86.ActiveCfg = Release|Any CPU + {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Debug|ARM.ActiveCfg = Debug|Any CPU + {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Debug|x64.ActiveCfg = Debug|Any CPU + {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Debug|x86.ActiveCfg = Debug|Any CPU + {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Release|Any CPU.Build.0 = Release|Any CPU + {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Release|ARM.ActiveCfg = Release|Any CPU + {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Release|x64.ActiveCfg = Release|Any CPU + {C73D4D29-41E9-4BB1-B70D-38E36187CF51}.Release|x86.ActiveCfg = Release|Any CPU + {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Debug|Any CPU.Build.0 = Debug|Any CPU + {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Debug|ARM.ActiveCfg = Debug|Any CPU + {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Debug|x64.ActiveCfg = Debug|Any CPU + {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Debug|x86.ActiveCfg = Debug|Any CPU + {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Release|Any CPU.ActiveCfg = Release|Any CPU + {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Release|Any CPU.Build.0 = Release|Any CPU + {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Release|ARM.ActiveCfg = Release|Any CPU + {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Release|x64.ActiveCfg = Release|Any CPU + {06B6BC2F-94D5-456A-ABA7-F73FB28B4703}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/DropNet/DropNet.csproj b/DropNet/DropNet.csproj index e14cf45..15338f6 100644 --- a/DropNet/DropNet.csproj +++ b/DropNet/DropNet.csproj @@ -76,7 +76,6 @@ - diff --git a/DropNet/Models/AccountCreationResult.cs b/DropNet/Models/AccountCreationResult.cs deleted file mode 100644 index 6e1e033..0000000 --- a/DropNet/Models/AccountCreationResult.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace DropNet.Models -{ - public class AccountCreationResult - { - public enum ErrorTypes - { - Unknown, - EmailInUse - } - - public bool success { get; set; } - public ErrorTypes errorType { get; set; } - } -} From 292fe910191c0685ce3c198babcfa3b8a16612a5 Mon Sep 17 00:00:00 2001 From: Bill Pratt Date: Mon, 5 Aug 2013 13:25:38 -0400 Subject: [PATCH 19/65] Updating MonoTouch solution to actually build Removing and adding files to build successfully --- DropNet.MonoTouch/DropNet.MonoTouch.csproj | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/DropNet.MonoTouch/DropNet.MonoTouch.csproj b/DropNet.MonoTouch/DropNet.MonoTouch.csproj index 07acc27..d937000 100644 --- a/DropNet.MonoTouch/DropNet.MonoTouch.csproj +++ b/DropNet.MonoTouch/DropNet.MonoTouch.csproj @@ -108,9 +108,6 @@ Helpers\RequestHelper.cs - - Models\AccountCreationResult.cs - Models\AccountInfo.cs @@ -132,5 +129,17 @@ Properties\AssemblyInfo.cs + + Models\ChunkedUpload.cs + + + Models\CopyRefResponse.cs + + + Models\OAuth2AccessToken.cs + + + Authenticators\OAuth2Authenticator.cs + From d79fa34cd549cc8ce947cd5a62a125bd99a45cd8 Mon Sep 17 00:00:00 2001 From: Bill Pratt Date: Mon, 5 Aug 2013 16:18:36 -0400 Subject: [PATCH 20/65] Append forward slash to path if it doesnt exist --- DropNet/Client/Files.Sync.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DropNet/Client/Files.Sync.cs b/DropNet/Client/Files.Sync.cs index 9a3a475..9e5e994 100644 --- a/DropNet/Client/Files.Sync.cs +++ b/DropNet/Client/Files.Sync.cs @@ -31,6 +31,8 @@ public MetaData GetMetaData() /// public MetaData GetMetaData(string path) { + if (path != "" && !path.StartsWith("/")) path = "/" + path; + var request = _requestHelper.CreateMetadataRequest(path, Root); return Execute(ApiType.Base, request); From 4d32e777e7ccbba40531f524197e69f6170eb15a Mon Sep 17 00:00:00 2001 From: Damian Karzon Date: Thu, 15 Aug 2013 22:26:52 +1200 Subject: [PATCH 21/65] v1.9.6 now available from NuGet --- dropnet.nuspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dropnet.nuspec b/dropnet.nuspec index 931cc8a..dd4eddf 100644 --- a/dropnet.nuspec +++ b/dropnet.nuspec @@ -2,7 +2,7 @@ DropNet - 1.9.5 + 1.9.6 Damian Karzon, Github Contributors Damian Karzon .NET Client for the Dropbox API (.NET 4 and Windows Phone) From 7f9f68f23e7fbb388eb1e30e34df830eee72a949 Mon Sep 17 00:00:00 2001 From: Damian Karzon Date: Tue, 24 Sep 2013 16:26:25 +1200 Subject: [PATCH 22/65] Added the link to the stack overflow tag --- README.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.markdown b/README.markdown index c7f8990..d887f26 100644 --- a/README.markdown +++ b/README.markdown @@ -74,6 +74,8 @@ Open a browser with the url returned by BuildAuthorizeUrl - After we have the au Want to chat about DropNet? http://jabbr.net/#/rooms/DropNet +Questions? http://stackoverflow.com/questions/tagged/dropnet + *** **Like DropNet?** Endorse me on Coderwall From eb769f29358fc5f5a6969b83dd0b0c98620b8ba6 Mon Sep 17 00:00:00 2001 From: Michael Christopher Date: Thu, 14 Nov 2013 14:22:59 -0800 Subject: [PATCH 23/65] Adding overwrite and parent revision support to upload calls --- DropNet.Tests/Helpers/RequestHelperTest.cs | 2 +- DropNet/Client/Files.Async.cs | 18 ++++++++----- DropNet/Client/Files.Sync.cs | 25 +++++++++++------- DropNet/Client/Files.Task.cs | 8 +++--- DropNet/Helpers/RequestHelper.cs | 30 +++++++++++++++++++--- 5 files changed, 59 insertions(+), 24 deletions(-) diff --git a/DropNet.Tests/Helpers/RequestHelperTest.cs b/DropNet.Tests/Helpers/RequestHelperTest.cs index 35a5ff1..6d0f679 100644 --- a/DropNet.Tests/Helpers/RequestHelperTest.cs +++ b/DropNet.Tests/Helpers/RequestHelperTest.cs @@ -246,7 +246,7 @@ public void CreateUploadFileRequestTest() string filename = fixture.CreateAnonymous(); byte[] fileData = System.Text.Encoding.UTF8.GetBytes(fixture.CreateAnonymous()); - RestRequest actual = _target.CreateUploadFileRequest(path, filename, fileData, "dropbox"); + RestRequest actual = _target.CreateUploadFileRequest(path, filename, fileData, "dropbox", true, null); Assert.IsNotNull(actual); Assert.IsTrue(actual.Method == Method.POST); diff --git a/DropNet/Client/Files.Async.cs b/DropNet/Client/Files.Async.cs index b473b7d..c37f60e 100644 --- a/DropNet/Client/Files.Async.cs +++ b/DropNet/Client/Files.Async.cs @@ -115,7 +115,9 @@ public void GetFileAsync(string path, long startByte, long endByte, string rev, /// The path of the folder to upload to /// The local file to upload/// Success callback /// Failure callback - public void UploadFileAsync(string path, FileInfo localFile, Action success, Action failure) + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing + public void UploadFileAsync(string path, FileInfo localFile, Action success, Action failure, bool overwrite = true, string parentRevision = null) { //Get the file stream byte[] bytes; @@ -128,7 +130,7 @@ public void UploadFileAsync(string path, FileInfo localFile, Action su } } - UploadFileAsync(path, localFile.Name, bytes, success, failure); + UploadFileAsync(path, localFile.Name, bytes, success, failure, overwrite, parentRevision); } #endif @@ -140,11 +142,13 @@ public void UploadFileAsync(string path, FileInfo localFile, Action su /// The file data /// Success callback /// Failure callback - public void UploadFileAsync(string path, string filename, byte[] fileData, Action success, Action failure) + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing + public void UploadFileAsync(string path, string filename, byte[] fileData, Action success, Action failure, bool overwrite = true, string parentRevision = null) { if (path != "" && !path.StartsWith("/")) path = "/" + path; - var request = _requestHelper.CreateUploadFileRequest(path, filename, fileData, Root); + var request = _requestHelper.CreateUploadFileRequest(path, filename, fileData, Root, overwrite, parentRevision); ExecuteAsync(ApiType.Content, request, success, failure); } @@ -157,11 +161,13 @@ public void UploadFileAsync(string path, string filename, byte[] fileData, Actio /// The file data /// The callback Action to perform on completion /// The callback Action to perform on exception - public void UploadFileAsync(string path, string filename, Stream fileStream, Action success, Action failure) + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing + public void UploadFileAsync(string path, string filename, Stream fileStream, Action success, Action failure, bool overwrite = true, string parentRevision = null) { if (path != "" && !path.StartsWith("/")) path = "/" + path; - var request = _requestHelper.CreateUploadFileRequest(path, filename, fileStream, Root); + var request = _requestHelper.CreateUploadFileRequest(path, filename, fileStream, Root, overwrite, parentRevision); ExecuteAsync(ApiType.Content, request, success, failure); } diff --git a/DropNet/Client/Files.Sync.cs b/DropNet/Client/Files.Sync.cs index 9e5e994..e82b1e5 100644 --- a/DropNet/Client/Files.Sync.cs +++ b/DropNet/Client/Files.Sync.cs @@ -143,14 +143,16 @@ public byte[] GetFileContentFromFS(FileInfo localFile) /// The path of the folder to upload to /// The Name of the file to upload to dropbox /// The file data + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing /// True on success - public MetaData UploadFilePUT(string path, string filename, byte[] fileData) + public MetaData UploadFilePUT(string path, string filename, byte[] fileData, bool overwrite = true, string parentRevision = null) { if (!path.StartsWith("/")) { path = "/" + path; } - var request = _requestHelper.CreateUploadFilePutRequest(path, filename, fileData, Root); + var request = _requestHelper.CreateUploadFilePutRequest(path, filename, fileData, Root, overwrite, parentRevision); var response = _restClientContent.Execute(request); //TODO - Return something better here? @@ -163,14 +165,16 @@ public MetaData UploadFilePUT(string path, string filename, byte[] fileData) /// The path of the folder to upload to /// The Name of the file to upload to dropbox /// The file data + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing /// True on success - public MetaData UploadFile(string path, string filename, byte[] fileData) + public MetaData UploadFile(string path, string filename, byte[] fileData, bool overwrite = true, string parentRevision = null) { if (!path.StartsWith("/")) { path = "/" + path; } - var request = _requestHelper.CreateUploadFileRequest(path, filename, fileData, Root); + var request = _requestHelper.CreateUploadFileRequest(path, filename, fileData, Root, overwrite, parentRevision); var response = _restClientContent.Execute(request); //TODO - Return something better here? @@ -183,14 +187,16 @@ public MetaData UploadFile(string path, string filename, byte[] fileData) /// The path of the folder to upload to /// The Name of the file to upload to dropbox /// The file stream + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing /// True on success - public MetaData UploadFile(string path, string filename, Stream stream) + public MetaData UploadFile(string path, string filename, Stream stream, bool overwrite = true, string parentRevision = null) { if (!path.StartsWith("/")) { path = "/" + path; } - var request = _requestHelper.CreateUploadFileRequest(path, filename, stream, Root); + var request = _requestHelper.CreateUploadFileRequest(path, filename, stream, Root, overwrite, parentRevision); var response = _restClientContent.Execute(request); //TODO - Return something better here? @@ -227,11 +233,12 @@ public ChunkedUpload AppendChunkedUpload(ChunkedUpload upload, byte[] fileData) /// /// A ChunkedUpload object received from the StartChunkedUpload method /// The full path of the file to upload to - /// Specify wether the file upload should replace an existing file. + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing /// A object representing the chunked upload on success - public MetaData CommitChunkedUpload(ChunkedUpload upload, string path, bool overwrite = true) + public MetaData CommitChunkedUpload(ChunkedUpload upload, string path, bool overwrite = true, string parentRevision = null) { - var request = _requestHelper.CreateCommitChunkedUploadRequest(upload, path, Root, overwrite); + var request = _requestHelper.CreateCommitChunkedUploadRequest(upload, path, Root, overwrite, parentRevision); var response = _restClientContent.Execute(request); return response.Data; } diff --git a/DropNet/Client/Files.Task.cs b/DropNet/Client/Files.Task.cs index 8361254..6a1c4ee 100644 --- a/DropNet/Client/Files.Task.cs +++ b/DropNet/Client/Files.Task.cs @@ -55,20 +55,20 @@ public Task GetFileTask(string path) return ExecuteTask(ApiType.Content, request); } - public Task UploadFileTask(string path, string filename, byte[] fileData) + public Task UploadFileTask(string path, string filename, byte[] fileData, bool overwrite = true, string parentRevision = null) { if (path != "" && !path.StartsWith("/")) path = "/" + path; - var request = _requestHelper.CreateUploadFileRequest(path, filename, fileData, Root); + var request = _requestHelper.CreateUploadFileRequest(path, filename, fileData, Root, overwrite, parentRevision); return ExecuteTask(ApiType.Content, request); } - public Task UploadFileTask(string path, string filename, Stream fileStream) + public Task UploadFileTask(string path, string filename, Stream fileStream, bool overwrite = true, string parentRevision = null) { if (path != "" && !path.StartsWith("/")) path = "/" + path; - var request = _requestHelper.CreateUploadFileRequest(path, filename, fileStream, Root); + var request = _requestHelper.CreateUploadFileRequest(path, filename, fileStream, Root, overwrite, parentRevision); return ExecuteTask(ApiType.Content, request); } diff --git a/DropNet/Helpers/RequestHelper.cs b/DropNet/Helpers/RequestHelper.cs index 70f4712..b900d17 100644 --- a/DropNet/Helpers/RequestHelper.cs +++ b/DropNet/Helpers/RequestHelper.cs @@ -99,7 +99,7 @@ public RestRequest CreateGetFileRequest(string path, string root, long startByte return request; } - public RestRequest CreateUploadFileRequest(string path, string filename, byte[] fileData, string root) + public RestRequest CreateUploadFileRequest(string path, string filename, byte[] fileData, string root, bool overwrite, string parent_revision) { var request = new RestRequest(Method.POST); request.Resource = "{version}/files/{root}{path}"; @@ -111,12 +111,18 @@ public RestRequest CreateUploadFileRequest(string path, string filename, byte[] // but the oauth sig only needs the filename, which we have in the OTHER parameter //request.AddParameter("file", filename); + request.AddParameter("overwrite", overwrite); + if (!String.IsNullOrEmpty(parent_revision)) + { + request.AddParameter("parent_rev", parent_revision); + } + request.AddFile("file", fileData, filename); return request; } - public RestRequest CreateUploadFilePutRequest(string path, string filename, byte[] fileData, string root) + public RestRequest CreateUploadFilePutRequest(string path, string filename, byte[] fileData, string root, bool overwrite, string parent_revision) { var request = new RestRequest(Method.PUT); //Need to put the OAuth Parmeters in the Resource to get around them being put in the body @@ -129,12 +135,18 @@ public RestRequest CreateUploadFilePutRequest(string path, string filename, byte //Need to add the "file" parameter with the file name request.AddParameter("file", filename, ParameterType.UrlSegment); + request.AddParameter("overwrite", overwrite); + if (!String.IsNullOrEmpty(parent_revision)) + { + request.AddParameter("parent_rev", parent_revision); + } + request.AddParameter("file", fileData, ParameterType.RequestBody); return request; } - public RestRequest CreateUploadFileRequest(string path, string filename, Stream fileStream, string root) + public RestRequest CreateUploadFileRequest(string path, string filename, Stream fileStream, string root, bool overwrite, string parent_revision) { var request = new RestRequest(Method.POST); //Don't want these to timeout (Maybe use something better here?) @@ -148,6 +160,12 @@ public RestRequest CreateUploadFileRequest(string path, string filename, Stream // but the oauth sig only needs the filename, which we have in the OTHER parameter //request.AddParameter("file", filename); + request.AddParameter("overwrite", overwrite); + if (!String.IsNullOrEmpty(parent_revision)) + { + request.AddParameter("parent_rev", parent_revision); + } + request.AddFile("file", s => StreamUtils.CopyStream(fileStream, s), filename); return request; @@ -181,7 +199,7 @@ public RestRequest CreateAppendChunkedUploadRequest(ChunkedUpload upload, byte[] return request; } - public RestRequest CreateCommitChunkedUploadRequest(ChunkedUpload upload, string path, string root, bool overwrite) + public RestRequest CreateCommitChunkedUploadRequest(ChunkedUpload upload, string path, string root, bool overwrite, string parent_revision) { var request = new RestRequest(Method.POST); request.Resource = "{version}/commit_chunked_upload/{root}{path}"; @@ -191,6 +209,10 @@ public RestRequest CreateCommitChunkedUploadRequest(ChunkedUpload upload, string request.AddParameter("overwrite", overwrite); request.AddParameter("upload_id", upload.UploadId); + if (!String.IsNullOrEmpty(parent_revision)) + { + request.AddParameter("parent_rev", parent_revision); + } return request; } From dce3c17390141c14fb92c4966accc2815f1ded33 Mon Sep 17 00:00:00 2001 From: Austin Thompson Date: Tue, 26 Nov 2013 06:32:35 -0600 Subject: [PATCH 24/65] Added async version of chunked upload functions --- DropNet/Client/Files.Async.cs | 43 +++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/DropNet/Client/Files.Async.cs b/DropNet/Client/Files.Async.cs index c37f60e..d9fd47b 100644 --- a/DropNet/Client/Files.Async.cs +++ b/DropNet/Client/Files.Async.cs @@ -172,6 +172,49 @@ public void UploadFileAsync(string path, string filename, Stream fileStream, Act ExecuteAsync(ApiType.Content, request, success, failure); } + /// + /// Starts a chunked upload to Dropbox given a byte array. + /// + /// The file data + /// The callback Action to perform on completion + /// The callback Action to perform on exception + public void StartChunkedUploadAsync(byte[] fileData, Action success, Action failure) + { + var request = _requestHelper.CreateChunkedUploadRequest(fileData); + + ExecuteAsync(ApiType.Content, request, success, failure); + } + + /// + /// Add data to a chunked upload given a byte array. + /// + /// A ChunkedUpload object received from the StartChunkedUpload method + /// The file data + /// The callback Action to perform on completion + /// The callback Action to perform on exception + public void AppendChunkedUploadAsync(ChunkedUpload upload, byte[] fileData, Action success, Action failure) + { + var request = _requestHelper.CreateAppendChunkedUploadRequest(upload, fileData); + + ExecuteAsync(ApiType.Content, request, success, failure); + } + + /// + /// Commit a completed chunked upload + /// + /// A ChunkedUpload object received from the StartChunkedUpload method + /// The full path of the file to upload to + /// The callback Action to perform on completion + /// The callback Action to perform on exception + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing + public void CommitChunkedUploadAsync(ChunkedUpload upload, string path, Action success, Action failure, bool overwrite = true, string parentRevision = null) + { + var request = _requestHelper.CreateCommitChunkedUploadRequest(upload, path, Root, overwrite, parentRevision); + + ExecuteAsync(ApiType.Content, request, success, failure); + } + /// /// Deletes the file or folder from dropbox with the given path /// From 7565ada5b5f53f7943edde1ee748dd2c2fc28be2 Mon Sep 17 00:00:00 2001 From: Austin Thompson Date: Thu, 28 Nov 2013 21:14:46 -0600 Subject: [PATCH 25/65] Added UploadChunkedFileAsync to handle the complexity of chunked uploads. --- DropNet/Client/Files.Async.cs | 17 +++++- DropNet/DropNet.csproj | 1 + DropNet/Helpers/ChunkedUploadHelper.cs | 85 ++++++++++++++++++++++++++ 3 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 DropNet/Helpers/ChunkedUploadHelper.cs diff --git a/DropNet/Client/Files.Async.cs b/DropNet/Client/Files.Async.cs index d9fd47b..6f72231 100644 --- a/DropNet/Client/Files.Async.cs +++ b/DropNet/Client/Files.Async.cs @@ -3,7 +3,6 @@ using DropNet.Models; using RestSharp; using System; -using DropNet.Authenticators; using DropNet.Exceptions; namespace DropNet @@ -172,6 +171,22 @@ public void UploadFileAsync(string path, string filename, Stream fileStream, Act ExecuteAsync(ApiType.Content, request, success, failure); } + /// + /// Uploads a File to Dropbox in chunks that are assembled into a single file when finished. + /// + /// The callback function that returns a byte array given an offset + /// The full path of the file to upload to + /// The callback Action to perform on completion + /// The callback Action to perform on exception + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing + /// The total size of the file if available + public void UploadChunkedFileAsync(Func chunkNeeded, string path, Action success, Action failure, bool overwrite = true, string parentRevision = null, long? fileSize = null) + { + var chunkedUploader = new DropNet.Helpers.ChunkedUploadHelper(this, chunkNeeded, path, success, failure, overwrite, parentRevision, fileSize); + chunkedUploader.Start(); + } + /// /// Starts a chunked upload to Dropbox given a byte array. /// diff --git a/DropNet/DropNet.csproj b/DropNet/DropNet.csproj index 15338f6..f4ecb3d 100644 --- a/DropNet/DropNet.csproj +++ b/DropNet/DropNet.csproj @@ -75,6 +75,7 @@ + diff --git a/DropNet/Helpers/ChunkedUploadHelper.cs b/DropNet/Helpers/ChunkedUploadHelper.cs new file mode 100644 index 0000000..4c7d510 --- /dev/null +++ b/DropNet/Helpers/ChunkedUploadHelper.cs @@ -0,0 +1,85 @@ +using System; +using DropNet.Exceptions; +using DropNet.Models; + +namespace DropNet.Helpers +{ + public class ChunkedUploadHelper + { + private readonly DropNetClient _client; + private readonly Func _chunkNeeded; + private readonly string _path; + private readonly Action _success; + private readonly Action _failure; + private readonly bool _overwrite; + private readonly string _parentRevision; + private readonly long? _fileSize; + + public ChunkedUploadHelper(DropNetClient client, Func chunkNeeded, string path, Action success, Action failure, bool overwrite, string parentRevision, long? fileSize) + { + if (client == null) + { + throw new ArgumentNullException("client"); + } + + if (chunkNeeded == null) + { + throw new ArgumentNullException("chunkNeeded"); + } + + if (success == null) + { + throw new ArgumentNullException("success"); + } + + if (failure == null) + { + throw new ArgumentNullException("failure"); + } + + _client = client; + _chunkNeeded = chunkNeeded; + _path = path; + _success = success; + _failure = failure; + _overwrite = overwrite; + _parentRevision = parentRevision; + _fileSize = fileSize; + } + + public void Start() + { + var firstChunk = _chunkNeeded.Invoke(0); + var chunkLength = firstChunk.GetLength(0); + if (chunkLength <= 0) + { + _failure.Invoke(new DropboxException("Aborting chunked upload because chunkNeeded function returned no data on first call.")); + } + + _client.StartChunkedUploadAsync(firstChunk, OnChunkSuccess, OnChunkedUploadFailure ); + } + + private void OnChunkSuccess(ChunkedUpload chunkedUpload) + { + var offset = chunkedUpload.Offset; + var nextChunk = _fileSize.GetValueOrDefault(long.MaxValue) > offset + ? _chunkNeeded.Invoke(offset) + : new byte[0]; + + var chunkLength = nextChunk.GetLength(0); + if (chunkLength > 0) + { + _client.AppendChunkedUploadAsync(chunkedUpload, nextChunk, OnChunkSuccess, OnChunkedUploadFailure); + } + else + { + _client.CommitChunkedUploadAsync(chunkedUpload, _path, _success, _failure, _overwrite, _parentRevision); + } + } + + private void OnChunkedUploadFailure(DropboxException dropboxException) + { + _failure.Invoke(dropboxException); + } + } +} \ No newline at end of file From 31bd34af8af92bdff72557d4072cc150488105f1 Mon Sep 17 00:00:00 2001 From: Austin Thompson Date: Fri, 29 Nov 2013 16:25:19 -0600 Subject: [PATCH 26/65] Added progress support for async chunked uploads --- .../DropNet.WindowsPhone.csproj | 6 +++ DropNet/Client/Files.Async.cs | 5 +- DropNet/DropNet.csproj | 1 + DropNet/Helpers/ChunkedUploadHelper.cs | 16 +++++- DropNet/Models/ChunkedUploadProgress.cs | 53 +++++++++++++++++++ 5 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 DropNet/Models/ChunkedUploadProgress.cs diff --git a/DropNet.WindowsPhone/DropNet.WindowsPhone.csproj b/DropNet.WindowsPhone/DropNet.WindowsPhone.csproj index 8fa8730..5dd26da 100644 --- a/DropNet.WindowsPhone/DropNet.WindowsPhone.csproj +++ b/DropNet.WindowsPhone/DropNet.WindowsPhone.csproj @@ -86,6 +86,9 @@ Models\ChunkedUpload.cs + + Models\ChunkedUploadProgress.cs + Models\CopyRefResponse.cs @@ -111,6 +114,9 @@ Helpers\RequestHelper.cs + + Helpers\ChunkedUploadHelper.cs + diff --git a/DropNet/Client/Files.Async.cs b/DropNet/Client/Files.Async.cs index 6f72231..c0969c1 100644 --- a/DropNet/Client/Files.Async.cs +++ b/DropNet/Client/Files.Async.cs @@ -178,12 +178,13 @@ public void UploadFileAsync(string path, string filename, Stream fileStream, Act /// The full path of the file to upload to /// The callback Action to perform on completion /// The callback Action to perform on exception + /// The optional callback Action that receives upload progress /// Specify wether the file upload should replace an existing file /// The revision of the file you're editing /// The total size of the file if available - public void UploadChunkedFileAsync(Func chunkNeeded, string path, Action success, Action failure, bool overwrite = true, string parentRevision = null, long? fileSize = null) + public void UploadChunkedFileAsync(Func chunkNeeded, string path, Action success, Action failure, Action progress = null, bool overwrite = true, string parentRevision = null, long? fileSize = null) { - var chunkedUploader = new DropNet.Helpers.ChunkedUploadHelper(this, chunkNeeded, path, success, failure, overwrite, parentRevision, fileSize); + var chunkedUploader = new DropNet.Helpers.ChunkedUploadHelper(this, chunkNeeded, path, success, failure, progress, overwrite, parentRevision, fileSize); chunkedUploader.Start(); } diff --git a/DropNet/DropNet.csproj b/DropNet/DropNet.csproj index f4ecb3d..d53ab79 100644 --- a/DropNet/DropNet.csproj +++ b/DropNet/DropNet.csproj @@ -79,6 +79,7 @@ + diff --git a/DropNet/Helpers/ChunkedUploadHelper.cs b/DropNet/Helpers/ChunkedUploadHelper.cs index 4c7d510..420e30b 100644 --- a/DropNet/Helpers/ChunkedUploadHelper.cs +++ b/DropNet/Helpers/ChunkedUploadHelper.cs @@ -11,11 +11,13 @@ public class ChunkedUploadHelper private readonly string _path; private readonly Action _success; private readonly Action _failure; + private readonly Action _progress; private readonly bool _overwrite; private readonly string _parentRevision; private readonly long? _fileSize; + private long _chunksCompleted; - public ChunkedUploadHelper(DropNetClient client, Func chunkNeeded, string path, Action success, Action failure, bool overwrite, string parentRevision, long? fileSize) + public ChunkedUploadHelper(DropNetClient client, Func chunkNeeded, string path, Action success, Action failure, Action progress, bool overwrite, string parentRevision, long? fileSize) { if (client == null) { @@ -42,6 +44,7 @@ public ChunkedUploadHelper(DropNetClient client, Func chunkNeeded, _path = path; _success = success; _failure = failure; + _progress = progress; _overwrite = overwrite; _parentRevision = parentRevision; _fileSize = fileSize; @@ -56,11 +59,22 @@ public void Start() _failure.Invoke(new DropboxException("Aborting chunked upload because chunkNeeded function returned no data on first call.")); } + UpdateProgress(0, null); _client.StartChunkedUploadAsync(firstChunk, OnChunkSuccess, OnChunkedUploadFailure ); } + private void UpdateProgress(long offset, string uploadId) + { + if (_progress != null) + { + _progress.Invoke(new ChunkedUploadProgress(uploadId, _chunksCompleted, offset, _fileSize)); + } + } + private void OnChunkSuccess(ChunkedUpload chunkedUpload) { + _chunksCompleted++; + UpdateProgress(chunkedUpload.Offset, chunkedUpload.UploadId); var offset = chunkedUpload.Offset; var nextChunk = _fileSize.GetValueOrDefault(long.MaxValue) > offset ? _chunkNeeded.Invoke(offset) diff --git a/DropNet/Models/ChunkedUploadProgress.cs b/DropNet/Models/ChunkedUploadProgress.cs new file mode 100644 index 0000000..6681639 --- /dev/null +++ b/DropNet/Models/ChunkedUploadProgress.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; + +namespace DropNet.Models +{ + public class ChunkedUploadProgress + { + private readonly string _uploadId; + private readonly long _chunksCompleted; + private readonly long _bytesSaved; + private readonly long? _fileSize; + + public ChunkedUploadProgress(string uploadId, long chunksCompleted, long bytesSaved, long? fileSize) + { + _uploadId = uploadId; + this._chunksCompleted = chunksCompleted; + this._bytesSaved = bytesSaved; + this._fileSize = fileSize; + } + + public string UploadId + { + get + { + return this._uploadId; + } + } + + public long ChunksCompleted + { + get + { + return this._chunksCompleted; + } + } + + public long BytesSaved + { + get + { + return this._bytesSaved; + } + } + + public long? FileSize + { + get + { + return this._fileSize; + } + } + } +} From 169fee8ce7545b06991b9da1e874104790cda511 Mon Sep 17 00:00:00 2001 From: Austin Thompson Date: Sun, 1 Dec 2013 21:16:55 -0600 Subject: [PATCH 27/65] Added chunked upload auto retry on chunk failure A default retry limit of 100 is used for now. It is per upload and not per chunk. The retry count was added to the progress information so that it can be displayed to users if desired. Some sort of sliding delay between retries might be a good idea so that the limit isn't burned through too quickly in certain situations (disconnect ethernet cable, airplaine mode, etc.). --- DropNet/Client/Files.Async.cs | 5 +++-- DropNet/Helpers/ChunkedUploadHelper.cs | 20 +++++++++++++++++--- DropNet/Models/ChunkedUploadProgress.cs | 18 ++++++++++++++---- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/DropNet/Client/Files.Async.cs b/DropNet/Client/Files.Async.cs index c0969c1..ba8533a 100644 --- a/DropNet/Client/Files.Async.cs +++ b/DropNet/Client/Files.Async.cs @@ -182,9 +182,10 @@ public void UploadFileAsync(string path, string filename, Stream fileStream, Act /// Specify wether the file upload should replace an existing file /// The revision of the file you're editing /// The total size of the file if available - public void UploadChunkedFileAsync(Func chunkNeeded, string path, Action success, Action failure, Action progress = null, bool overwrite = true, string parentRevision = null, long? fileSize = null) + /// The number of times to retry uploading if a chunk fails, unlimited if null. + public void UploadChunkedFileAsync(Func chunkNeeded, string path, Action success, Action failure, Action progress = null, bool overwrite = true, string parentRevision = null, long? fileSize = null, long? maxRetries = null) { - var chunkedUploader = new DropNet.Helpers.ChunkedUploadHelper(this, chunkNeeded, path, success, failure, progress, overwrite, parentRevision, fileSize); + var chunkedUploader = new DropNet.Helpers.ChunkedUploadHelper(this, chunkNeeded, path, success, failure, progress, overwrite, parentRevision, fileSize, maxRetries); chunkedUploader.Start(); } diff --git a/DropNet/Helpers/ChunkedUploadHelper.cs b/DropNet/Helpers/ChunkedUploadHelper.cs index 420e30b..58b9d70 100644 --- a/DropNet/Helpers/ChunkedUploadHelper.cs +++ b/DropNet/Helpers/ChunkedUploadHelper.cs @@ -6,6 +6,7 @@ namespace DropNet.Helpers { public class ChunkedUploadHelper { + private const long DefaultMaxRetries = 100; private readonly DropNetClient _client; private readonly Func _chunkNeeded; private readonly string _path; @@ -15,9 +16,12 @@ public class ChunkedUploadHelper private readonly bool _overwrite; private readonly string _parentRevision; private readonly long? _fileSize; + private readonly long? _maxRetries; private long _chunksCompleted; + private long _chunksFailed; + private ChunkedUpload _lastChunkUploaded; - public ChunkedUploadHelper(DropNetClient client, Func chunkNeeded, string path, Action success, Action failure, Action progress, bool overwrite, string parentRevision, long? fileSize) + public ChunkedUploadHelper(DropNetClient client, Func chunkNeeded, string path, Action success, Action failure, Action progress, bool overwrite, string parentRevision, long? fileSize, long? maxRetries) { if (client == null) { @@ -48,6 +52,7 @@ public ChunkedUploadHelper(DropNetClient client, Func chunkNeeded, _overwrite = overwrite; _parentRevision = parentRevision; _fileSize = fileSize; + _maxRetries = maxRetries; } public void Start() @@ -67,13 +72,14 @@ private void UpdateProgress(long offset, string uploadId) { if (_progress != null) { - _progress.Invoke(new ChunkedUploadProgress(uploadId, _chunksCompleted, offset, _fileSize)); + _progress.Invoke(new ChunkedUploadProgress(uploadId, _chunksCompleted, offset, _chunksFailed, _fileSize)); } } private void OnChunkSuccess(ChunkedUpload chunkedUpload) { _chunksCompleted++; + _lastChunkUploaded = chunkedUpload; UpdateProgress(chunkedUpload.Offset, chunkedUpload.UploadId); var offset = chunkedUpload.Offset; var nextChunk = _fileSize.GetValueOrDefault(long.MaxValue) > offset @@ -93,7 +99,15 @@ private void OnChunkSuccess(ChunkedUpload chunkedUpload) private void OnChunkedUploadFailure(DropboxException dropboxException) { - _failure.Invoke(dropboxException); + _chunksFailed++; + if (_lastChunkUploaded != null && _chunksFailed <= _maxRetries.GetValueOrDefault(DefaultMaxRetries)) + { + OnChunkSuccess(_lastChunkUploaded); + } + else + { + _failure.Invoke(dropboxException); + } } } } \ No newline at end of file diff --git a/DropNet/Models/ChunkedUploadProgress.cs b/DropNet/Models/ChunkedUploadProgress.cs index 6681639..5bd8ea9 100644 --- a/DropNet/Models/ChunkedUploadProgress.cs +++ b/DropNet/Models/ChunkedUploadProgress.cs @@ -8,14 +8,16 @@ public class ChunkedUploadProgress private readonly string _uploadId; private readonly long _chunksCompleted; private readonly long _bytesSaved; + private readonly long _retryCount; private readonly long? _fileSize; - public ChunkedUploadProgress(string uploadId, long chunksCompleted, long bytesSaved, long? fileSize) + public ChunkedUploadProgress(string uploadId, long chunksCompleted, long bytesSaved, long retryCount, long? fileSize) { _uploadId = uploadId; - this._chunksCompleted = chunksCompleted; - this._bytesSaved = bytesSaved; - this._fileSize = fileSize; + _chunksCompleted = chunksCompleted; + _bytesSaved = bytesSaved; + _retryCount = retryCount; + _fileSize = fileSize; } public string UploadId @@ -49,5 +51,13 @@ public long? FileSize return this._fileSize; } } + + public long RetryCount + { + get + { + return this._retryCount; + } + } } } From c6b7016d84098169e0d4c2eb6d4d285a9d11430b Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Mon, 13 Jan 2014 12:15:49 +1100 Subject: [PATCH 28/65] Added IDropNetClient interface for simpler mocking during testing. All HTML comments have been transfered to interface and conditionals obeyed based on what was present in implementation. --- DropNet/Client/Client.cs | 48 +-- DropNet/Client/Files.Async.cs | 203 ------------ DropNet/Client/Files.Sync.cs | 171 ---------- DropNet/Client/IClient.cs | 608 ++++++++++++++++++++++++++++++++++ DropNet/Client/User.Async.cs | 21 -- DropNet/Client/User.Sync.cs | 18 - DropNet/DropNet.csproj | 1 + 7 files changed, 610 insertions(+), 460 deletions(-) create mode 100644 DropNet/Client/IClient.cs diff --git a/DropNet/Client/Client.cs b/DropNet/Client/Client.cs index bf2b9df..c6d00d3 100644 --- a/DropNet/Client/Client.cs +++ b/DropNet/Client/Client.cs @@ -12,7 +12,7 @@ namespace DropNet { - public partial class DropNetClient + public partial class DropNetClient : IDropNetClient { private const string ApiBaseUrl = "https://api.dropbox.com"; private const string ApiContentBaseUrl = "https://api-content.dropbox.com"; @@ -20,9 +20,6 @@ public partial class DropNetClient private UserLogin _userLogin; - /// - /// Contains the Users Token and Secret - /// public UserLogin UserLogin { get { return _userLogin; } @@ -33,9 +30,6 @@ public UserLogin UserLogin } } - /// - /// To use Dropbox API in sandbox mode (app folder access) set to true - /// public bool UseSandbox { get; set; } private const string SandboxRoot = "sandbox"; @@ -61,13 +55,6 @@ string Root get { return UseSandbox ? SandboxRoot : DropboxRoot; } } - /// - /// Default Constructor for the DropboxClient - /// - /// The Api Key to use for the Dropbox Requests - /// The Api Secret to use for the Dropbox Requests - /// The authentication method to use. - /// The proxy to use for web requests public DropNetClient(string apiKey, string appSecret, AuthenticationMethod authenticationMethod = AuthenticationMethod.OAuth1) { LoadClient(); @@ -77,27 +64,12 @@ public DropNetClient(string apiKey, string appSecret, AuthenticationMethod authe UserLogin = null; } - /// - /// Creates an instance of the DropNetClient given an API Key/Secret and an OAuth2 Access Token - /// - /// The Api Key to use for the Dropbox Requests - /// The Api Secret to use for the Dropbox Requests - /// The OAuth2 access token - /// The proxy to use for web requests public DropNetClient(string apiKey, string appSecret, string accessToken) : this(apiKey, appSecret, AuthenticationMethod.OAuth2) { UserLogin = new UserLogin { Token = accessToken }; } - /// - /// Creates an instance of the DropNetClient given an API Key/Secret and an OAuth1 User Token/Secret - /// - /// The Api Key to use for the Dropbox Requests - /// The Api Secret to use for the Dropbox Requests - /// The OAuth1 User authentication token - /// The OAuth1 Users matching secret - /// The proxy to use for web requests public DropNetClient(string apiKey, string appSecret, string userToken, string userSecret) :this(apiKey, appSecret) { @@ -125,22 +97,11 @@ private void LoadClient() UseSandbox = false; } - /// - /// Helper Method to Build up the Url to authorize a Token/Secret - /// - /// - /// public string BuildAuthorizeUrl(string callback = null) { return BuildAuthorizeUrl(UserLogin, callback); } - /// - /// Helper Method to Build up the Url to authorize a Token/Secret - /// - /// - /// - /// public string BuildAuthorizeUrl(UserLogin userLogin, string callback = null) { if (userLogin == null) @@ -151,13 +112,6 @@ public string BuildAuthorizeUrl(UserLogin userLogin, string callback = null) return _restClient.BuildUri(request).ToString(); } - /// - /// This starts the OAuth 2.0 authorization flow. This isn't an API call—it's the web page that lets the user sign in to Dropbox and authorize your app. The user must be redirected to the page over HTTPS and it should be presented to the user through their web browser. After the user decides whether or not to authorize your app, they will be redirected to the URL specified by the 'redirectUri'. - /// - /// The type of authorization flow to use. See the OAuth2AuthorizationFlow enum documentation for more information. - /// Where to redirect the user after authorization has completed. This must be the exact URI registered in the app console (https://www.dropbox.com/developers/apps), though localhost and 127.0.0.1 are always accepted. A redirect URI is required for a token flow, but optional for code. If the redirect URI is omitted, the code will be presented directly to the user and they will be invited to enter the information in your app. - /// Arbitrary data that will be passed back to your redirect URI. This parameter can be used to track a user through the authorization flow in order to prevent cross-site request forgery (CRSF) attacks. - /// A URL to which your app should redirect the user for authorization. After the user authorizes your app, they will be sent to your redirect URI. The type of response varies based on the 'oauth2AuthorizationFlow' argument. . public string BuildAuthorizeUrl(OAuth2AuthorizationFlow oAuth2AuthorizationFlow, string redirectUri, string state = null) { if (string.IsNullOrWhiteSpace(redirectUri)) diff --git a/DropNet/Client/Files.Async.cs b/DropNet/Client/Files.Async.cs index ba8533a..139a81d 100644 --- a/DropNet/Client/Files.Async.cs +++ b/DropNet/Client/Files.Async.cs @@ -9,12 +9,6 @@ namespace DropNet { public partial class DropNetClient { - /// - /// Gets MetaData for a File or Folder. For a folder this includes its contents. For a file, this includes details such as file size. - /// - /// The path of the file or folder - /// Success call back - /// Failure call back public void GetMetaDataAsync(string path, Action success, Action failure) { if (!string.IsNullOrEmpty(path) && !path.StartsWith("/")) @@ -27,15 +21,6 @@ public void GetMetaDataAsync(string path, Action success, Action - /// Gets MetaData for a File or Folder. For a folder this includes its contents. For a file, this includes details such as file size. - /// Optional 'hash' param returns HTTP code 304 (Directory contents have not changed) if contents have not changed since the - /// hash was retrieved on a previous call. - /// - /// The path of the file or folder - /// hash - Optional. Listing return values include a hash representing the state of the directory's contents. If you provide this argument to the metadata call, you give the service an opportunity to respond with a "304 Not Modified" status code instead of a full (potentially very large) directory listing. This argument is ignored if the specified path is associated with a file or if list=false. - /// Success callback - /// Failure callback public void GetMetaDataAsync(string path, string hash, Action success, Action failure) { if (path != "" && !path.StartsWith("/")) path = "/" + path; @@ -47,38 +32,17 @@ public void GetMetaDataAsync(string path, string hash, Action success, ExecuteAsync(ApiType.Base, request, success, failure); } - /// - /// Gets list of metadata for search string - /// - /// The search string - /// Success call back - /// Failure call back public void SearchAsync(string searchString, Action> success, Action failure) { SearchAsync(searchString, string.Empty, success, failure); } - /// - /// Gets list of metadata for search string - /// - /// The search string - /// The path of the file or folder - /// Success call back - /// Failure call back public void SearchAsync(string searchString, string path, Action> success, Action failure) { var request = _requestHelper.CreateSearchRequest(searchString, path, Root); ExecuteAsync(ApiType.Base, request, success, failure); } - - - /// - /// Downloads a File from dropbox given the path - /// - /// The path of the file to download - /// /// Success callback - /// Failure callback public void GetFileAsync(string path, Action success, Action failure) { @@ -89,15 +53,6 @@ public void GetFileAsync(string path, Action success, Action - /// Downloads a part of a File from dropbox given the path - /// - /// The path of the file to download - /// The index of the first byte to get. - /// The index of the last byte to get. - /// Revision of the file - /// Success callback - /// Failure callback public void GetFileAsync(string path, long startByte, long endByte, string rev, Action success, Action failure) { if (!path.StartsWith("/")) path = "/" + path; @@ -108,14 +63,6 @@ public void GetFileAsync(string path, long startByte, long endByte, string rev, } #if !WINDOWS_PHONE && !MONOTOUCH && !WINRT - /// - /// Uploads a File to Dropbox from the local file system to the specified folder - /// - /// The path of the folder to upload to - /// The local file to upload/// Success callback - /// Failure callback - /// Specify wether the file upload should replace an existing file - /// The revision of the file you're editing public void UploadFileAsync(string path, FileInfo localFile, Action success, Action failure, bool overwrite = true, string parentRevision = null) { //Get the file stream @@ -133,16 +80,6 @@ public void UploadFileAsync(string path, FileInfo localFile, Action su } #endif - /// - /// Uploads a File to Dropbox given the raw data. - /// - /// The path of the folder to upload to - /// The Name of the file to upload to dropbox - /// The file data - /// Success callback - /// Failure callback - /// Specify wether the file upload should replace an existing file - /// The revision of the file you're editing public void UploadFileAsync(string path, string filename, byte[] fileData, Action success, Action failure, bool overwrite = true, string parentRevision = null) { if (path != "" && !path.StartsWith("/")) path = "/" + path; @@ -152,16 +89,6 @@ public void UploadFileAsync(string path, string filename, byte[] fileData, Actio ExecuteAsync(ApiType.Content, request, success, failure); } - /// - /// Uploads a File to Dropbox given the raw data. - /// - /// The path of the folder to upload to - /// The Name of the file to upload to dropbox - /// The file data - /// The callback Action to perform on completion - /// The callback Action to perform on exception - /// Specify wether the file upload should replace an existing file - /// The revision of the file you're editing public void UploadFileAsync(string path, string filename, Stream fileStream, Action success, Action failure, bool overwrite = true, string parentRevision = null) { if (path != "" && !path.StartsWith("/")) path = "/" + path; @@ -171,30 +98,12 @@ public void UploadFileAsync(string path, string filename, Stream fileStream, Act ExecuteAsync(ApiType.Content, request, success, failure); } - /// - /// Uploads a File to Dropbox in chunks that are assembled into a single file when finished. - /// - /// The callback function that returns a byte array given an offset - /// The full path of the file to upload to - /// The callback Action to perform on completion - /// The callback Action to perform on exception - /// The optional callback Action that receives upload progress - /// Specify wether the file upload should replace an existing file - /// The revision of the file you're editing - /// The total size of the file if available - /// The number of times to retry uploading if a chunk fails, unlimited if null. public void UploadChunkedFileAsync(Func chunkNeeded, string path, Action success, Action failure, Action progress = null, bool overwrite = true, string parentRevision = null, long? fileSize = null, long? maxRetries = null) { var chunkedUploader = new DropNet.Helpers.ChunkedUploadHelper(this, chunkNeeded, path, success, failure, progress, overwrite, parentRevision, fileSize, maxRetries); chunkedUploader.Start(); } - /// - /// Starts a chunked upload to Dropbox given a byte array. - /// - /// The file data - /// The callback Action to perform on completion - /// The callback Action to perform on exception public void StartChunkedUploadAsync(byte[] fileData, Action success, Action failure) { var request = _requestHelper.CreateChunkedUploadRequest(fileData); @@ -202,13 +111,6 @@ public void StartChunkedUploadAsync(byte[] fileData, Action succe ExecuteAsync(ApiType.Content, request, success, failure); } - /// - /// Add data to a chunked upload given a byte array. - /// - /// A ChunkedUpload object received from the StartChunkedUpload method - /// The file data - /// The callback Action to perform on completion - /// The callback Action to perform on exception public void AppendChunkedUploadAsync(ChunkedUpload upload, byte[] fileData, Action success, Action failure) { var request = _requestHelper.CreateAppendChunkedUploadRequest(upload, fileData); @@ -216,15 +118,6 @@ public void AppendChunkedUploadAsync(ChunkedUpload upload, byte[] fileData, Act ExecuteAsync(ApiType.Content, request, success, failure); } - /// - /// Commit a completed chunked upload - /// - /// A ChunkedUpload object received from the StartChunkedUpload method - /// The full path of the file to upload to - /// The callback Action to perform on completion - /// The callback Action to perform on exception - /// Specify wether the file upload should replace an existing file - /// The revision of the file you're editing public void CommitChunkedUploadAsync(ChunkedUpload upload, string path, Action success, Action failure, bool overwrite = true, string parentRevision = null) { var request = _requestHelper.CreateCommitChunkedUploadRequest(upload, path, Root, overwrite, parentRevision); @@ -232,12 +125,6 @@ public void CommitChunkedUploadAsync(ChunkedUpload upload, string path, Action - /// Deletes the file or folder from dropbox with the given path - /// - /// The Path of the file or folder to delete. - /// Success callback - /// Failure callback public void DeleteAsync(string path, Action success, Action failure) { if (path != "" && !path.StartsWith("/")) path = "/" + path; @@ -247,13 +134,6 @@ public void DeleteAsync(string path, Action success, Action - /// Copies a file or folder on Dropbox - /// - /// The path to the file or folder to copy - /// The path to where the file or folder is getting copied - /// Success callback - /// Failure callback public void CopyAsync(string fromPath, string toPath, Action success, Action failure) { if (!fromPath.StartsWith("/")) fromPath = "/" + fromPath; @@ -264,13 +144,6 @@ public void CopyAsync(string fromPath, string toPath, Action succ ExecuteAsync(ApiType.Base, request, success, failure); } - /// - /// Copies a file or folder on Dropbox using a copy_ref as the source. - /// - /// Specifies a copy_ref generated from a previous /copy_ref call - /// The path to where the file or folder is getting copied - /// Success callback - /// Failure callback public void CopyFromCopyRefAsync(string fromCopyRef, string toPath, Action success, Action failure) { if (!toPath.StartsWith("/")) toPath = "/" + toPath; @@ -280,13 +153,6 @@ public void CopyFromCopyRefAsync(string fromCopyRef, string toPath, Action - /// Moves a file or folder on Dropbox - /// - /// The path to the file or folder to move - /// The path to where the file or folder is getting moved - /// Success callback - /// Failure callback public void MoveAsync(string fromPath, string toPath, Action success, Action failure) { if (!fromPath.StartsWith("/")) fromPath = "/" + fromPath; @@ -297,12 +163,6 @@ public void MoveAsync(string fromPath, string toPath, Action succ ExecuteAsync(ApiType.Base, request, success, failure); } - /// - /// Creates a folder on Dropbox - /// - /// The path to the folder to create - /// Success callback - /// Failure callback public void CreateFolderAsync(string path, Action success, Action failure) { if (!path.StartsWith("/")) path = "/" + path; @@ -312,26 +172,11 @@ public void CreateFolderAsync(string path, Action success, Action - /// Creates and returns a shareable link to files or folders. - /// Note: Links created by the /shares API call expire after thirty days. - /// - /// The path - /// Success callback - /// Failure callback public void GetShareAsync(string path, Action success, Action failure) { GetShareAsync(path, true, success, failure); } - /// - /// Creates and returns a shareable link to files or folders. - /// Note: Links created by the /shares API call expire after thirty days. - /// - /// The path - /// True to shorten the share url - /// Success callback - /// Failure callback public void GetShareAsync(string path, bool shortUrl, Action success, Action failure) { if (!path.StartsWith("/")) path = "/" + path; @@ -341,13 +186,6 @@ public void GetShareAsync(string path, bool shortUrl, Action succ ExecuteAsync(ApiType.Base, request, success, failure); } - /// - /// Returns a link directly to a file. - /// Similar to /shares. The difference is that this bypasses the Dropbox webserver, used to provide a preview of the file, so that you can effectively stream the contents of your media. - /// - /// The path - /// Success callback - /// Failure callback public void GetMediaAsync(string path, Action success, Action failure) { if (!path.StartsWith("/")) path = "/" + path; @@ -357,13 +195,6 @@ public void GetMediaAsync(string path, Action success, Action - /// The beta delta function, gets updates for a given folder - /// - /// - /// - /// - /// public void GetDeltaAsync(bool IKnowThisIsBetaOnly, string path, Action success, Action failure) { if (!IKnowThisIsBetaOnly) return; @@ -375,47 +206,21 @@ public void GetDeltaAsync(bool IKnowThisIsBetaOnly, string path, Action(ApiType.Base, request, success, failure); } - /// - /// Gets the thumbnail of an image given its MetaData - /// - /// The MetaData - /// Success callback - /// Failure callback public void GetThumbnailAsync(MetaData file, Action success, Action failure) { GetThumbnailAsync(file.Path, ThumbnailSize.Small, success, failure); } - /// - /// Gets the thumbnail of an image given its MetaData - /// - /// The metadat file - /// Thumbnail size - /// success callback - /// Failure callback public void GetThumbnailAsync(MetaData file, ThumbnailSize size, Action success, Action failure) { GetThumbnailAsync(file.Path, size, success, failure); } - /// - /// Gets the thumbnail of an image given its path - /// - /// The path - /// success callback - /// failure callback public void GetThumbnailAsync(string path, Action success, Action failure) { GetThumbnailAsync(path, ThumbnailSize.Small, success, failure); } - /// - /// Gets the thumbnail of an image given its path - /// - /// The path - /// Thumbnail size - /// success callback - /// failure callback public void GetThumbnailAsync(string path, ThumbnailSize size, Action success, Action failure) { if (!path.StartsWith("/")) path = "/" + path; @@ -427,14 +232,6 @@ public void GetThumbnailAsync(string path, ThumbnailSize size, Action su failure); } - /// - /// Creates and returns a copy_ref to a file. - /// - /// This reference string can be used to copy that file to another user's Dropbox by passing it in as the from_copy_ref parameter on /fileops/copy. - /// - /// The path - /// Success callback - /// Failure callback public void GetCopyRefAsync(string path, Action success, Action failure) { if (!path.StartsWith("/")) path = "/" + path; diff --git a/DropNet/Client/Files.Sync.cs b/DropNet/Client/Files.Sync.cs index e82b1e5..ae72583 100644 --- a/DropNet/Client/Files.Sync.cs +++ b/DropNet/Client/Files.Sync.cs @@ -14,21 +14,11 @@ namespace DropNet { public partial class DropNetClient { - - /// - /// Gets MetaData for the root folder. - /// - /// public MetaData GetMetaData() { return GetMetaData(string.Empty); } - /// - /// Gets MetaData for a File or Folder. For a folder this includes its contents. For a file, this includes details such as file size. - /// - /// The path of the file or folder - /// public MetaData GetMetaData(string path) { if (path != "" && !path.StartsWith("/")) path = "/" + path; @@ -38,12 +28,6 @@ public MetaData GetMetaData(string path) return Execute(ApiType.Base, request); } - /// - /// Gets List of MetaData for a File versions. Each metadata item contains info about file in certain version on Dropbox. - /// - /// The path of the file - /// Maximal number of versions to fetch. - /// public List GetVersions(string path, int limit) { var request = _requestHelper.CreateVersionsRequest(path, Root, limit); @@ -51,20 +35,11 @@ public List GetVersions(string path, int limit) return Execute>(ApiType.Base, request); } - /// - /// Gets list of metadata for search string - /// - /// The search string public List Search(string searchString) { return Search(searchString, string.Empty); } - /// - /// Gets list of metadata for search string - /// - /// The search string - /// The path of the file or folder public List Search(string searchString, string path) { var request = _requestHelper.CreateSearchRequest(searchString, path, Root); @@ -73,11 +48,6 @@ public List Search(string searchString, string path) } //TODO - Make class for this to return (instead of just a byte[]) - /// - /// Downloads a File from dropbox given the path - /// - /// The path of the file to download - /// The files raw bytes public byte[] GetFile(string path) { if (!path.StartsWith("/")) @@ -92,14 +62,6 @@ public byte[] GetFile(string path) } //TODO - Make class for this to return (instead of just a byte[]) - /// - /// Downloads a part of a File from dropbox given the path and a revision token. - /// - /// The path of the file to download - /// The index of the first byte to get. - /// The index of the last byte to get. - /// Revision string as featured by MetaData.Rev - /// The files raw bytes between and . public byte[] GetFile(string path, long startByte, long endByte, string rev) { if (!path.StartsWith("/")) @@ -113,11 +75,6 @@ public byte[] GetFile(string path, long startByte, long endByte, string rev) return response.RawBytes; } - /// - /// Retrieve the content of a file in the local file system - /// - /// The local file to upload - /// True on success public byte[] GetFileContentFromFS(FileInfo localFile) { //Get the file stream @@ -137,15 +94,6 @@ public byte[] GetFileContentFromFS(FileInfo localFile) return bytes; } - /// - /// Uploads a File to Dropbox given the raw data. - /// - /// The path of the folder to upload to - /// The Name of the file to upload to dropbox - /// The file data - /// Specify wether the file upload should replace an existing file - /// The revision of the file you're editing - /// True on success public MetaData UploadFilePUT(string path, string filename, byte[] fileData, bool overwrite = true, string parentRevision = null) { if (!path.StartsWith("/")) @@ -159,15 +107,6 @@ public MetaData UploadFilePUT(string path, string filename, byte[] fileData, boo return response.Data; } - /// - /// Uploads a File to Dropbox given the raw data. - /// - /// The path of the folder to upload to - /// The Name of the file to upload to dropbox - /// The file data - /// Specify wether the file upload should replace an existing file - /// The revision of the file you're editing - /// True on success public MetaData UploadFile(string path, string filename, byte[] fileData, bool overwrite = true, string parentRevision = null) { if (!path.StartsWith("/")) @@ -181,15 +120,6 @@ public MetaData UploadFile(string path, string filename, byte[] fileData, bool o return response.Data; } - /// - /// Uploads a File to Dropbox given the raw data. - /// - /// The path of the folder to upload to - /// The Name of the file to upload to dropbox - /// The file stream - /// Specify wether the file upload should replace an existing file - /// The revision of the file you're editing - /// True on success public MetaData UploadFile(string path, string filename, Stream stream, bool overwrite = true, string parentRevision = null) { if (!path.StartsWith("/")) @@ -203,11 +133,6 @@ public MetaData UploadFile(string path, string filename, Stream stream, bool ove return response.Data; } - /// - /// Starts a chunked upload to Dropbox given a byte array. - /// - /// The file data - /// A object representing the chunked upload on success public ChunkedUpload StartChunkedUpload(byte[] fileData) { var request = _requestHelper.CreateChunkedUploadRequest(fileData); @@ -215,12 +140,6 @@ public ChunkedUpload StartChunkedUpload(byte[] fileData) return response.Data; } - /// - /// Add data to a chunked upload given a byte array. - /// - /// A ChunkedUpload object received from the StartChunkedUpload method - /// The file data - /// A object representing the chunked upload on success public ChunkedUpload AppendChunkedUpload(ChunkedUpload upload, byte[] fileData) { var request = _requestHelper.CreateAppendChunkedUploadRequest(upload, fileData); @@ -228,14 +147,6 @@ public ChunkedUpload AppendChunkedUpload(ChunkedUpload upload, byte[] fileData) return response.Data; } - /// - /// Commit a completed chunked upload - /// - /// A ChunkedUpload object received from the StartChunkedUpload method - /// The full path of the file to upload to - /// Specify wether the file upload should replace an existing file - /// The revision of the file you're editing - /// A object representing the chunked upload on success public MetaData CommitChunkedUpload(ChunkedUpload upload, string path, bool overwrite = true, string parentRevision = null) { var request = _requestHelper.CreateCommitChunkedUploadRequest(upload, path, Root, overwrite, parentRevision); @@ -243,11 +154,6 @@ public MetaData CommitChunkedUpload(ChunkedUpload upload, string path, bool over return response.Data; } - /// - /// Deletes the file or folder from dropbox with the given path - /// - /// The Path of the file or folder to delete. - /// public MetaData Delete(string path) { if (!path.StartsWith("/")) @@ -258,12 +164,6 @@ public MetaData Delete(string path) return Execute(ApiType.Base, request); } - /// - /// Copies a file or folder on Dropbox - /// - /// The path to the file or folder to copy - /// The path to where the file or folder is getting copied - /// True on success public MetaData Copy(string fromPath, string toPath) { if (!fromPath.StartsWith("/")) @@ -280,12 +180,6 @@ public MetaData Copy(string fromPath, string toPath) return Execute(ApiType.Base, request); } - /// - /// Copies a file or folder on Dropbox using a copy_ref as the source. - /// - /// Specifies a copy_ref generated from a previous /copy_ref call - /// The path to where the file or folder is getting copied - /// True on success public MetaData CopyFromCopyRef(string fromCopyRef, string toPath) { if (!toPath.StartsWith("/")) @@ -297,12 +191,6 @@ public MetaData CopyFromCopyRef(string fromCopyRef, string toPath) return Execute(ApiType.Base, request); } - /// - /// Moves a file or folder on Dropbox - /// - /// The path to the file or folder to move - /// The path to where the file or folder is getting moved - /// True on success public MetaData Move(string fromPath, string toPath) { if (!fromPath.StartsWith("/")) @@ -319,11 +207,6 @@ public MetaData Move(string fromPath, string toPath) return Execute(ApiType.Base, request); } - /// - /// Creates a folder on Dropbox - /// - /// The path to the folder to create - /// MetaData of the newly created folder public MetaData CreateFolder(string path) { if (!path.StartsWith("/")) @@ -335,12 +218,6 @@ public MetaData CreateFolder(string path) return Execute(ApiType.Base, request); } - /// - /// Creates and returns a shareable link to files or folders. - /// Note: Links created by the /shares API call expire after thirty days. - /// - /// - /// public ShareResponse GetShare(string path, bool shortUrl = true) { if (!path.StartsWith("/")) @@ -353,12 +230,6 @@ public ShareResponse GetShare(string path, bool shortUrl = true) return Execute(ApiType.Base, request); } - /// - /// Returns a link directly to a file. - /// Similar to /shares. The difference is that this bypasses the Dropbox webserver, used to provide a preview of the file, so that you can effectively stream the contents of your media. - /// - /// - /// public ShareResponse GetMedia(string path) { if (!path.StartsWith("/")) @@ -370,43 +241,21 @@ public ShareResponse GetMedia(string path) return Execute(ApiType.Base, request); } - /// - /// Gets the thumbnail of an image given its MetaData - /// - /// - /// public byte[] GetThumbnail(MetaData file) { return GetThumbnail(file.Path, ThumbnailSize.Small); } - /// - /// Gets the thumbnail of an image given its MetaData - /// - /// - /// - /// public byte[] GetThumbnail(MetaData file, ThumbnailSize size) { return GetThumbnail(file.Path, size); } - /// - /// Gets the thumbnail of an image given its path - /// - /// - /// public byte[] GetThumbnail(string path) { return GetThumbnail(path, ThumbnailSize.Small); } - /// - /// Gets the thumbnail of an image given its path - /// - /// The path to the picture - /// The size to return the thumbnail - /// public byte[] GetThumbnail(string path, ThumbnailSize size) { if (!path.StartsWith("/")) @@ -420,13 +269,6 @@ public byte[] GetThumbnail(string path, ThumbnailSize size) return response.RawBytes; } - /// - /// Creates and returns a copy_ref to a file. - /// - /// This reference string can be used to copy that file to another user's Dropbox by passing it in as the from_copy_ref parameter on /fileops/copy. - /// - /// - /// public CopyRefResponse GetCopyRef(string path) { if (!path.StartsWith("/")) @@ -438,11 +280,6 @@ public CopyRefResponse GetCopyRef(string path) return Execute(ApiType.Base, request); } - /// - /// Gets the deltas for a user's folders and files. - /// - /// The value returned from the prior call to GetDelta or an empty string - /// public DeltaPage GetDelta(string cursor) { var request = _requestHelper.CreateDeltaRequest(cursor); @@ -465,11 +302,6 @@ public DeltaPage GetDelta(string cursor) return deltaPage; } - /// - /// Helper function to convert a stringlist to a DeltaEntry object - /// - /// - /// private DeltaEntry StringListToDeltaEntry(List stringList) { var deltaEntry = new DeltaEntry @@ -488,9 +320,6 @@ private DeltaEntry StringListToDeltaEntry(List stringList) return deltaEntry; } - /// - /// Private class used to deal with the DropBox API returning two different types in a given list - /// private class DeltaPageInternal { public string Cursor { get; set; } diff --git a/DropNet/Client/IClient.cs b/DropNet/Client/IClient.cs new file mode 100644 index 0000000..cb1aa87 --- /dev/null +++ b/DropNet/Client/IClient.cs @@ -0,0 +1,608 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Threading.Tasks; +using DropNet.Authenticators; +using DropNet.Exceptions; +using DropNet.Models; + +using RestSharp; + +namespace DropNet +{ + public interface IDropNetClient + { + /// + /// Contains the Users Token and Secret + /// + UserLogin UserLogin { get; set; } + + /// + /// To use Dropbox API in sandbox mode (app folder access) set to true + /// + bool UseSandbox { get; set; } + +#if !WINDOWS_PHONE && !WINRT + IWebProxy Proxy { get; set; } +#endif + + /// + /// Helper Method to Build up the Url to authorize a Token/Secret + /// + /// + /// + string BuildAuthorizeUrl(string callback = null); + + /// + /// Helper Method to Build up the Url to authorize a Token/Secret + /// + /// + /// + /// + string BuildAuthorizeUrl(UserLogin userLogin, string callback = null); + + /// + /// This starts the OAuth 2.0 authorization flow. This isn't an API call—it's the web page that lets the user sign in to Dropbox and authorize your app. The user must be redirected to the page over HTTPS and it should be presented to the user through their web browser. After the user decides whether or not to authorize your app, they will be redirected to the URL specified by the 'redirectUri'. + /// + /// The type of authorization flow to use. See the OAuth2AuthorizationFlow enum documentation for more information. + /// Where to redirect the user after authorization has completed. This must be the exact URI registered in the app console (https://www.dropbox.com/developers/apps), though localhost and 127.0.0.1 are always accepted. A redirect URI is required for a token flow, but optional for code. If the redirect URI is omitted, the code will be presented directly to the user and they will be invited to enter the information in your app. + /// Arbitrary data that will be passed back to your redirect URI. This parameter can be used to track a user through the authorization flow in order to prevent cross-site request forgery (CRSF) attacks. + /// A URL to which your app should redirect the user for authorization. After the user authorizes your app, they will be sent to your redirect URI. The type of response varies based on the 'oauth2AuthorizationFlow' argument. . + string BuildAuthorizeUrl(OAuth2AuthorizationFlow oAuth2AuthorizationFlow, string redirectUri, string state = null); + + /// + /// Gets MetaData for a File or Folder. For a folder this includes its contents. For a file, this includes details such as file size. + /// + /// The path of the file or folder + /// Success call back + /// Failure call back + void GetMetaDataAsync(string path, Action success, Action failure); + + /// + /// Gets MetaData for a File or Folder. For a folder this includes its contents. For a file, this includes details such as file size. + /// Optional 'hash' param returns HTTP code 304 (Directory contents have not changed) if contents have not changed since the + /// hash was retrieved on a previous call. + /// + /// The path of the file or folder + /// hash - Optional. Listing return values include a hash representing the state of the directory's contents. If you provide this argument to the metadata call, you give the service an opportunity to respond with a "304 Not Modified" status code instead of a full (potentially very large) directory listing. This argument is ignored if the specified path is associated with a file or if list=false. + /// Success callback + /// Failure callback + void GetMetaDataAsync(string path, string hash, Action success, Action failure); + + /// + /// Gets list of metadata for search string + /// + /// The search string + /// Success call back + /// Failure call back + void SearchAsync(string searchString, Action> success, Action failure); + + /// + /// Gets list of metadata for search string + /// + /// The search string + /// The path of the file or folder + /// Success call back + /// Failure call back + void SearchAsync(string searchString, string path, Action> success, Action failure); + + /// + /// Downloads a File from dropbox given the path + /// + /// The path of the file to download + /// /// Success callback + /// Failure callback + void GetFileAsync(string path, Action success, Action failure); + + /// + /// Downloads a part of a File from dropbox given the path + /// + /// The path of the file to download + /// The index of the first byte to get. + /// The index of the last byte to get. + /// Revision of the file + /// Success callback + /// Failure callback + void GetFileAsync(string path, long startByte, long endByte, string rev, Action success, Action failure); + +#if !WINDOWS_PHONE && !MONOTOUCH && !WINRT + /// + /// Uploads a File to Dropbox from the local file system to the specified folder + /// + /// The path of the folder to upload to + /// The local file to upload/// Success callback + /// Failure callback + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing + void UploadFileAsync(string path, FileInfo localFile, Action success, Action failure, bool overwrite = true, string parentRevision = null); +#endif + + /// + /// Uploads a File to Dropbox given the raw data. + /// + /// The path of the folder to upload to + /// The Name of the file to upload to dropbox + /// The file data + /// Success callback + /// Failure callback + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing + void UploadFileAsync(string path, string filename, byte[] fileData, Action success, Action failure, bool overwrite = true, string parentRevision = null); + + /// + /// Uploads a File to Dropbox given the raw data. + /// + /// The path of the folder to upload to + /// The Name of the file to upload to dropbox + /// The file data + /// The callback Action to perform on completion + /// The callback Action to perform on exception + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing + void UploadFileAsync(string path, string filename, Stream fileStream, Action success, Action failure, bool overwrite = true, string parentRevision = null); + + /// + /// Uploads a File to Dropbox in chunks that are assembled into a single file when finished. + /// + /// The callback function that returns a byte array given an offset + /// The full path of the file to upload to + /// The callback Action to perform on completion + /// The callback Action to perform on exception + /// The optional callback Action that receives upload progress + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing + /// The total size of the file if available + /// The number of times to retry uploading if a chunk fails, unlimited if null. + void UploadChunkedFileAsync(Func chunkNeeded, string path, Action success, Action failure, Action progress = null, bool overwrite = true, string parentRevision = null, long? fileSize = null, long? maxRetries = null); + + /// + /// Starts a chunked upload to Dropbox given a byte array. + /// + /// The file data + /// The callback Action to perform on completion + /// The callback Action to perform on exception + void StartChunkedUploadAsync(byte[] fileData, Action success, Action failure); + + /// + /// Add data to a chunked upload given a byte array. + /// + /// A ChunkedUpload object received from the StartChunkedUpload method + /// The file data + /// The callback Action to perform on completion + /// The callback Action to perform on exception + void AppendChunkedUploadAsync(ChunkedUpload upload, byte[] fileData, Action success, Action failure); + + /// + /// Commit a completed chunked upload + /// + /// A ChunkedUpload object received from the StartChunkedUpload method + /// The full path of the file to upload to + /// The callback Action to perform on completion + /// The callback Action to perform on exception + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing + void CommitChunkedUploadAsync(ChunkedUpload upload, string path, Action success, Action failure, bool overwrite = true, string parentRevision = null); + + /// + /// Deletes the file or folder from dropbox with the given path + /// + /// The Path of the file or folder to delete. + /// Success callback + /// Failure callback + void DeleteAsync(string path, Action success, Action failure); + + /// + /// Copies a file or folder on Dropbox + /// + /// The path to the file or folder to copy + /// The path to where the file or folder is getting copied + /// Success callback + /// Failure callback + void CopyAsync(string fromPath, string toPath, Action success, Action failure); + + /// + /// Copies a file or folder on Dropbox using a copy_ref as the source. + /// + /// Specifies a copy_ref generated from a previous /copy_ref call + /// The path to where the file or folder is getting copied + /// Success callback + /// Failure callback + void CopyFromCopyRefAsync(string fromCopyRef, string toPath, Action success, Action failure); + + /// + /// Moves a file or folder on Dropbox + /// + /// The path to the file or folder to move + /// The path to where the file or folder is getting moved + /// Success callback + /// Failure callback + void MoveAsync(string fromPath, string toPath, Action success, Action failure); + + /// + /// Creates a folder on Dropbox + /// + /// The path to the folder to create + /// Success callback + /// Failure callback + void CreateFolderAsync(string path, Action success, Action failure); + + /// + /// Creates and returns a shareable link to files or folders. + /// Note: Links created by the /shares API call expire after thirty days. + /// + /// The path + /// Success callback + /// Failure callback + void GetShareAsync(string path, Action success, Action failure); + + /// + /// Creates and returns a shareable link to files or folders. + /// Note: Links created by the /shares API call expire after thirty days. + /// + /// The path + /// True to shorten the share url + /// Success callback + /// Failure callback + void GetShareAsync(string path, bool shortUrl, Action success, Action failure); + + /// + /// Returns a link directly to a file. + /// Similar to /shares. The difference is that this bypasses the Dropbox webserver, used to provide a preview of the file, so that you can effectively stream the contents of your media. + /// + /// The path + /// Success callback + /// Failure callback + void GetMediaAsync(string path, Action success, Action failure); + + /// + /// The beta delta function, gets updates for a given folder + /// + /// + /// + /// + /// + void GetDeltaAsync(bool IKnowThisIsBetaOnly, string path, Action success, Action failure); + + /// + /// Gets the thumbnail of an image given its MetaData + /// + /// The MetaData + /// Success callback + /// Failure callback + void GetThumbnailAsync(MetaData file, Action success, Action failure); + + /// + /// Gets the thumbnail of an image given its MetaData + /// + /// The metadat file + /// Thumbnail size + /// success callback + /// Failure callback + void GetThumbnailAsync(MetaData file, ThumbnailSize size, Action success, Action failure); + + /// + /// Gets the thumbnail of an image given its path + /// + /// The path + /// success callback + /// failure callback + void GetThumbnailAsync(string path, Action success, Action failure); + + /// + /// Gets the thumbnail of an image given its path + /// + /// The path + /// Thumbnail size + /// success callback + /// failure callback + void GetThumbnailAsync(string path, ThumbnailSize size, Action success, Action failure); + + /// + /// Creates and returns a copy_ref to a file. + /// + /// This reference string can be used to copy that file to another user's Dropbox by passing it in as the from_copy_ref parameter on /fileops/copy. + /// + /// The path + /// Success callback + /// Failure callback + void GetCopyRefAsync(string path, Action success, Action failure); + + Task GetMetaDataTask(string path); + Task GetMetaDataTask(string path, string hash); + Task> SearchTask(string searchString); + Task> SearchTask(string searchString, string path); + Task GetFileTask(string path); + Task UploadFileTask(string path, string filename, byte[] fileData, bool overwrite = true, string parentRevision = null); + Task UploadFileTask(string path, string filename, Stream fileStream, bool overwrite = true, string parentRevision = null); + Task DeleteTask(string path); + Task CopyTask(string fromPath, string toPath); + Task CopyFromCopyRefTask(string fromCopyRef, string toPath); + Task MoveTask(string fromPath, string toPath); + Task CreateFolderTask(string path, Action success, Action failure); + Task GetShareTask(string path, bool shortUrl = true); + Task GetMediaTask(string path); + Task GetThumbnailTask(MetaData file); + Task GetThumbnailTask(MetaData file, ThumbnailSize size); + Task GetThumbnailTask(string path); + Task GetThumbnailTask(string path, ThumbnailSize size); + Task GetCopyRefTask(string path); + +#if !WINDOWS_PHONE + /// + /// Gets MetaData for the root folder. + /// + /// + MetaData GetMetaData(); + + /// + /// Gets MetaData for a File or Folder. For a folder this includes its contents. For a file, this includes details such as file size. + /// + /// The path of the file or folder + /// + MetaData GetMetaData(string path); + + /// + /// Gets List of MetaData for a File versions. Each metadata item contains info about file in certain version on Dropbox. + /// + /// The path of the file + /// Maximal number of versions to fetch. + /// + List GetVersions(string path, int limit); + + /// + /// Gets list of metadata for search string + /// + /// The search string + List Search(string searchString); + + /// + /// Gets list of metadata for search string + /// + /// The search string + /// The path of the file or folder + List Search(string searchString, string path); + + /// + /// Downloads a File from dropbox given the path + /// + /// The path of the file to download + /// The files raw bytes + byte[] GetFile(string path); + + /// + /// Downloads a part of a File from dropbox given the path and a revision token. + /// + /// The path of the file to download + /// The index of the first byte to get. + /// The index of the last byte to get. + /// Revision string as featured by MetaData.Rev + /// The files raw bytes between and . + byte[] GetFile(string path, long startByte, long endByte, string rev); + + /// + /// Retrieve the content of a file in the local file system + /// + /// The local file to upload + /// True on success + byte[] GetFileContentFromFS(FileInfo localFile); + + /// + /// Uploads a File to Dropbox given the raw data. + /// + /// The path of the folder to upload to + /// The Name of the file to upload to dropbox + /// The file data + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing + /// True on success + MetaData UploadFilePUT(string path, string filename, byte[] fileData, bool overwrite = true, string parentRevision = null); + + /// + /// Uploads a File to Dropbox given the raw data. + /// + /// The path of the folder to upload to + /// The Name of the file to upload to dropbox + /// The file data + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing + /// True on success + MetaData UploadFile(string path, string filename, byte[] fileData, bool overwrite = true, string parentRevision = null); + + /// + /// Uploads a File to Dropbox given the raw data. + /// + /// The path of the folder to upload to + /// The Name of the file to upload to dropbox + /// The file stream + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing + /// True on success + MetaData UploadFile(string path, string filename, Stream stream, bool overwrite = true, string parentRevision = null); + + /// + /// Starts a chunked upload to Dropbox given a byte array. + /// + /// The file data + /// A object representing the chunked upload on success + ChunkedUpload StartChunkedUpload(byte[] fileData); + + /// + /// Add data to a chunked upload given a byte array. + /// + /// A ChunkedUpload object received from the StartChunkedUpload method + /// The file data + /// A object representing the chunked upload on success + ChunkedUpload AppendChunkedUpload(ChunkedUpload upload, byte[] fileData); + + /// + /// Commit a completed chunked upload + /// + /// A ChunkedUpload object received from the StartChunkedUpload method + /// The full path of the file to upload to + /// Specify wether the file upload should replace an existing file + /// The revision of the file you're editing + /// A object representing the chunked upload on success + MetaData CommitChunkedUpload(ChunkedUpload upload, string path, bool overwrite = true, string parentRevision = null); + + /// + /// Deletes the file or folder from dropbox with the given path + /// + /// The Path of the file or folder to delete. + /// + MetaData Delete(string path); + + /// + /// Copies a file or folder on Dropbox + /// + /// The path to the file or folder to copy + /// The path to where the file or folder is getting copied + /// True on success + MetaData Copy(string fromPath, string toPath); + + /// + /// Copies a file or folder on Dropbox using a copy_ref as the source. + /// + /// Specifies a copy_ref generated from a previous /copy_ref call + /// The path to where the file or folder is getting copied + /// True on success + MetaData CopyFromCopyRef(string fromCopyRef, string toPath); + + /// + /// Moves a file or folder on Dropbox + /// + /// The path to the file or folder to move + /// The path to where the file or folder is getting moved + /// True on success + MetaData Move(string fromPath, string toPath); + + /// + /// Creates a folder on Dropbox + /// + /// The path to the folder to create + /// MetaData of the newly created folder + MetaData CreateFolder(string path); + + /// + /// Creates and returns a shareable link to files or folders. + /// Note: Links created by the /shares API call expire after thirty days. + /// + /// + /// + ShareResponse GetShare(string path, bool shortUrl = true); + + /// + /// Returns a link directly to a file. + /// Similar to /shares. The difference is that this bypasses the Dropbox webserver, used to provide a preview of the file, so that you can effectively stream the contents of your media. + /// + /// + /// + ShareResponse GetMedia(string path); + + /// + /// Gets the thumbnail of an image given its MetaData + /// + /// + /// + byte[] GetThumbnail(MetaData file); + + /// + /// Gets the thumbnail of an image given its MetaData + /// + /// + /// + /// + byte[] GetThumbnail(MetaData file, ThumbnailSize size); + + /// + /// Gets the thumbnail of an image given its path + /// + /// + /// + byte[] GetThumbnail(string path); + + /// + /// Gets the thumbnail of an image given its path + /// + /// The path to the picture + /// The size to return the thumbnail + /// + byte[] GetThumbnail(string path, ThumbnailSize size); + + /// + /// Creates and returns a copy_ref to a file. + /// + /// This reference string can be used to copy that file to another user's Dropbox by passing it in as the from_copy_ref parameter on /fileops/copy. + /// + /// + /// + CopyRefResponse GetCopyRef(string path); + + /// + /// Gets the deltas for a user's folders and files. + /// + /// The value returned from the prior call to GetDelta or an empty string + /// + DeltaPage GetDelta(string cursor); + + /// + /// Shorthand method to get an OAuth1 token from Dropbox and build the Url to authorize it. + /// + /// + string GetTokenAndBuildUrl(string callback = null); + + /// + /// Provisions an OAuth1 token from the almightly dropbox.com (Token cant be used until authorized!) + /// + /// + UserLogin GetToken(); + + /// + /// Authorizes the previously-requested OAuth1 token + /// + /// + UserLogin GetAccessToken(); + + /// + /// Acquire an OAuth2 bearer token once the user has authorized the app. This endpoint only applies to apps using the AuthorizationFlow.Code flow. + /// + /// The authorization code provided by Dropbox when the user was redirected back to your site. + /// The redirect Uri for your site. This is only used to validate that it matches the original /oauth2/authorize; the user will not be redirected again. + /// An OAuth2 bearer token. + UserLogin GetAccessToken(string code, string redirectUri); + + AccountInfo AccountInfo(); +#endif + + /// + /// Gets a token from the almightly dropbox.com (Token cant be used until authorized!) + /// + void GetTokenAsync(Action success, Action failure); + + /// + /// Converts a request token into an Access token after the user has authorized access via dropbox.com + /// + /// + /// + void GetAccessTokenAsync(Action success, Action failure); + + /// + /// Acquire an OAuth2 bearer token once the user has authorized the app. This endpoint only applies to apps using the AuthorizationFlow.Code flow. + /// + /// Action to perform with the OAuth2 access token + /// + /// The authorization code provided by Dropbox when the user was redirected back to your site. + /// The redirect Uri for your site. This is only used to validate that it matches the original /oauth2/authorize; the user will not be redirected again. + void GetAccessTokenAsync(Action success, Action failure, string code, string redirectUri); + + /// + /// Gets AccountInfo + /// + /// + /// + void AccountInfoAsync(Action success, Action failure); + + [Obsolete("No longer supported by Dropbox")] + void CreateAccountAsync(string email, string firstName, string lastName, string password, Action success, Action failure); + } +} \ No newline at end of file diff --git a/DropNet/Client/User.Async.cs b/DropNet/Client/User.Async.cs index 09b53a5..384c1c9 100644 --- a/DropNet/Client/User.Async.cs +++ b/DropNet/Client/User.Async.cs @@ -8,9 +8,6 @@ namespace DropNet { public partial class DropNetClient { - /// - /// Gets a token from the almightly dropbox.com (Token cant be used until authorized!) - /// public void GetTokenAsync(Action success, Action failure) { var request = _requestHelper.CreateTokenRequest(); @@ -22,11 +19,6 @@ public void GetTokenAsync(Action success, Action fa }, failure); } - /// - /// Converts a request token into an Access token after the user has authorized access via dropbox.com - /// - /// - /// public void GetAccessTokenAsync(Action success, Action failure) { var request = _requestHelper.CreateAccessTokenRequest(); @@ -38,14 +30,6 @@ public void GetAccessTokenAsync(Action success, Action - /// Acquire an OAuth2 bearer token once the user has authorized the app. This endpoint only applies to apps using the AuthorizationFlow.Code flow. - /// - /// Action to perform with the OAuth2 access token - /// - /// The authorization code provided by Dropbox when the user was redirected back to your site. - /// The redirect Uri for your site. This is only used to validate that it matches the original /oauth2/authorize; the user will not be redirected again. public void GetAccessTokenAsync(Action success, Action failure, string code, string redirectUri) { RestRequest request = _requestHelper.CreateOAuth2AccessTokenRequest(code, redirectUri, _apiKey, _appsecret); @@ -57,11 +41,6 @@ public void GetAccessTokenAsync(Action success, Action - /// Gets AccountInfo - /// - /// - /// public void AccountInfoAsync(Action success, Action failure) { //This has to be here as Dropbox change their base URL between calls diff --git a/DropNet/Client/User.Sync.cs b/DropNet/Client/User.Sync.cs index a4ee4bc..27d0a65 100644 --- a/DropNet/Client/User.Sync.cs +++ b/DropNet/Client/User.Sync.cs @@ -9,20 +9,12 @@ namespace DropNet { public partial class DropNetClient { - /// - /// Shorthand method to get an OAuth1 token from Dropbox and build the Url to authorize it. - /// - /// public string GetTokenAndBuildUrl(string callback = null) { GetToken(); return BuildAuthorizeUrl(callback); } - /// - /// Provisions an OAuth1 token from the almightly dropbox.com (Token cant be used until authorized!) - /// - /// public UserLogin GetToken() { var request = _requestHelper.CreateTokenRequest(); @@ -32,10 +24,6 @@ public UserLogin GetToken() return userLogin; } - /// - /// Authorizes the previously-requested OAuth1 token - /// - /// public UserLogin GetAccessToken() { var request = _requestHelper.CreateAccessTokenRequest(); @@ -46,12 +34,6 @@ public UserLogin GetAccessToken() return userLogin; } - /// - /// Acquire an OAuth2 bearer token once the user has authorized the app. This endpoint only applies to apps using the AuthorizationFlow.Code flow. - /// - /// The authorization code provided by Dropbox when the user was redirected back to your site. - /// The redirect Uri for your site. This is only used to validate that it matches the original /oauth2/authorize; the user will not be redirected again. - /// An OAuth2 bearer token. public UserLogin GetAccessToken(string code, string redirectUri) { RestRequest request = _requestHelper.CreateOAuth2AccessTokenRequest(code, redirectUri, _apiKey, _appsecret); diff --git a/DropNet/DropNet.csproj b/DropNet/DropNet.csproj index d53ab79..5f6f163 100644 --- a/DropNet/DropNet.csproj +++ b/DropNet/DropNet.csproj @@ -68,6 +68,7 @@ + From 72f6fe9568b177f6e33b330186c439b9a25ffff7 Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Mon, 13 Jan 2014 13:47:02 +1100 Subject: [PATCH 29/65] Improvements to DropboxException. Improvements to DropboxException. Split out the base exception class and added descendant DropboxRestException. Also update message returned by DropboxRestException to have more information as to what caused the exception. This will break on compile as DropboxException does not have StatusCode or Response properties. --- DropNet/Client/Client.cs | 16 +++--- DropNet/Exceptions/DropboxException.cs | 58 ++++++++++++++++++---- DropNet/Extensions/RestClientExtensions.cs | 4 +- 3 files changed, 58 insertions(+), 20 deletions(-) diff --git a/DropNet/Client/Client.cs b/DropNet/Client/Client.cs index c6d00d3..f7a2bb2 100644 --- a/DropNet/Client/Client.cs +++ b/DropNet/Client/Client.cs @@ -132,7 +132,7 @@ public string BuildAuthorizeUrl(OAuth2AuthorizationFlow oAuth2AuthorizationFlow, if (response.StatusCode != HttpStatusCode.OK) { - throw new DropboxException(response); + throw new DropboxRestException(response, HttpStatusCode.OK); } } else @@ -141,7 +141,7 @@ public string BuildAuthorizeUrl(OAuth2AuthorizationFlow oAuth2AuthorizationFlow, if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.PartialContent) { - throw new DropboxException(response); + throw new DropboxRestException(response, HttpStatusCode.OK, HttpStatusCode.PartialContent); } } @@ -157,7 +157,7 @@ private IRestResponse Execute(ApiType apiType, IRestRequest request) if (response.StatusCode != HttpStatusCode.OK) { - throw new DropboxException(response); + throw new DropboxRestException(response, HttpStatusCode.OK); } } else @@ -166,7 +166,7 @@ private IRestResponse Execute(ApiType apiType, IRestRequest request) if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.PartialContent) { - throw new DropboxException(response); + throw new DropboxRestException(response, HttpStatusCode.OK, HttpStatusCode.PartialContent); } } @@ -194,7 +194,7 @@ private void ExecuteAsync(ApiType apiType, IRestRequest request, Action - /// The response of the error call (for Debugging use) - /// - public IRestResponse Response { get; private set; } - public DropboxException() { + } - public DropboxException(string message) - : base(message) + public DropboxException(string message) : base(message) { + } + } + public class DropboxRestException : DropboxException + { + /// + /// Returned status code from the request + /// + public HttpStatusCode StatusCode { get; private set; } + + /// + /// Expected status codes to have seen instead of the one recieved. + /// + public HttpStatusCode[] ExpectedCodes { get; private set; } + + /// + /// The response of the error call (for Debugging use) + /// + public IRestResponse Response { get; private set; } + + public DropboxRestException(string message) : base(message) + { } - public DropboxException(IRestResponse r) + /// + /// Creates a DropboxRestException with the rest response which caused the exception, and the status codes which were expected. + /// + /// Rest Response which was not expected. + /// The expected status codes which were not found. + public DropboxRestException(IRestResponse r, params HttpStatusCode[] expectedCodes) { Response = r; - StatusCode = r.StatusCode; + StatusCode = r.StatusCode; + ExpectedCodes = expectedCodes; } + /// + /// Overridden message for Dropbox Exception. + /// + /// The exception message in the format of "Received Response [{0}] : Expected to see [{1}]. The HTTP response was [{2}]. + /// + /// + public override string Message + { + get + { + return string.Format("Received Response [{0}] : Expected to see [{1}]. The HTTP response was [{2}].", + Response.StatusCode, + string.Join(", ", ExpectedCodes.Select(code => Enum.GetName(typeof(HttpStatusCode), code))), + Response.Content); + } + } } } diff --git a/DropNet/Extensions/RestClientExtensions.cs b/DropNet/Extensions/RestClientExtensions.cs index c105c32..670aa9c 100644 --- a/DropNet/Extensions/RestClientExtensions.cs +++ b/DropNet/Extensions/RestClientExtensions.cs @@ -42,7 +42,7 @@ public static Task ExecuteTask(this IRestClient client, { if (response.StatusCode != HttpStatusCode.OK) { - tcs.SetException(new DropboxException(response)); + tcs.SetException(new DropboxRestException(response, HttpStatusCode.OK)); } else { @@ -86,7 +86,7 @@ public static Task ExecuteTask(this IRestClient client, { if (response.StatusCode != HttpStatusCode.OK) { - tcs.SetException(new DropboxException(response)); + tcs.SetException(new DropboxRestException(response, HttpStatusCode.OK)); } else { From a36997cb380829ddde4d5b7216a4ab3dff723a5a Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Mon, 13 Jan 2014 13:55:21 +1100 Subject: [PATCH 30/65] Revert "Improvements to DropboxException." This reverts commit 72f6fe9568b177f6e33b330186c439b9a25ffff7. --- DropNet/Client/Client.cs | 16 +++--- DropNet/Exceptions/DropboxException.cs | 58 ++++------------------ DropNet/Extensions/RestClientExtensions.cs | 4 +- 3 files changed, 20 insertions(+), 58 deletions(-) diff --git a/DropNet/Client/Client.cs b/DropNet/Client/Client.cs index f7a2bb2..c6d00d3 100644 --- a/DropNet/Client/Client.cs +++ b/DropNet/Client/Client.cs @@ -132,7 +132,7 @@ public string BuildAuthorizeUrl(OAuth2AuthorizationFlow oAuth2AuthorizationFlow, if (response.StatusCode != HttpStatusCode.OK) { - throw new DropboxRestException(response, HttpStatusCode.OK); + throw new DropboxException(response); } } else @@ -141,7 +141,7 @@ public string BuildAuthorizeUrl(OAuth2AuthorizationFlow oAuth2AuthorizationFlow, if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.PartialContent) { - throw new DropboxRestException(response, HttpStatusCode.OK, HttpStatusCode.PartialContent); + throw new DropboxException(response); } } @@ -157,7 +157,7 @@ private IRestResponse Execute(ApiType apiType, IRestRequest request) if (response.StatusCode != HttpStatusCode.OK) { - throw new DropboxRestException(response, HttpStatusCode.OK); + throw new DropboxException(response); } } else @@ -166,7 +166,7 @@ private IRestResponse Execute(ApiType apiType, IRestRequest request) if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.PartialContent) { - throw new DropboxRestException(response, HttpStatusCode.OK, HttpStatusCode.PartialContent); + throw new DropboxException(response); } } @@ -194,7 +194,7 @@ private void ExecuteAsync(ApiType apiType, IRestRequest request, Action + /// The response of the error call (for Debugging use) + /// + public IRestResponse Response { get; private set; } + public DropboxException() { - } - public DropboxException(string message) : base(message) + public DropboxException(string message) + : base(message) { - } - } - public class DropboxRestException : DropboxException - { - /// - /// Returned status code from the request - /// - public HttpStatusCode StatusCode { get; private set; } - - /// - /// Expected status codes to have seen instead of the one recieved. - /// - public HttpStatusCode[] ExpectedCodes { get; private set; } - - /// - /// The response of the error call (for Debugging use) - /// - public IRestResponse Response { get; private set; } - - public DropboxRestException(string message) : base(message) - { } - /// - /// Creates a DropboxRestException with the rest response which caused the exception, and the status codes which were expected. - /// - /// Rest Response which was not expected. - /// The expected status codes which were not found. - public DropboxRestException(IRestResponse r, params HttpStatusCode[] expectedCodes) + public DropboxException(IRestResponse r) { Response = r; - StatusCode = r.StatusCode; - ExpectedCodes = expectedCodes; + StatusCode = r.StatusCode; } - /// - /// Overridden message for Dropbox Exception. - /// - /// The exception message in the format of "Received Response [{0}] : Expected to see [{1}]. The HTTP response was [{2}]. - /// - /// - public override string Message - { - get - { - return string.Format("Received Response [{0}] : Expected to see [{1}]. The HTTP response was [{2}].", - Response.StatusCode, - string.Join(", ", ExpectedCodes.Select(code => Enum.GetName(typeof(HttpStatusCode), code))), - Response.Content); - } - } } } diff --git a/DropNet/Extensions/RestClientExtensions.cs b/DropNet/Extensions/RestClientExtensions.cs index 670aa9c..c105c32 100644 --- a/DropNet/Extensions/RestClientExtensions.cs +++ b/DropNet/Extensions/RestClientExtensions.cs @@ -42,7 +42,7 @@ public static Task ExecuteTask(this IRestClient client, { if (response.StatusCode != HttpStatusCode.OK) { - tcs.SetException(new DropboxRestException(response, HttpStatusCode.OK)); + tcs.SetException(new DropboxException(response)); } else { @@ -86,7 +86,7 @@ public static Task ExecuteTask(this IRestClient client, { if (response.StatusCode != HttpStatusCode.OK) { - tcs.SetException(new DropboxRestException(response, HttpStatusCode.OK)); + tcs.SetException(new DropboxException(response)); } else { From 4bcf4618e090fd3e8f7cff29b8c6d78b4c6664c0 Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Mon, 13 Jan 2014 14:07:48 +1100 Subject: [PATCH 31/65] Improvements to DropboxException. Split out the base exception class and added descendant DropboxRestException. Also update message returned by DropboxRestException to have more information as to what caused the exception. This will break on compile as DropboxException does not have StatusCode or Response properties. --- DropNet/Client/Client.cs | 16 +++--- DropNet/Exceptions/DropboxException.cs | 58 ++++++++++++++++++---- DropNet/Extensions/RestClientExtensions.cs | 4 +- 3 files changed, 58 insertions(+), 20 deletions(-) diff --git a/DropNet/Client/Client.cs b/DropNet/Client/Client.cs index bf2b9df..aa246b9 100644 --- a/DropNet/Client/Client.cs +++ b/DropNet/Client/Client.cs @@ -178,7 +178,7 @@ public string BuildAuthorizeUrl(OAuth2AuthorizationFlow oAuth2AuthorizationFlow, if (response.StatusCode != HttpStatusCode.OK) { - throw new DropboxException(response); + throw new DropboxRestException(response, HttpStatusCode.OK); } } else @@ -187,7 +187,7 @@ public string BuildAuthorizeUrl(OAuth2AuthorizationFlow oAuth2AuthorizationFlow, if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.PartialContent) { - throw new DropboxException(response); + throw new DropboxRestException(response, HttpStatusCode.OK, HttpStatusCode.PartialContent); } } @@ -203,7 +203,7 @@ private IRestResponse Execute(ApiType apiType, IRestRequest request) if (response.StatusCode != HttpStatusCode.OK) { - throw new DropboxException(response); + throw new DropboxRestException(response, HttpStatusCode.OK); } } else @@ -212,7 +212,7 @@ private IRestResponse Execute(ApiType apiType, IRestRequest request) if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.PartialContent) { - throw new DropboxException(response); + throw new DropboxRestException(response, HttpStatusCode.OK, HttpStatusCode.PartialContent); } } @@ -240,7 +240,7 @@ private void ExecuteAsync(ApiType apiType, IRestRequest request, Action - /// The response of the error call (for Debugging use) - /// - public IRestResponse Response { get; private set; } - public DropboxException() { + } - public DropboxException(string message) - : base(message) + public DropboxException(string message) : base(message) { + } + } + public class DropboxRestException : DropboxException + { + /// + /// Returned status code from the request + /// + public HttpStatusCode StatusCode { get; private set; } + + /// + /// Expected status codes to have seen instead of the one recieved. + /// + public HttpStatusCode[] ExpectedCodes { get; private set; } + + /// + /// The response of the error call (for Debugging use) + /// + public IRestResponse Response { get; private set; } + + public DropboxRestException(string message) : base(message) + { } - public DropboxException(IRestResponse r) + /// + /// Creates a DropboxRestException with the rest response which caused the exception, and the status codes which were expected. + /// + /// Rest Response which was not expected. + /// The expected status codes which were not found. + public DropboxRestException(IRestResponse r, params HttpStatusCode[] expectedCodes) { Response = r; - StatusCode = r.StatusCode; + StatusCode = r.StatusCode; + ExpectedCodes = expectedCodes; } + /// + /// Overridden message for Dropbox Exception. + /// + /// The exception message in the format of "Received Response [{0}] : Expected to see [{1}]. The HTTP response was [{2}]. + /// + /// + public override string Message + { + get + { + return string.Format("Received Response [{0}] : Expected to see [{1}]. The HTTP response was [{2}].", + Response.StatusCode, + string.Join(", ", ExpectedCodes.Select(code => Enum.GetName(typeof(HttpStatusCode), code))), + Response.Content); + } + } } } diff --git a/DropNet/Extensions/RestClientExtensions.cs b/DropNet/Extensions/RestClientExtensions.cs index c105c32..670aa9c 100644 --- a/DropNet/Extensions/RestClientExtensions.cs +++ b/DropNet/Extensions/RestClientExtensions.cs @@ -42,7 +42,7 @@ public static Task ExecuteTask(this IRestClient client, { if (response.StatusCode != HttpStatusCode.OK) { - tcs.SetException(new DropboxException(response)); + tcs.SetException(new DropboxRestException(response, HttpStatusCode.OK)); } else { @@ -86,7 +86,7 @@ public static Task ExecuteTask(this IRestClient client, { if (response.StatusCode != HttpStatusCode.OK) { - tcs.SetException(new DropboxException(response)); + tcs.SetException(new DropboxRestException(response, HttpStatusCode.OK)); } else { From ba8718a0ecdc1d33bb1b69d2fba88fb30880b3f3 Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Mon, 13 Jan 2014 14:57:26 +1100 Subject: [PATCH 32/65] Added Timeout and TimeoutMS to the dropnetclient class. Allows the caller to set the timeout for the RestClient in either milliseconds or timespan values. --- DropNet.Tests/UserTests1.cs | 11 +++++++++++ DropNet/Client/Client.cs | 12 ++++++++++++ 2 files changed, 23 insertions(+) diff --git a/DropNet.Tests/UserTests1.cs b/DropNet.Tests/UserTests1.cs index f2528e8..d0ae7b1 100644 --- a/DropNet.Tests/UserTests1.cs +++ b/DropNet.Tests/UserTests1.cs @@ -1,5 +1,6 @@ using System; using DropNet.Authenticators; +using DropNet.Exceptions; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace DropNet.Tests @@ -118,5 +119,15 @@ private void TestOAuth2AuthorizationUrl(OAuth2AuthorizationFlow oAuth2Authorizat Assert.IsNotNull(actual); Assert.AreEqual(expected, actual); } + + [TestMethod] + [ExpectedException(typeof(DropboxException))] + public void Timeout_Exception_Raised_On_Super_Short_Timeout() + { + var client = new DropNetClient("", ""); + client.TimeoutMS = 100; + + client.GetToken(); + } } } diff --git a/DropNet/Client/Client.cs b/DropNet/Client/Client.cs index bf2b9df..1028af3 100644 --- a/DropNet/Client/Client.cs +++ b/DropNet/Client/Client.cs @@ -33,6 +33,18 @@ public UserLogin UserLogin } } + public TimeSpan Timeout + { + get { return TimeSpan.FromMilliseconds(_restClient.Timeout); } + set { _restClient.Timeout = value.Milliseconds; } + } + + public int TimeoutMS + { + get { return _restClient.Timeout; } + set { _restClient.Timeout = value; } + } + /// /// To use Dropbox API in sandbox mode (app folder access) set to true /// From ad3c405e68ce6e29b87f426235104c12af8294a9 Mon Sep 17 00:00:00 2001 From: Victor Bello Date: Wed, 19 Mar 2014 10:59:54 -0700 Subject: [PATCH 33/65] Fixing problem with non-serializable class --- DropNet/Models/UserLogin.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/DropNet/Models/UserLogin.cs b/DropNet/Models/UserLogin.cs index c4f5b6a..d39c65b 100644 --- a/DropNet/Models/UserLogin.cs +++ b/DropNet/Models/UserLogin.cs @@ -1,5 +1,7 @@ -namespace DropNet.Models +using System; +namespace DropNet.Models { + [Serializable] public class UserLogin { public string Token { get; set; } From 7991e48dac14cfc4d508d86495cff687f6fd5113 Mon Sep 17 00:00:00 2001 From: "James B." Date: Wed, 19 Mar 2014 15:26:17 -0500 Subject: [PATCH 34/65] Add Team information to AccountInfo --- DropNet/Models/AccountInfo.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/DropNet/Models/AccountInfo.cs b/DropNet/Models/AccountInfo.cs index fd277fb..0333c93 100644 --- a/DropNet/Models/AccountInfo.cs +++ b/DropNet/Models/AccountInfo.cs @@ -8,6 +8,7 @@ public class AccountInfo public string display_name { get; set; } public QuotaInfo quota_info { get; set; } public long uid { get; set; } + public Team team { get; set; } } public class QuotaInfo @@ -16,4 +17,9 @@ public class QuotaInfo public long quota { get; set; } public long normal { get; set; } } + + public class Team + { + public string name { get; set; } + } } From 4b7231a6f0bd365994f6de9a04c78ba260a5b2b0 Mon Sep 17 00:00:00 2001 From: koichi Date: Sun, 20 Apr 2014 00:29:49 -0700 Subject: [PATCH 35/65] Added Client_Mtime to MetaData class --- DropNet/Models/MetaData.cs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/DropNet/Models/MetaData.cs b/DropNet/Models/MetaData.cs index a8e2263..163fcaa 100644 --- a/DropNet/Models/MetaData.cs +++ b/DropNet/Models/MetaData.cs @@ -9,6 +9,7 @@ public class MetaData public bool Thumb_Exists { get; set; } public long Bytes { get; set; } public string Modified { get; set; } + public string Client_Mtime { get; set; } public string Path { get; set; } public bool Is_Dir { get; set; } public bool Is_Deleted { get; set; } @@ -45,7 +46,31 @@ public DateTime UTCDateModified } } - + public DateTime Client_MtimeDate + { + get + { + //cast to datetime and return + return Client_Mtime == null ? DateTime.MinValue : DateTime.Parse(Client_Mtime); //RFC1123 format date codes are returned by API + } + } + + public DateTime UTCDateClient_Mtime + { + get + { + string str = Client_Mtime; + if (str == null) + return DateTime.MinValue; + if (str.EndsWith(" +0000")) str = str.Substring(0, str.Length - 6); + if (!str.EndsWith(" UTC")) str += " UTC"; + return DateTime.ParseExact(str, "ddd, d MMM yyyy HH:mm:ss UTC", System.Globalization.CultureInfo.InvariantCulture); + } + set + { + Client_Mtime = value.ToString("ddd, d MMM yyyy HH:mm:ss UTC"); + } + } public string Name { From 1995b62c856e2a7c8f3c97f58fa5b1419e87b287 Mon Sep 17 00:00:00 2001 From: koichi Date: Sun, 20 Apr 2014 00:54:25 -0700 Subject: [PATCH 36/65] Combined datetime related functionalities --- DropNet/Models/MetaData.cs | 47 +++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/DropNet/Models/MetaData.cs b/DropNet/Models/MetaData.cs index 163fcaa..37c2c9e 100644 --- a/DropNet/Models/MetaData.cs +++ b/DropNet/Models/MetaData.cs @@ -24,8 +24,7 @@ public DateTime ModifiedDate { get { - //cast to datetime and return - return Modified == null ? DateTime.MinValue : DateTime.Parse(Modified); //RFC1123 format date codes are returned by API + return GetDateTimeFromString(Modified); } } @@ -33,16 +32,11 @@ public DateTime UTCDateModified { get { - string str = Modified; - if (str == null) - return DateTime.MinValue; - if (str.EndsWith(" +0000")) str = str.Substring(0, str.Length - 6); - if (!str.EndsWith(" UTC")) str += " UTC"; - return DateTime.ParseExact(str, "ddd, d MMM yyyy HH:mm:ss UTC", System.Globalization.CultureInfo.InvariantCulture); + return GetUTCDateTimeFromString(Modified); } set { - Modified = value.ToString("ddd, d MMM yyyy HH:mm:ss UTC"); + Modified = GetStringFromDateTime(value); } } @@ -50,8 +44,7 @@ public DateTime Client_MtimeDate { get { - //cast to datetime and return - return Client_Mtime == null ? DateTime.MinValue : DateTime.Parse(Client_Mtime); //RFC1123 format date codes are returned by API + return GetDateTimeFromString(Client_Mtime); } } @@ -59,19 +52,14 @@ public DateTime UTCDateClient_Mtime { get { - string str = Client_Mtime; - if (str == null) - return DateTime.MinValue; - if (str.EndsWith(" +0000")) str = str.Substring(0, str.Length - 6); - if (!str.EndsWith(" UTC")) str += " UTC"; - return DateTime.ParseExact(str, "ddd, d MMM yyyy HH:mm:ss UTC", System.Globalization.CultureInfo.InvariantCulture); + return GetUTCDateTimeFromString(Client_Mtime); } set { - Client_Mtime = value.ToString("ddd, d MMM yyyy HH:mm:ss UTC"); + Client_Mtime = GetStringFromDateTime(value); } } - + public string Name { get @@ -107,6 +95,27 @@ public string Extension return Is_Dir ? string.Empty : Path.Substring(Path.LastIndexOf(".")); } } + + private static DateTime GetDateTimeFromString(string dateTimeStr) + { + //cast to datetime and return + return dateTimeStr == null ? DateTime.MinValue : DateTime.Parse(dateTimeStr); //RFC1123 format date codes are returned by API + } + + private static DateTime GetUTCDateTimeFromString(string dateTimeStr) + { + string str = dateTimeStr; + if (str == null) + return DateTime.MinValue; + if (str.EndsWith(" +0000")) str = str.Substring(0, str.Length - 6); + if (!str.EndsWith(" UTC")) str += " UTC"; + return DateTime.ParseExact(str, "ddd, d MMM yyyy HH:mm:ss UTC", System.Globalization.CultureInfo.InvariantCulture); + } + + private static string GetStringFromDateTime(DateTime dateTime) + { + return dateTime.ToString("ddd, d MMM yyyy HH:mm:ss UTC"); + } } } From 680027c2652ae1f7a997e88d00f4e99209230ada Mon Sep 17 00:00:00 2001 From: partyzone Date: Wed, 25 Jun 2014 08:16:13 +0400 Subject: [PATCH 37/65] Added realization of proxy support to client. --- DropNet/Client/Client.cs | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/DropNet/Client/Client.cs b/DropNet/Client/Client.cs index 1028af3..450d70a 100644 --- a/DropNet/Client/Client.cs +++ b/DropNet/Client/Client.cs @@ -62,7 +62,7 @@ public int TimeoutMS private RequestHelper _requestHelper; #if !WINDOWS_PHONE && !WINRT - public IWebProxy Proxy { get; set; } + private IWebProxy _proxy; #endif /// @@ -78,10 +78,11 @@ string Root /// /// The Api Key to use for the Dropbox Requests /// The Api Secret to use for the Dropbox Requests - /// The authentication method to use. /// The proxy to use for web requests - public DropNetClient(string apiKey, string appSecret, AuthenticationMethod authenticationMethod = AuthenticationMethod.OAuth1) + /// The authentication method to use. + public DropNetClient(string apiKey, string appSecret, IWebProxy proxy = null, AuthenticationMethod authenticationMethod = AuthenticationMethod.OAuth1) { + _proxy = proxy; LoadClient(); _apiKey = apiKey; _appsecret = appSecret; @@ -96,8 +97,8 @@ public DropNetClient(string apiKey, string appSecret, AuthenticationMethod authe /// The Api Secret to use for the Dropbox Requests /// The OAuth2 access token /// The proxy to use for web requests - public DropNetClient(string apiKey, string appSecret, string accessToken) - : this(apiKey, appSecret, AuthenticationMethod.OAuth2) + public DropNetClient(string apiKey, string appSecret, string accessToken, IWebProxy proxy) + : this(apiKey, appSecret, proxy, AuthenticationMethod.OAuth2) { UserLogin = new UserLogin { Token = accessToken }; } @@ -110,10 +111,10 @@ public DropNetClient(string apiKey, string appSecret, string accessToken) /// The OAuth1 User authentication token /// The OAuth1 Users matching secret /// The proxy to use for web requests - public DropNetClient(string apiKey, string appSecret, string userToken, string userSecret) - :this(apiKey, appSecret) + public DropNetClient(string apiKey, string appSecret, string userToken, string userSecret, IWebProxy proxy) + : this(apiKey, appSecret, proxy) { - UserLogin = new UserLogin { Token = userToken, Secret = userSecret }; + UserLogin = new UserLogin {Token = userToken, Secret = userSecret}; } private void LoadClient() @@ -121,13 +122,18 @@ private void LoadClient() _restClient = new RestClient(ApiBaseUrl); #if !WINDOWS_PHONE && !WINRT - _restClient.Proxy = Proxy; + _restClient.Proxy = _proxy; #endif _restClient.ClearHandlers(); _restClient.AddHandler("*", new JsonDeserializer()); _restClientContent = new RestClient(ApiContentBaseUrl); + +#if !WINDOWS_PHONE && !WINRT + _restClientContent.Proxy = _proxy; +#endif + _restClientContent.ClearHandlers(); _restClientContent.AddHandler("*", new JsonDeserializer()); From b5bac20e8f07d307c0d5ecd55170a59d7d57fb04 Mon Sep 17 00:00:00 2001 From: partyzone Date: Wed, 25 Jun 2014 11:04:13 +0400 Subject: [PATCH 38/65] Added longpoll_delta blocking request. --- DropNet/Client/Client.cs | 36 +++++++++++++++++++++++++++++--- DropNet/Client/Files.Sync.cs | 19 +++++++++++++++++ DropNet/Helpers/RequestHelper.cs | 12 +++++++++++ DropNet/Models/DeltaPage.cs | 13 ++++++++++++ 4 files changed, 77 insertions(+), 3 deletions(-) diff --git a/DropNet/Client/Client.cs b/DropNet/Client/Client.cs index 450d70a..0b089bf 100644 --- a/DropNet/Client/Client.cs +++ b/DropNet/Client/Client.cs @@ -16,6 +16,7 @@ public partial class DropNetClient { private const string ApiBaseUrl = "https://api.dropbox.com"; private const string ApiContentBaseUrl = "https://api-content.dropbox.com"; + private const string ApiNotifyUrl = "https://api-notify.dropbox.com"; private const string Version = "1"; private UserLogin _userLogin; @@ -59,6 +60,7 @@ public int TimeoutMS private RestClient _restClient; private RestClient _restClientContent; + private RestClient _restClientNotify; private RequestHelper _requestHelper; #if !WINDOWS_PHONE && !WINRT @@ -137,6 +139,15 @@ private void LoadClient() _restClientContent.ClearHandlers(); _restClientContent.AddHandler("*", new JsonDeserializer()); + _restClientNotify = new RestClient(ApiNotifyUrl); + +#if !WINDOWS_PHONE && !WINRT + _restClientNotify.Proxy = _proxy; +#endif + + _restClientNotify.ClearHandlers(); + _restClientNotify.AddHandler("*", new JsonDeserializer()); + _requestHelper = new RequestHelper(Version); //Default to full access @@ -199,7 +210,7 @@ public string BuildAuthorizeUrl(OAuth2AuthorizationFlow oAuth2AuthorizationFlow, throw new DropboxException(response); } } - else + else if (apiType == ApiType.Content) { response = _restClientContent.Execute(request); @@ -208,6 +219,15 @@ public string BuildAuthorizeUrl(OAuth2AuthorizationFlow oAuth2AuthorizationFlow, throw new DropboxException(response); } } + else + { + response = _restClientNotify.Execute(request); + + if (response.StatusCode != HttpStatusCode.OK) + { + throw new DropboxException(response); + } + } return response.Data; } @@ -224,7 +244,7 @@ private IRestResponse Execute(ApiType apiType, IRestRequest request) throw new DropboxException(response); } } - else + else if (apiType == ApiType.Content) { response = _restClientContent.Execute(request); @@ -233,6 +253,15 @@ private IRestResponse Execute(ApiType apiType, IRestRequest request) throw new DropboxException(response); } } + else + { + response = _restClientNotify.Execute(request); + + if (response.StatusCode != HttpStatusCode.OK) + { + throw new DropboxException(response); + } + } return response; } @@ -394,7 +423,8 @@ private IAuthenticator GetAuthenticator(string baseUrl) enum ApiType { Base, - Content + Content, + Notify } /// diff --git a/DropNet/Client/Files.Sync.cs b/DropNet/Client/Files.Sync.cs index e82b1e5..490c18b 100644 --- a/DropNet/Client/Files.Sync.cs +++ b/DropNet/Client/Files.Sync.cs @@ -438,6 +438,25 @@ public CopyRefResponse GetCopyRef(string path) return Execute(ApiType.Base, request); } + /// + /// 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. + /// + /// The value returned from the prior call to GetDelta. + /// 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. + /// + public LongpollDeltaResult GetLongpollDelta(string cursor, int timeout = 30) + { + if (timeout < 30) + timeout = 30; + if (timeout > 480) + timeout = 480; + + var request = _requestHelper.CreateLongpollDeltaRequest(cursor, timeout); + + return Execute(ApiType.Notify, request); + } + /// /// Gets the deltas for a user's folders and files. /// diff --git a/DropNet/Helpers/RequestHelper.cs b/DropNet/Helpers/RequestHelper.cs index b900d17..53f8c07 100644 --- a/DropNet/Helpers/RequestHelper.cs +++ b/DropNet/Helpers/RequestHelper.cs @@ -407,6 +407,18 @@ public RestRequest CreateCreateFolderRequest(string path, string root) return request; } + internal RestRequest CreateLongpollDeltaRequest(string cursor, int timeout) + { + var request = new RestRequest(Method.GET); + request.Resource = "{version}/longpoll_delta"; + + request.AddParameter("version", _version, ParameterType.UrlSegment); + request.AddParameter("cursor", cursor); + request.AddParameter("timeout", timeout); + + return request; + } + internal RestRequest CreateDeltaRequest(string cursor) { var request = new RestRequest(Method.POST); diff --git a/DropNet/Models/DeltaPage.cs b/DropNet/Models/DeltaPage.cs index ba752d1..23bb66b 100644 --- a/DropNet/Models/DeltaPage.cs +++ b/DropNet/Models/DeltaPage.cs @@ -62,4 +62,17 @@ public class DeltaEntry public MetaData MetaData { get; set; } } + public class LongpollDeltaResult + { + /// + /// The value of the changes field indicates whether new changes are available. + /// If this value is true, you should call /delta to retrieve the changes. If this value is false, it means the call to /longpoll_delta timed out. + /// + public bool Changes { get; set; } + + /// + /// If present, the value of the backoff field indicates how many seconds your code should wait before calling /longpoll_delta again. + /// + public int Backoff { get; set; } + } } From b9fe6b646b7ad9ef3f31dbe92c5da556d1e1b62d Mon Sep 17 00:00:00 2001 From: partyzone Date: Wed, 25 Jun 2014 12:42:43 +0400 Subject: [PATCH 39/65] Added async function for longpoll_delta. Added request for restore (sync, async and task). --- DropNet/Client/Files.Async.cs | 30 ++++++++++++++++++++++++++++++ DropNet/Client/Files.Sync.cs | 13 +++++++++++++ DropNet/Client/Files.Task.cs | 7 +++++++ DropNet/Helpers/RequestHelper.cs | 15 +++++++++++++++ 4 files changed, 65 insertions(+) diff --git a/DropNet/Client/Files.Async.cs b/DropNet/Client/Files.Async.cs index ba8533a..20c0a8c 100644 --- a/DropNet/Client/Files.Async.cs +++ b/DropNet/Client/Files.Async.cs @@ -47,6 +47,20 @@ public void GetMetaDataAsync(string path, string hash, Action success, ExecuteAsync(ApiType.Base, request, success, failure); } + /// + /// Restores a file path to a previous revision. + /// + /// The revision of the file to restore. + /// The path to the file. + /// Success call back + /// Failure call back + public void RestoreAsync(string rev, string path, Action success, Action failure) + { + var request = _requestHelper.CreateRestoreRequest(rev, path, Root); + + ExecuteAsync(ApiType.Base, request, success, failure); + } + /// /// Gets list of metadata for search string /// @@ -357,6 +371,22 @@ public void GetMediaAsync(string path, Action success, Action + /// 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. + /// + /// The value returned from the prior call to GetDelta. + /// + /// + /// 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. + public void GetLongpollDeltaAsync(string cursor, Action success, + Action failure, int timeout = 30) + { + var request = _requestHelper.CreateLongpollDeltaRequest(cursor, timeout); + + ExecuteAsync(ApiType.Base, request, success, failure); + } + /// /// The beta delta function, gets updates for a given folder /// diff --git a/DropNet/Client/Files.Sync.cs b/DropNet/Client/Files.Sync.cs index 490c18b..7ef8e30 100644 --- a/DropNet/Client/Files.Sync.cs +++ b/DropNet/Client/Files.Sync.cs @@ -60,6 +60,19 @@ public List Search(string searchString) return Search(searchString, string.Empty); } + /// + /// Restores a file path to a previous revision. + /// + /// The revision of the file to restore. + /// The path to the file. + /// The metadata of the restored file. + public MetaData Restore(string rev, string path) + { + var request = _requestHelper.CreateRestoreRequest(rev, path, Root); + + return Execute(ApiType.Base, request); + } + /// /// Gets list of metadata for search string /// diff --git a/DropNet/Client/Files.Task.cs b/DropNet/Client/Files.Task.cs index 6a1c4ee..06fcd68 100644 --- a/DropNet/Client/Files.Task.cs +++ b/DropNet/Client/Files.Task.cs @@ -34,6 +34,13 @@ public Task GetMetaDataTask(string path, string hash) return ExecuteTask(ApiType.Base, request); } + public Task RestoreTask(string rev, string path) + { + var request = _requestHelper.CreateRestoreRequest(rev, path, Root); + + return ExecuteTask(ApiType.Base, request); + } + public Task> SearchTask(string searchString) { return SearchTask(searchString, string.Empty); diff --git a/DropNet/Helpers/RequestHelper.cs b/DropNet/Helpers/RequestHelper.cs index 53f8c07..d05072d 100644 --- a/DropNet/Helpers/RequestHelper.cs +++ b/DropNet/Helpers/RequestHelper.cs @@ -461,6 +461,21 @@ private string ThumbnailSizeString(ThumbnailSize size) return "s"; } + public RestRequest CreateRestoreRequest(string rev, string path, string root) + { + var request = new RestRequest(Method.POST) + { + Resource = "{version}/restore/{root}{path}" + }; + + request.AddParameter("version", _version, ParameterType.UrlSegment); + request.AddParameter("path", path, ParameterType.UrlSegment); + request.AddParameter("root", root, ParameterType.UrlSegment); + request.AddParameter("rev", rev); + + return request; + } + public RestRequest CreateSearchRequest(string searchString, string path, string root) { var request = new RestRequest(Method.GET) From f0a12f0d8a8c42013f95361616ac52ef0515d9cd Mon Sep 17 00:00:00 2001 From: partyzone Date: Wed, 25 Jun 2014 14:16:42 +0400 Subject: [PATCH 40/65] Added case for ApiType.Notify in ExecuteAsync and ExecuteAsync. --- DropNet/Client/Client.cs | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/DropNet/Client/Client.cs b/DropNet/Client/Client.cs index 0b089bf..e3af52c 100644 --- a/DropNet/Client/Client.cs +++ b/DropNet/Client/Client.cs @@ -295,7 +295,7 @@ private void ExecuteAsync(ApiType apiType, IRestRequest request, Action { @@ -309,6 +309,20 @@ private void ExecuteAsync(ApiType apiType, IRestRequest request, Action + { + if (response.StatusCode != HttpStatusCode.OK) + { + failure(new DropboxException(response)); + } + else + { + success(response); + } + }); + } } private void ExecuteAsync(ApiType apiType, IRestRequest request, Action success, Action failure) where T : new() @@ -339,7 +353,7 @@ private void ExecuteAsync(ApiType apiType, IRestRequest request, Action(request, (response, asynchandle) => { @@ -353,6 +367,20 @@ private void ExecuteAsync(ApiType apiType, IRestRequest request, Action(request, (response, asynchandle) => + { + if (response.StatusCode != HttpStatusCode.OK) + { + failure(new DropboxException(response)); + } + else + { + success(response.Data); + } + }); + } } #if !WINRT From ab2c375e369eb7f64a6bdb2f3b55d3fbbb3adab5 Mon Sep 17 00:00:00 2001 From: partyzone Date: Wed, 25 Jun 2014 14:18:08 +0400 Subject: [PATCH 41/65] Changed ApiType for GetLongpollDeltaAsync. --- DropNet/Client/Files.Async.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DropNet/Client/Files.Async.cs b/DropNet/Client/Files.Async.cs index 20c0a8c..0be6357 100644 --- a/DropNet/Client/Files.Async.cs +++ b/DropNet/Client/Files.Async.cs @@ -384,7 +384,7 @@ public void GetLongpollDeltaAsync(string cursor, Action suc { var request = _requestHelper.CreateLongpollDeltaRequest(cursor, timeout); - ExecuteAsync(ApiType.Base, request, success, failure); + ExecuteAsync(ApiType.Notify, request, success, failure); } /// From 1c3b9429f2c436177d28c5f9297d10a8b6fdd012 Mon Sep 17 00:00:00 2001 From: partyzone Date: Wed, 25 Jun 2014 14:19:22 +0400 Subject: [PATCH 42/65] Check for min/max value of timeout param moved to RequestHelper.cs --- DropNet/Client/Files.Sync.cs | 5 ----- DropNet/Helpers/RequestHelper.cs | 5 +++++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/DropNet/Client/Files.Sync.cs b/DropNet/Client/Files.Sync.cs index 7ef8e30..dce5341 100644 --- a/DropNet/Client/Files.Sync.cs +++ b/DropNet/Client/Files.Sync.cs @@ -460,11 +460,6 @@ public CopyRefResponse GetCopyRef(string path) /// public LongpollDeltaResult GetLongpollDelta(string cursor, int timeout = 30) { - if (timeout < 30) - timeout = 30; - if (timeout > 480) - timeout = 480; - var request = _requestHelper.CreateLongpollDeltaRequest(cursor, timeout); return Execute(ApiType.Notify, request); diff --git a/DropNet/Helpers/RequestHelper.cs b/DropNet/Helpers/RequestHelper.cs index d05072d..400d0c1 100644 --- a/DropNet/Helpers/RequestHelper.cs +++ b/DropNet/Helpers/RequestHelper.cs @@ -414,6 +414,11 @@ internal RestRequest CreateLongpollDeltaRequest(string cursor, int timeout) request.AddParameter("version", _version, ParameterType.UrlSegment); request.AddParameter("cursor", cursor); + + if (timeout < 30) + timeout = 30; + if (timeout > 480) + timeout = 480; request.AddParameter("timeout", timeout); return request; From f7c01de4e8e8a651710755138770db4ed58964a1 Mon Sep 17 00:00:00 2001 From: partyzone Date: Wed, 24 Sep 2014 13:49:39 +0400 Subject: [PATCH 43/65] Added optional search parameter of file limit. --- DropNet/Client/Files.Async.cs | 11 ++++++++--- DropNet/Client/Files.Sync.cs | 13 +++++++++---- DropNet/Client/Files.Task.cs | 11 +++++++---- DropNet/Helpers/RequestHelper.cs | 3 ++- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/DropNet/Client/Files.Async.cs b/DropNet/Client/Files.Async.cs index 0be6357..10b1580 100644 --- a/DropNet/Client/Files.Async.cs +++ b/DropNet/Client/Files.Async.cs @@ -67,7 +67,8 @@ public void RestoreAsync(string rev, string path, Action success, Acti /// The search string /// Success call back /// Failure call back - public void SearchAsync(string searchString, Action> success, Action failure) + /// The maximum and default value is 1,000. No more than fileLimit search results will be returned. + public void SearchAsync(string searchString, Action> success, Action failure, uint fileLimit = 1000) { SearchAsync(searchString, string.Empty, success, failure); } @@ -79,9 +80,13 @@ public void SearchAsync(string searchString, Action> success, Act /// The path of the file or folder /// Success call back /// Failure call back - public void SearchAsync(string searchString, string path, Action> success, Action failure) + /// The maximum and default value is 1,000. No more than fileLimit search results will be returned. + public void SearchAsync(string searchString, string path, Action> success, Action failure, uint fileLimit = 1000) { - var request = _requestHelper.CreateSearchRequest(searchString, path, Root); + if (fileLimit > 1000) + fileLimit = 1000; + + var request = _requestHelper.CreateSearchRequest(searchString, path, Root, fileLimit); ExecuteAsync(ApiType.Base, request, success, failure); } diff --git a/DropNet/Client/Files.Sync.cs b/DropNet/Client/Files.Sync.cs index dce5341..17296e5 100644 --- a/DropNet/Client/Files.Sync.cs +++ b/DropNet/Client/Files.Sync.cs @@ -55,9 +55,10 @@ public List GetVersions(string path, int limit) /// Gets list of metadata for search string /// /// The search string - public List Search(string searchString) + /// The maximum and default value is 1,000. No more than fileLimit search results will be returned. + public List Search(string searchString, uint fileLimit = 1000) { - return Search(searchString, string.Empty); + return Search(searchString, string.Empty, fileLimit); } /// @@ -78,9 +79,13 @@ public MetaData Restore(string rev, string path) /// /// The search string /// The path of the file or folder - public List Search(string searchString, string path) + /// The maximum and default value is 1,000. No more than fileLimit search results will be returned. + public List Search(string searchString, string path, uint fileLimit = 1000) { - var request = _requestHelper.CreateSearchRequest(searchString, path, Root); + if (fileLimit > 1000) + fileLimit = 1000; + + var request = _requestHelper.CreateSearchRequest(searchString, path, Root, fileLimit); return Execute>(ApiType.Base, request); } diff --git a/DropNet/Client/Files.Task.cs b/DropNet/Client/Files.Task.cs index 06fcd68..90ea461 100644 --- a/DropNet/Client/Files.Task.cs +++ b/DropNet/Client/Files.Task.cs @@ -41,14 +41,17 @@ public Task RestoreTask(string rev, string path) return ExecuteTask(ApiType.Base, request); } - public Task> SearchTask(string searchString) + public Task> SearchTask(string searchString, uint fileLimit = 1000) { - return SearchTask(searchString, string.Empty); + return SearchTask(searchString, string.Empty, fileLimit); } - public Task> SearchTask(string searchString, string path) + public Task> SearchTask(string searchString, string path, uint fileLimit = 1000) { - var request = _requestHelper.CreateSearchRequest(searchString, path, Root); + if (fileLimit > 1000) + fileLimit = 1000; + + var request = _requestHelper.CreateSearchRequest(searchString, path, Root, fileLimit); return ExecuteTask>(ApiType.Base, request); } diff --git a/DropNet/Helpers/RequestHelper.cs b/DropNet/Helpers/RequestHelper.cs index 400d0c1..5f89ebc 100644 --- a/DropNet/Helpers/RequestHelper.cs +++ b/DropNet/Helpers/RequestHelper.cs @@ -481,7 +481,7 @@ public RestRequest CreateRestoreRequest(string rev, string path, string root) return request; } - public RestRequest CreateSearchRequest(string searchString, string path, string root) + public RestRequest CreateSearchRequest(string searchString, string path, string root, uint fileLimit) { var request = new RestRequest(Method.GET) { @@ -492,6 +492,7 @@ public RestRequest CreateSearchRequest(string searchString, string path, string request.AddParameter("path", path, ParameterType.UrlSegment); request.AddParameter("root", root, ParameterType.UrlSegment); request.AddParameter("query", searchString); + request.AddParameter("file_limit", fileLimit); return request; } From 04ca0ba295ea357d597c87b993ee9611c82e28b0 Mon Sep 17 00:00:00 2001 From: Christian Runeborg Date: Sat, 8 Nov 2014 23:28:04 +0100 Subject: [PATCH 44/65] Fixed issue where GetDeltaAsync parameter incorrectly was named path but was sent as cursor to RequestHelper Added parameters path_prefix, locale and include_media_info to GetDelta/GetDeltaAsync --- DropNet.Tests/FileSyncTests.cs | 2 +- DropNet.Tests/FileTests1.Sandbox.cs | 2 +- DropNet/Client/Files.Async.cs | 12 ++++++++---- DropNet/Client/Files.Sync.cs | 7 +++++-- DropNet/Helpers/RequestHelper.cs | 13 ++++++++++++- 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/DropNet.Tests/FileSyncTests.cs b/DropNet.Tests/FileSyncTests.cs index ea090b4..b7f7f11 100644 --- a/DropNet.Tests/FileSyncTests.cs +++ b/DropNet.Tests/FileSyncTests.cs @@ -233,7 +233,7 @@ public void Can_Get_Media() [TestMethod] public void Can_Get_Delta() { - var delta = _client.GetDelta(""); + var delta = _client.GetDelta("", "", "", false); Assert.IsNotNull(delta); } diff --git a/DropNet.Tests/FileTests1.Sandbox.cs b/DropNet.Tests/FileTests1.Sandbox.cs index 3f19b28..66bf772 100644 --- a/DropNet.Tests/FileTests1.Sandbox.cs +++ b/DropNet.Tests/FileTests1.Sandbox.cs @@ -206,7 +206,7 @@ public void SANDBOX_Can_Get_Thumbnail() [TestMethod] public void SANDBOX_Can_Get_Delta() { - var deltaPage = _client.GetDelta(""); + var deltaPage = _client.GetDelta("", "", "", false); Assert.IsNotNull(deltaPage); diff --git a/DropNet/Client/Files.Async.cs b/DropNet/Client/Files.Async.cs index 0be6357..f78a4c5 100644 --- a/DropNet/Client/Files.Async.cs +++ b/DropNet/Client/Files.Async.cs @@ -391,16 +391,20 @@ public void GetLongpollDeltaAsync(string cursor, Action suc /// The beta delta function, gets updates for a given folder /// /// - /// + /// The value returned from the prior call to GetDelta or an empty string + /// If present, this parameter filters the response to only include entries at or under the specified path + /// If present the metadata returned will have its size field translated based on the given locale + /// If true, each file will include a photo_info dictionary for photos and a video_info dictionary for videos with additional media info. When include_media_info is specified, files will only appear in delta responses when the media info is ready. If you use the include_media_info parameter, you must continue to pass the same value on subsequent calls using the returned cursor. /// /// - public void GetDeltaAsync(bool IKnowThisIsBetaOnly, string path, Action success, Action failure) + public void GetDeltaAsync(bool IKnowThisIsBetaOnly, string cursor, string pathPrefix, + string locale, bool includeMediaInfo, Action success, Action failure) { if (!IKnowThisIsBetaOnly) return; - if (!path.StartsWith("/")) path = "/" + path; + if (!pathPrefix.StartsWith("/")) pathPrefix = "/" + pathPrefix; - var request = _requestHelper.CreateDeltaRequest(path); + var request = _requestHelper.CreateDeltaRequest(cursor, pathPrefix, locale, includeMediaInfo); ExecuteAsync(ApiType.Base, request, success, failure); } diff --git a/DropNet/Client/Files.Sync.cs b/DropNet/Client/Files.Sync.cs index dce5341..e823614 100644 --- a/DropNet/Client/Files.Sync.cs +++ b/DropNet/Client/Files.Sync.cs @@ -469,10 +469,13 @@ public LongpollDeltaResult GetLongpollDelta(string cursor, int timeout = 30) /// Gets the deltas for a user's folders and files. /// /// The value returned from the prior call to GetDelta or an empty string + /// If present, this parameter filters the response to only include entries at or under the specified path + /// If present the metadata returned will have its size field translated based on the given locale + /// If true, each file will include a photo_info dictionary for photos and a video_info dictionary for videos with additional media info. When include_media_info is specified, files will only appear in delta responses when the media info is ready. If you use the include_media_info parameter, you must continue to pass the same value on subsequent calls using the returned cursor. /// - public DeltaPage GetDelta(string cursor) + public DeltaPage GetDelta(string cursor, string pathPrefix, string locale, bool includeMediaInfo) { - var request = _requestHelper.CreateDeltaRequest(cursor); + var request = _requestHelper.CreateDeltaRequest(cursor, pathPrefix, locale, includeMediaInfo); var deltaResponse = Execute(ApiType.Base, request); diff --git a/DropNet/Helpers/RequestHelper.cs b/DropNet/Helpers/RequestHelper.cs index 400d0c1..a7dc5f2 100644 --- a/DropNet/Helpers/RequestHelper.cs +++ b/DropNet/Helpers/RequestHelper.cs @@ -424,13 +424,24 @@ internal RestRequest CreateLongpollDeltaRequest(string cursor, int timeout) return request; } - internal RestRequest CreateDeltaRequest(string cursor) + internal RestRequest CreateDeltaRequest(string cursor, string pathPrefix, string locale, bool includeMediaInfo) { var request = new RestRequest(Method.POST); request.Resource = "{version}/delta"; request.AddParameter("version", _version, ParameterType.UrlSegment); request.AddParameter("cursor", cursor); + request.AddParameter("include_media_info", includeMediaInfo); + + if (!string.IsNullOrEmpty(pathPrefix)) + { + request.AddParameter("path_prefix", pathPrefix); + } + + if (!string.IsNullOrEmpty(locale)) + { + request.AddParameter("locale", locale); + } return request; } From d6bf00b179931b16f7a8f0308794f06b4905f26d Mon Sep 17 00:00:00 2001 From: Christian Runeborg Date: Sat, 8 Nov 2014 23:36:14 +0100 Subject: [PATCH 45/65] Prepended path_prefix with / if there was no leading forward slash in synchronous call --- DropNet/Client/Files.Sync.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DropNet/Client/Files.Sync.cs b/DropNet/Client/Files.Sync.cs index e823614..a7f0466 100644 --- a/DropNet/Client/Files.Sync.cs +++ b/DropNet/Client/Files.Sync.cs @@ -475,6 +475,8 @@ public LongpollDeltaResult GetLongpollDelta(string cursor, int timeout = 30) /// public DeltaPage GetDelta(string cursor, string pathPrefix, string locale, bool includeMediaInfo) { + if (!pathPrefix.StartsWith("/")) pathPrefix = "/" + pathPrefix; + var request = _requestHelper.CreateDeltaRequest(cursor, pathPrefix, locale, includeMediaInfo); var deltaResponse = Execute(ApiType.Base, request); From 7c7342b40959f9b98cea1432c89f50571674ea68 Mon Sep 17 00:00:00 2001 From: Christian Runeborg Date: Tue, 11 Nov 2014 21:31:40 +0100 Subject: [PATCH 46/65] Added overload for GetDelta and GetDeltaAsync to not break old code --- DropNet/Client/Files.Async.cs | 16 ++++++++++++++++ DropNet/Client/Files.Sync.cs | 27 +++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/DropNet/Client/Files.Async.cs b/DropNet/Client/Files.Async.cs index f78a4c5..7fe8323 100644 --- a/DropNet/Client/Files.Async.cs +++ b/DropNet/Client/Files.Async.cs @@ -387,6 +387,22 @@ public void GetLongpollDeltaAsync(string cursor, Action suc ExecuteAsync(ApiType.Notify, request, success, failure); } + /// + /// The beta delta function, gets updates for a given folder + /// + /// + /// The value returned from the prior call to GetDelta or an empty string + /// + /// + public void GetDeltaAsync(bool IKnowThisIsBetaOnly, string cursor, Action success, Action failure) + { + if (!IKnowThisIsBetaOnly) return; + + var request = _requestHelper.CreateDeltaRequest(cursor, null, null, false); + + ExecuteAsync(ApiType.Base, request, success, failure); + } + /// /// The beta delta function, gets updates for a given folder /// diff --git a/DropNet/Client/Files.Sync.cs b/DropNet/Client/Files.Sync.cs index a7f0466..79fd922 100644 --- a/DropNet/Client/Files.Sync.cs +++ b/DropNet/Client/Files.Sync.cs @@ -465,6 +465,33 @@ public LongpollDeltaResult GetLongpollDelta(string cursor, int timeout = 30) return Execute(ApiType.Notify, request); } + /// + /// Gets the deltas for a user's folders and files. + /// + /// The value returned from the prior call to GetDelta or an empty string + /// + public DeltaPage GetDelta(string cursor) + { + var request = _requestHelper.CreateDeltaRequest(cursor, null, null, false); + + var deltaResponse = Execute(ApiType.Base, request); + + var deltaPage = new DeltaPage + { + Cursor = deltaResponse.Cursor, + Has_More = deltaResponse.Has_More, + Reset = deltaResponse.Reset, + Entries = new List() + }; + + foreach (var stringList in deltaResponse.Entries) + { + deltaPage.Entries.Add(StringListToDeltaEntry(stringList)); + } + + return deltaPage; + } + /// /// Gets the deltas for a user's folders and files. /// From 695baf013a9fcae3801f08b441e0f55965302f85 Mon Sep 17 00:00:00 2001 From: crackalak Date: Mon, 15 Dec 2014 11:54:32 +0000 Subject: [PATCH 47/65] Fix for RestSharp v105.0 breaking change BaseUrl now returns URI rather than a string --- DropNet/Client/Client.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DropNet/Client/Client.cs b/DropNet/Client/Client.cs index e3af52c..f7b4852 100644 --- a/DropNet/Client/Client.cs +++ b/DropNet/Client/Client.cs @@ -435,8 +435,8 @@ private UserLogin GetUserLoginFromParams(string urlParams) private void SetAuthProviders() { - _restClientContent.Authenticator = GetAuthenticator(_restClientContent.BaseUrl); - _restClient.Authenticator = GetAuthenticator(_restClient.BaseUrl); + _restClientContent.Authenticator = GetAuthenticator(_restClientContent.BaseUrl.ToString()); + _restClient.Authenticator = GetAuthenticator(_restClient.BaseUrl.ToString()); } private IAuthenticator GetAuthenticator(string baseUrl) From 0b672496975d2c2073846c4370313a616f152842 Mon Sep 17 00:00:00 2001 From: Damian Karzon Date: Fri, 19 Dec 2014 08:13:13 +1300 Subject: [PATCH 48/65] Fixed the Windows Phone build (Doesn't support proxy) --- DropNet/Client/Client.cs | 45 +++++++++++++++++++++++++++++++++++++ DropNet/Models/UserLogin.cs | 6 +++-- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/DropNet/Client/Client.cs b/DropNet/Client/Client.cs index f7b4852..0e91a06 100644 --- a/DropNet/Client/Client.cs +++ b/DropNet/Client/Client.cs @@ -75,6 +75,50 @@ string Root get { return UseSandbox ? SandboxRoot : DropboxRoot; } } +#if WINDOWS_PHONE + /// + /// Default Constructor for the DropboxClient + /// + /// The Api Key to use for the Dropbox Requests + /// The Api Secret to use for the Dropbox Requests + /// The proxy to use for web requests + /// The authentication method to use. + public DropNetClient(string apiKey, string appSecret, AuthenticationMethod authenticationMethod = AuthenticationMethod.OAuth1) + { + LoadClient(); + _apiKey = apiKey; + _appsecret = appSecret; + _authenticationMethod = authenticationMethod; + UserLogin = null; + } + + /// + /// Creates an instance of the DropNetClient given an API Key/Secret and an OAuth2 Access Token + /// + /// The Api Key to use for the Dropbox Requests + /// The Api Secret to use for the Dropbox Requests + /// The OAuth2 access token + /// The proxy to use for web requests + public DropNetClient(string apiKey, string appSecret, string accessToken) + : this(apiKey, appSecret, AuthenticationMethod.OAuth2) + { + UserLogin = new UserLogin { Token = accessToken }; + } + + /// + /// Creates an instance of the DropNetClient given an API Key/Secret and an OAuth1 User Token/Secret + /// + /// The Api Key to use for the Dropbox Requests + /// The Api Secret to use for the Dropbox Requests + /// The OAuth1 User authentication token + /// The OAuth1 Users matching secret + /// The proxy to use for web requests + public DropNetClient(string apiKey, string appSecret, string userToken, string userSecret) + : this(apiKey, appSecret) + { + UserLogin = new UserLogin { Token = userToken, Secret = userSecret }; + } +#else /// /// Default Constructor for the DropboxClient /// @@ -118,6 +162,7 @@ public DropNetClient(string apiKey, string appSecret, string userToken, string u { UserLogin = new UserLogin {Token = userToken, Secret = userSecret}; } +#endif private void LoadClient() { diff --git a/DropNet/Models/UserLogin.cs b/DropNet/Models/UserLogin.cs index d39c65b..c7e6f39 100644 --- a/DropNet/Models/UserLogin.cs +++ b/DropNet/Models/UserLogin.cs @@ -1,7 +1,9 @@ using System; -namespace DropNet.Models -{ +namespace DropNet.Models +{ +#if !WINDOWS_PHONE [Serializable] +#endif public class UserLogin { public string Token { get; set; } From c7dce26e485e07215ddf81edd7050724dc50a07a Mon Sep 17 00:00:00 2001 From: Charlie Nevill Date: Thu, 1 Jan 2015 14:42:35 -0600 Subject: [PATCH 49/65] Fixed URL for OAuth2 login, and added token disable support --- DropNet/Client/Client.cs | 10 +++++++++- DropNet/Client/User.Async.cs | 9 +++++++++ DropNet/Client/User.Sync.cs | 9 +++++++++ DropNet/Helpers/RequestHelper.cs | 7 +++++++ 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/DropNet/Client/Client.cs b/DropNet/Client/Client.cs index 0e91a06..7a1f73f 100644 --- a/DropNet/Client/Client.cs +++ b/DropNet/Client/Client.cs @@ -14,6 +14,7 @@ namespace DropNet { public partial class DropNetClient { + private const string MainServerBaseUrl = "https://www.dropbox.com"; private const string ApiBaseUrl = "https://api.dropbox.com"; private const string ApiContentBaseUrl = "https://api-content.dropbox.com"; private const string ApiNotifyUrl = "https://api-notify.dropbox.com"; @@ -58,6 +59,7 @@ public int TimeoutMS private readonly string _appsecret; private readonly AuthenticationMethod _authenticationMethod; + private RestClient _restClientMainServer; private RestClient _restClient; private RestClient _restClientContent; private RestClient _restClientNotify; @@ -166,6 +168,12 @@ public DropNetClient(string apiKey, string appSecret, string userToken, string u private void LoadClient() { + _restClientMainServer = new RestClient(MainServerBaseUrl); + +#if !WINDOWS_PHONE && !WINRT + _restClientMainServer.Proxy = _proxy; +#endif + _restClient = new RestClient(ApiBaseUrl); #if !WINDOWS_PHONE && !WINRT @@ -239,7 +247,7 @@ public string BuildAuthorizeUrl(OAuth2AuthorizationFlow oAuth2AuthorizationFlow, throw new ArgumentNullException("redirectUri"); } RestRequest request = _requestHelper.BuildOAuth2AuthorizeUrl(oAuth2AuthorizationFlow, _apiKey, redirectUri, state); - return _restClient.BuildUri(request).ToString(); + return _restClientMainServer.BuildUri(request).ToString(); } #if !WINDOWS_PHONE && !WINRT diff --git a/DropNet/Client/User.Async.cs b/DropNet/Client/User.Async.cs index 09b53a5..5d35a2e 100644 --- a/DropNet/Client/User.Async.cs +++ b/DropNet/Client/User.Async.cs @@ -69,6 +69,15 @@ public void AccountInfoAsync(Action success, Action + /// Disables the current access token. + /// + public void DisableAccessTokenAsync(Action success, Action failure) + { + var request = _requestHelper.CreateDisableAccessTokenRequest(); + ExecuteAsync(ApiType.Base, request, _ => success(), failure); + } + [Obsolete("No longer supported by Dropbox")] public void CreateAccountAsync(string email, string firstName, string lastName, string password, Action success, Action failure) { diff --git a/DropNet/Client/User.Sync.cs b/DropNet/Client/User.Sync.cs index a4ee4bc..1e8f52f 100644 --- a/DropNet/Client/User.Sync.cs +++ b/DropNet/Client/User.Sync.cs @@ -67,6 +67,15 @@ public AccountInfo AccountInfo() return Execute(ApiType.Base, request); } + /// + /// Disables the current access token. + /// + public IRestResponse DisableAccessToken() + { + var request = _requestHelper.CreateDisableAccessTokenRequest(); + return Execute(ApiType.Base, request); + } + } } #endif \ No newline at end of file diff --git a/DropNet/Helpers/RequestHelper.cs b/DropNet/Helpers/RequestHelper.cs index a7dc5f2..4e2416d 100644 --- a/DropNet/Helpers/RequestHelper.cs +++ b/DropNet/Helpers/RequestHelper.cs @@ -386,6 +386,13 @@ public RestRequest CreateOAuth2AccessTokenRequest(string code, string redirectUr return request; } + public RestRequest CreateDisableAccessTokenRequest() + { + var request = new RestRequest("{version}/disable_access_token", Method.POST); + request.AddParameter("version", _version, ParameterType.UrlSegment); + return request; + } + public RestRequest CreateAccountInfoRequest() { var request = new RestRequest(Method.GET); From 8181cc671cafa4147e4a09c61bb7a835e80655ef Mon Sep 17 00:00:00 2001 From: Damian Karzon Date: Tue, 6 Jan 2015 17:31:53 +1300 Subject: [PATCH 50/65] Build config stuff --- DropNet.sln | 5 ----- DropNet/DropNet.csproj | 1 + dropnet.nuspec => DropNet/dropnet.nuspec | 12 ++++++------ appveyor.yml | 8 ++++++++ 4 files changed, 15 insertions(+), 11 deletions(-) rename dropnet.nuspec => DropNet/dropnet.nuspec (55%) create mode 100644 appveyor.yml diff --git a/DropNet.sln b/DropNet.sln index 50c68ad..98584c9 100644 --- a/DropNet.sln +++ b/DropNet.sln @@ -7,11 +7,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DropNet.WindowsPhone", "Dro EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DropNet.Tests", "DropNet.Tests\DropNet.Tests.csproj", "{06B6BC2F-94D5-456A-ABA7-F73FB28B4703}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuGet", "NuGet", "{61EE82C6-B07F-4F79-81FD-E028D60D4977}" - ProjectSection(SolutionItems) = preProject - dropnet.nuspec = dropnet.nuspec - EndProjectSection -EndProject Global GlobalSection(TestCaseManagementSettings) = postSolution CategoryFile = DropNet.vsmdi diff --git a/DropNet/DropNet.csproj b/DropNet/DropNet.csproj index d53ab79..23d8cb9 100644 --- a/DropNet/DropNet.csproj +++ b/DropNet/DropNet.csproj @@ -108,6 +108,7 @@ + diff --git a/dropnet.nuspec b/DropNet/dropnet.nuspec similarity index 55% rename from dropnet.nuspec rename to DropNet/dropnet.nuspec index dd4eddf..2f0bb8e 100644 --- a/dropnet.nuspec +++ b/DropNet/dropnet.nuspec @@ -2,13 +2,13 @@ DropNet - 1.9.6 + $version$ Damian Karzon, Github Contributors Damian Karzon .NET Client for the Dropbox API (.NET 4 and Windows Phone) en-AU - http://dkdevelopment.net/what-im-doing/dropnet/ - https://github.com/dkarzon/DropNet/blob/master/LICENSE.txt + http://dropnet.github.io/ + https://github.com/dropnet/DropNet/blob/master/LICENSE.txt http://dkdevelopment.net/img/DropNetIcon.png DROPBOX API .NET WP7 @@ -16,8 +16,8 @@ - - - + + + \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..6a01012 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,8 @@ +version: 1.9.{build} + +assembly_info: + patch: true + file: AssemblyInfo.* + assembly_version: "{version}" + assembly_file_version: "{version}" + assembly_informational_version: "{version}" \ No newline at end of file From 918d0e952c161fd75cf2e1e8eba750c0a4bcc2f6 Mon Sep 17 00:00:00 2001 From: Damian Karzon Date: Tue, 6 Jan 2015 17:45:50 +1300 Subject: [PATCH 51/65] Build settings --- appveyor.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 6a01012..cff5acc 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,8 +1,18 @@ version: 1.9.{build} +configuration: Release +build: + project: DropNet.sln + publish_nuget: true + publish_nuget_symbols: true + assembly_info: patch: true file: AssemblyInfo.* assembly_version: "{version}" assembly_file_version: "{version}" - assembly_informational_version: "{version}" \ No newline at end of file + assembly_informational_version: "{version}" + + +# scripts to run before build +before_build: nuget restore \ No newline at end of file From c8c534a30defb4678551ea5a6b2fb2559585592b Mon Sep 17 00:00:00 2001 From: Damian Karzon Date: Tue, 6 Jan 2015 18:11:00 +1300 Subject: [PATCH 52/65] No auto running tests. --- appveyor.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/appveyor.yml b/appveyor.yml index cff5acc..ae1e197 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,6 +1,7 @@ version: 1.9.{build} configuration: Release +test: off build: project: DropNet.sln publish_nuget: true From 4f0e1685b7b9c2125c64b26b47e545d3e493078a Mon Sep 17 00:00:00 2001 From: Damian Karzon Date: Sat, 24 Jan 2015 09:59:06 +1300 Subject: [PATCH 53/65] remove the sample project --- DropNet.Samples/DropNet.Samples.WP7/App.xaml | 19 --- .../DropNet.Samples.WP7/App.xaml.cs | 144 ------------------ .../DropNet.Samples.WP7/ApplicationIcon.png | Bin 1881 -> 0 bytes .../DropNet.Samples.WP7/Background.png | Bin 3521 -> 0 bytes .../Converters/BoolToNotVisConverter.cs | 28 ---- .../Converters/BoolToVisConverter.cs | 28 ---- .../DropNet.Samples.WP7.csproj | 124 --------------- .../DropNet.Samples.WP7/MainPage.xaml | 62 -------- .../DropNet.Samples.WP7/MainPage.xaml.cs | 111 -------------- .../Properties/AppManifest.xml | 6 - .../Properties/AssemblyInfo.cs | 37 ----- .../Properties/WMAppManifest.xml | 35 ----- .../SampleData/MainViewModelSampleData.xaml | 131 ---------------- .../DropNet.Samples.WP7/SplashScreenImage.jpg | Bin 9417 -> 0 bytes .../ViewModels/MainViewModel.cs | 61 -------- .../DropNet.Samples.WP7/packages.config | 5 - 16 files changed, 791 deletions(-) delete mode 100644 DropNet.Samples/DropNet.Samples.WP7/App.xaml delete mode 100644 DropNet.Samples/DropNet.Samples.WP7/App.xaml.cs delete mode 100644 DropNet.Samples/DropNet.Samples.WP7/ApplicationIcon.png delete mode 100644 DropNet.Samples/DropNet.Samples.WP7/Background.png delete mode 100644 DropNet.Samples/DropNet.Samples.WP7/Converters/BoolToNotVisConverter.cs delete mode 100644 DropNet.Samples/DropNet.Samples.WP7/Converters/BoolToVisConverter.cs delete mode 100644 DropNet.Samples/DropNet.Samples.WP7/DropNet.Samples.WP7.csproj delete mode 100644 DropNet.Samples/DropNet.Samples.WP7/MainPage.xaml delete mode 100644 DropNet.Samples/DropNet.Samples.WP7/MainPage.xaml.cs delete mode 100644 DropNet.Samples/DropNet.Samples.WP7/Properties/AppManifest.xml delete mode 100644 DropNet.Samples/DropNet.Samples.WP7/Properties/AssemblyInfo.cs delete mode 100644 DropNet.Samples/DropNet.Samples.WP7/Properties/WMAppManifest.xml delete mode 100644 DropNet.Samples/DropNet.Samples.WP7/SampleData/MainViewModelSampleData.xaml delete mode 100644 DropNet.Samples/DropNet.Samples.WP7/SplashScreenImage.jpg delete mode 100644 DropNet.Samples/DropNet.Samples.WP7/ViewModels/MainViewModel.cs delete mode 100644 DropNet.Samples/DropNet.Samples.WP7/packages.config diff --git a/DropNet.Samples/DropNet.Samples.WP7/App.xaml b/DropNet.Samples/DropNet.Samples.WP7/App.xaml deleted file mode 100644 index 2938a4b..0000000 --- a/DropNet.Samples/DropNet.Samples.WP7/App.xaml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/DropNet.Samples/DropNet.Samples.WP7/App.xaml.cs b/DropNet.Samples/DropNet.Samples.WP7/App.xaml.cs deleted file mode 100644 index 8809b17..0000000 --- a/DropNet.Samples/DropNet.Samples.WP7/App.xaml.cs +++ /dev/null @@ -1,144 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Animation; -using System.Windows.Navigation; -using System.Windows.Shapes; -using Microsoft.Phone.Controls; -using Microsoft.Phone.Shell; - -namespace DropNet.Samples.WP7 -{ - public partial class App : Application - { - /// - /// Provides easy access to the root frame of the Phone Application. - /// - /// The root frame of the Phone Application. - public PhoneApplicationFrame RootFrame { get; private set; } - - /// - /// Publically accessable DropNetClient - /// - public static DropNetClient DropNetClient { get; set; } - - /// - /// Constructor for the Application object. - /// - public App() - { - // Global handler for uncaught exceptions. - UnhandledException += Application_UnhandledException; - - // Standard Silverlight initialization - InitializeComponent(); - - // Phone-specific initialization - InitializePhoneApplication(); - - // Show graphics profiling information while debugging. - if (System.Diagnostics.Debugger.IsAttached) - { - // Display the current frame rate counters. - Application.Current.Host.Settings.EnableFrameRateCounter = true; - - PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled; - } - - //////////////////////////////////////////////////// - // NOTE: This key is a Development only key setup for this sample and will only work with my login. - // MAKE SURE YOU CHANGE IT OR IT WONT WORK! - //////////////////////////////////////////////////// - DropNetClient = new DropNetClient("9m6v782a7aeop0w", "dbd11uqce6hr8zg"); - - //NOTE: If user Token and Secret are stored from previous login session: - //DropNetClient.UserLogin = new Models.UserLogin { Token = "TokenFromStorage", Secret = "SecretFromStorage" }; - } - - // Code to execute when the application is launching (eg, from Start) - // This code will not execute when the application is reactivated - private void Application_Launching(object sender, LaunchingEventArgs e) - { - } - - // Code to execute when the application is activated (brought to foreground) - // This code will not execute when the application is first launched - private void Application_Activated(object sender, ActivatedEventArgs e) - { - } - - // Code to execute when the application is deactivated (sent to background) - // This code will not execute when the application is closing - private void Application_Deactivated(object sender, DeactivatedEventArgs e) - { - } - - // Code to execute when the application is closing (eg, user hit Back) - // This code will not execute when the application is deactivated - private void Application_Closing(object sender, ClosingEventArgs e) - { - } - - // Code to execute if a navigation fails - private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e) - { - if (System.Diagnostics.Debugger.IsAttached) - { - // A navigation has failed; break into the debugger - System.Diagnostics.Debugger.Break(); - } - } - - // Code to execute on Unhandled Exceptions - private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) - { - if (System.Diagnostics.Debugger.IsAttached) - { - // An unhandled exception has occurred; break into the debugger - System.Diagnostics.Debugger.Break(); - } - } - - #region Phone application initialization - - // Avoid double-initialization - private bool phoneApplicationInitialized = false; - - // Do not add any additional code to this method - private void InitializePhoneApplication() - { - if (phoneApplicationInitialized) - return; - - // Create the frame but don't set it as RootVisual yet; this allows the splash - // screen to remain active until the application is ready to render. - RootFrame = new PhoneApplicationFrame(); - RootFrame.Navigated += CompleteInitializePhoneApplication; - - // Handle navigation failures - RootFrame.NavigationFailed += RootFrame_NavigationFailed; - - // Ensure we don't initialize again - phoneApplicationInitialized = true; - } - - // Do not add any additional code to this method - private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e) - { - // Set the root visual to allow the application to render - if (RootVisual != RootFrame) - RootVisual = RootFrame; - - // Remove this handler since it is no longer needed - RootFrame.Navigated -= CompleteInitializePhoneApplication; - } - - #endregion - } -} \ No newline at end of file diff --git a/DropNet.Samples/DropNet.Samples.WP7/ApplicationIcon.png b/DropNet.Samples/DropNet.Samples.WP7/ApplicationIcon.png deleted file mode 100644 index 5859393ca1056103ba35d225773352a9fa3ab754..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1881 zcmV-f2d4OmP)GXLPE9uD;d|3K9jFs0^O3no;*#kUHY6H}PH_^L3*aj} zl+rSw?L`W0p^tkju#a}u3PxyqFY3}?ZpgV`?z#P)?|kQbU67g4(Jt>MC@$|ToYbAv zoz$Jwoz$JwUyrEBh@^xBYY9T32$%4g4Eozd9YH8m>Im7iz@UwrH+y+`StMa0!Jlv1 zOs9{eP8~IOLbaYWZ(elNbZg1v$&=#~5`=udMY3Y~^2n$tPDrTrV}g_vPDsd`qdqj` z?(SZ2=x{`MxJ4Ea7yy62*t!)g2L{u*+?5%tV8G+?EYFApOLBK?H(-W0sdbrL7RKcs zEi7D+mK#@=wJ2&3^B#Z6SE|tW^ z&fa_A0KDdD7g}CkuGQ%*uYy_6tlm5}8JiaBN~M03ks%g~tMA@5>&#%lv|6osRa0w$GfX-lmv6;tg7E35t(xdFTQCUeAbpwWpTg5+|K7IY# zwbIg(hK5FUUmu3O*mrLl?KRUayoa}&LPcB<-$|3+(JUi7*{UTR~?sv$M1P1N>*rj)mLHrKNHON-lLA!%9m^1R@cPXUv=l zmwktfMx&WuVn$tE?SL(YK0XhFAR`119z6nm6Brlagxr7dz}8t~Yn@7=%#V+Eb8|(} zt{zpd`CNjX*sbr;=t5DIS`Dt#+slj1W=)+krM;u$iMZ8K>adS$jr!2xBjD^>TUvBF z9d0yoxm*IZ?l;-5Ain@y6NACvgojsGRpsU7j%^L&Y-U7+haE2}3J&Fvoey?)v}dhb zCu#eKuxQ%SD*0;n9-YaBlZv8a$Hv3kwrJWRlMUc_^1_AW@h&SVIeq4*!NEa-a~Q~4 z+oV!0nTl_2YVx!S#tzx~^ayTn&@|YYz@VU6F)=fuXV94}i1{Q@*QnG@O^x-nwNi;h z*`t)BXsbkOr-$)j`>g(C&HN({S~o10_f z;%IdG#4O<1vuEG#-(Pg%q)ef3=$L{Rf85e?x28HGf*TMRL^f|}YwPyhobszzVFAQ= zm~N%=UR|9)Ab@0*RDI`VXWyx=A<{WQ0h*baId@(Hx%~+Wg~envH8%FDRE|=IfS_Gc9lLglmM*of63B)(jlMWFl^Yh` z-PHwg&`!V3goKDr=Y)nNCGiA8A;+rnCkfqM=&e6)R#x6>e)2@4>Few7cQpMPZm{_I z@>5c?^YUI_#W{jAr%qkC_-ltu?lLq)WR>)^Tj}QN>OSs3Z67*1WyCi#!0z{cbAY@o z006~x)1!xywl>13BNU2g3IFKvB5+=0+j?T+{J*NJA&d|~9YF+(7w2r-hRPK^N~OV| z*K2jK7)uw$abO06sz<3-X}VB_(P)g1kH1%6r&4Pit&*rzYH08@48w6FjvxpyMqH5G z+#G(IkSOXBu{bAtE4UNjJv2Dv?d^r*xNNN6#<*(JR_RN|$7Zqo{R0Rz5+7e*D63_1 z1<}onQAk;|C^{yFKD+Wz{HrNFFf|SuX0K6dp!F8pg;@r>Y=rsCpr)?Z@)E?>v3>(o$ zrqR3^&og+a=b!w5N57jd;8|i|GIMu#V_YC94Rc^kd-O#lzDi#4-5>B z`F?^uj5UIS0&A+OHhi}J_wsTa!}NN6eQllj6z=lWJG4TH)* z?`+z*0Yy=!W5up*A7no6n!nw*wo>MkzI-d?@orCP?%cM_FCIaX9;>6gpovZ%<&lG0MhzAcYIoOgsb z0n|ss&CTu6!-opA%OZibfuXl|${hS;XMd^jw!!)D4NmG#>Q3rT>i;k5{|Ybw$j9Fp Tu#Z&K00000NkvXXu0mjfnP|DN diff --git a/DropNet.Samples/DropNet.Samples.WP7/Background.png b/DropNet.Samples/DropNet.Samples.WP7/Background.png deleted file mode 100644 index e46f21d9407f1ae4d6fedcf793778f32bae3f06d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3521 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 diff --git a/DropNet.Samples/DropNet.Samples.WP7/Converters/BoolToNotVisConverter.cs b/DropNet.Samples/DropNet.Samples.WP7/Converters/BoolToNotVisConverter.cs deleted file mode 100644 index 269a80e..0000000 --- a/DropNet.Samples/DropNet.Samples.WP7/Converters/BoolToNotVisConverter.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Net; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Documents; -using System.Windows.Ink; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Animation; -using System.Windows.Shapes; -using System.Windows.Data; -using System.Globalization; - -namespace DropNet.Samples.WP7.Converters -{ - public class BoolToNotVisConverter : IValueConverter - { - public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { - return System.Convert.ToBoolean(value) ? Visibility.Collapsed : Visibility.Visible; - } - - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) - { - return value.Equals(Visibility.Visible); - } - } -} diff --git a/DropNet.Samples/DropNet.Samples.WP7/Converters/BoolToVisConverter.cs b/DropNet.Samples/DropNet.Samples.WP7/Converters/BoolToVisConverter.cs deleted file mode 100644 index f6c7882..0000000 --- a/DropNet.Samples/DropNet.Samples.WP7/Converters/BoolToVisConverter.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Net; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Documents; -using System.Windows.Ink; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Animation; -using System.Windows.Shapes; -using System.Windows.Data; -using System.Globalization; - -namespace DropNet.Samples.WP7.Converters -{ - public class BoolToVisConverter : IValueConverter - { - public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { - return System.Convert.ToBoolean(value) ? Visibility.Visible : Visibility.Collapsed; - } - - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) - { - return value.Equals(Visibility.Visible); - } - } -} diff --git a/DropNet.Samples/DropNet.Samples.WP7/DropNet.Samples.WP7.csproj b/DropNet.Samples/DropNet.Samples.WP7/DropNet.Samples.WP7.csproj deleted file mode 100644 index c273000..0000000 --- a/DropNet.Samples/DropNet.Samples.WP7/DropNet.Samples.WP7.csproj +++ /dev/null @@ -1,124 +0,0 @@ - - - - Debug - AnyCPU - 10.0.20506 - 2.0 - {59706E1F-E8C9-4889-A0DD-1FD2D4FFB475} - {C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - DropNet.Samples.WP7 - DropNet.Samples.WP7 - v4.0 - $(TargetFrameworkVersion) - WindowsPhone71 - Silverlight - true - - - true - true - DropNet.Samples.WP7.xap - Properties\AppManifest.xml - DropNet.Samples.WP7.App - true - true - true - 4.0.30816.0 - - - true - full - false - Bin\Debug - DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE - true - true - prompt - 4 - - - pdbonly - true - Bin\Release - TRACE;SILVERLIGHT;WINDOWS_PHONE - true - true - prompt - 4 - - - - False - ..\packages\DropNet.1.8.3\lib\sl4-wp71\DropNet.WindowsPhone.dll - - - - - False - ..\packages\Newtonsoft.Json.4.0.5\lib\sl4-windowsphone71\Newtonsoft.Json.dll - - - ..\packages\DropNet.1.8.3\lib\sl4-wp71\RestSharp.WindowsPhoneMango.dll - - - - - - - - - - - App.xaml - - - - - MainPage.xaml - - - - - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - - - - - - - - PreserveNewest - - - PreserveNewest - - - - - - MSBuild:MarkupCompilePass1 - - - - - - - \ No newline at end of file diff --git a/DropNet.Samples/DropNet.Samples.WP7/MainPage.xaml b/DropNet.Samples/DropNet.Samples.WP7/MainPage.xaml deleted file mode 100644 index f598d52..0000000 --- a/DropNet.Samples/DropNet.Samples.WP7/MainPage.xaml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/DropNet.Samples/DropNet.Samples.WP7/MainPage.xaml.cs b/DropNet.Samples/DropNet.Samples.WP7/MainPage.xaml.cs deleted file mode 100644 index 68af509..0000000 --- a/DropNet.Samples/DropNet.Samples.WP7/MainPage.xaml.cs +++ /dev/null @@ -1,111 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Animation; -using System.Windows.Shapes; -using Microsoft.Phone.Controls; -using DropNet.Samples.WP7.ViewModels; - -namespace DropNet.Samples.WP7 -{ - public partial class MainPage : PhoneApplicationPage - { - private MainViewModel _model; - - // Constructor - public MainPage() - { - InitializeComponent(); - } - - protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) - { - base.OnNavigatedTo(e); - - //Basic MVVM stuff - _model = new MainViewModel(); - _model.ShowLogin = true; - this.DataContext = _model; - } - - private void btnStart_Click(object sender, RoutedEventArgs e) - { - App.DropNetClient.GetTokenAsync(userToken => - { - //Dont really need to do anything with the usertoken yet as its stored inside the client for the session - - //Now we want to use the new Request token we have to generate an Authorize Url - var tokenUrl = App.DropNetClient.BuildAuthorizeUrl("http://dkdevelopment.net/BoxShotLogin.htm"); //Spelt correctly in v1.8.1 - //Capture the LoadCompleted event from the browser so we can check when the user has logged in - loginBrowser.LoadCompleted += new System.Windows.Navigation.LoadCompletedEventHandler(loginBrowser_LoadCompleted); - //Open a browser with the URL - loginBrowser.Navigate(new Uri(tokenUrl)); - }, - (error) => - { - //OH DEAR GOD WHAT HAPPENED?! - Deployment.Current.Dispatcher.BeginInvoke(() => - { - MessageBox.Show(error.Message); - }); - }); - } - - void loginBrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e) - { - //Check for the callback path here (or just check it against "/1/oauth/authorize") - if (e.Uri.AbsolutePath == "/BoxShotLogin.htm") - { - //The User has logged in! - //Now to convert the Request Token into an Access Token - App.DropNetClient.GetAccessTokenAsync(response => - { - //GREAT SUCCESS! - //Now we should save the Token and Secret so the user doesnt have to login next time - //response.Token; - //response.Secret; - - //Now lets load the root contents and hide the login on the page - _model.ShowContents = true; - _model.ShowLogin = false; - - LoadContents(); - }, - (error) => - { - //OH DEAR GOD WHAT HAPPENED?! - Deployment.Current.Dispatcher.BeginInvoke(() => - { - MessageBox.Show(error.Message); - }); - }); - } - else - { - //Probably the login page loading, ignore - } - } - - private void LoadContents() - { - App.DropNetClient.GetMetaDataAsync("/", (response) => - { - _model.Meta = response; - }, - (error) => - { - //OH DEAR GOD WHAT HAPPENED?! - Deployment.Current.Dispatcher.BeginInvoke(() => - { - MessageBox.Show(error.Message); - }); - }); - } - } -} \ No newline at end of file diff --git a/DropNet.Samples/DropNet.Samples.WP7/Properties/AppManifest.xml b/DropNet.Samples/DropNet.Samples.WP7/Properties/AppManifest.xml deleted file mode 100644 index 6712a11..0000000 --- a/DropNet.Samples/DropNet.Samples.WP7/Properties/AppManifest.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - diff --git a/DropNet.Samples/DropNet.Samples.WP7/Properties/AssemblyInfo.cs b/DropNet.Samples/DropNet.Samples.WP7/Properties/AssemblyInfo.cs deleted file mode 100644 index fad9d33..0000000 --- a/DropNet.Samples/DropNet.Samples.WP7/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Resources; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DropNet.Samples.WP7")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("DropNet.Samples.WP7")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2011")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("82abe712-5532-4df6-b5e1-97bfcb061519")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] -[assembly: NeutralResourcesLanguageAttribute("en-US")] diff --git a/DropNet.Samples/DropNet.Samples.WP7/Properties/WMAppManifest.xml b/DropNet.Samples/DropNet.Samples.WP7/Properties/WMAppManifest.xml deleted file mode 100644 index 16c97b7..0000000 --- a/DropNet.Samples/DropNet.Samples.WP7/Properties/WMAppManifest.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - ApplicationIcon.png - - - - - - - - - - - - - - - - - - - - - - - Background.png - 0 - DropNet.Samples.WP7 - - - - - diff --git a/DropNet.Samples/DropNet.Samples.WP7/SampleData/MainViewModelSampleData.xaml b/DropNet.Samples/DropNet.Samples.WP7/SampleData/MainViewModelSampleData.xaml deleted file mode 100644 index 0e6c59f..0000000 --- a/DropNet.Samples/DropNet.Samples.WP7/SampleData/MainViewModelSampleData.xaml +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/DropNet.Samples/DropNet.Samples.WP7/SplashScreenImage.jpg b/DropNet.Samples/DropNet.Samples.WP7/SplashScreenImage.jpg deleted file mode 100644 index 353b1927b9d397aac7f23098e427739615db19fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9417 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 UfQSJR10n`Q4E%c;KnlnH2jCM6ivR!s diff --git a/DropNet.Samples/DropNet.Samples.WP7/ViewModels/MainViewModel.cs b/DropNet.Samples/DropNet.Samples.WP7/ViewModels/MainViewModel.cs deleted file mode 100644 index 2caf40f..0000000 --- a/DropNet.Samples/DropNet.Samples.WP7/ViewModels/MainViewModel.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Net; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Documents; -using System.Windows.Ink; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Animation; -using System.Windows.Shapes; -using System.ComponentModel; -using DropNet.Models; - -namespace DropNet.Samples.WP7.ViewModels -{ - public class MainViewModel : INotifyPropertyChanged - { - private bool _showLogin; - public bool ShowLogin - { - get { return _showLogin; } - set - { - _showLogin = value; - NotifyPropertyChanged("ShowLogin"); - } - } - - private bool _showContents; - public bool ShowContents - { - get { return _showContents; } - set - { - _showContents = value; - NotifyPropertyChanged("ShowContents"); - } - } - - private MetaData _meta; - public MetaData Meta - { - get { return _meta; } - set - { - _meta = value; - NotifyPropertyChanged("Meta"); - } - } - - public event PropertyChangedEventHandler PropertyChanged; - protected void NotifyPropertyChanged(String propertyName) - { - if (PropertyChanged != null) - { - Deployment.Current.Dispatcher.BeginInvoke(() => - PropertyChanged(this, new PropertyChangedEventArgs(propertyName))); - } - } - } -} diff --git a/DropNet.Samples/DropNet.Samples.WP7/packages.config b/DropNet.Samples/DropNet.Samples.WP7/packages.config deleted file mode 100644 index 68c0e92..0000000 --- a/DropNet.Samples/DropNet.Samples.WP7/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file From aecee0a8fb3fe06c27cf5e6fe7a693253b16631c Mon Sep 17 00:00:00 2001 From: Damian Karzon Date: Sat, 24 Jan 2015 10:15:50 +1300 Subject: [PATCH 54/65] Sample projects are now in https://github.com/DropNet/DropNet.Samples --- DropNet.Samples/DropNet.Samples.VB/App.config | 6 - .../DropNet.Samples.VB.vbproj | 140 - .../DropNet.Samples.VB/Form1.Designer.vb | 50 - DropNet.Samples/DropNet.Samples.VB/Form1.resx | 120 - DropNet.Samples/DropNet.Samples.VB/Form1.vb | 17 - .../My Project/Application.Designer.vb | 38 - .../My Project/Application.myapp | 11 - .../My Project/AssemblyInfo.vb | 35 - .../My Project/Resources.Designer.vb | 62 - .../My Project/Resources.resx | 117 - .../My Project/Settings.Designer.vb | 73 - .../My Project/Settings.settings | 7 - .../DropNet.Samples.VB/packages.config | 5 - .../DropNet.Samples.Web/About.aspx | 13 - .../DropNet.Samples.Web/About.aspx.cs | 17 - .../About.aspx.designer.cs | 17 - .../Account/ChangePassword.aspx | 60 - .../Account/ChangePassword.aspx.cs | 17 - .../Account/ChangePassword.aspx.designer.cs | 26 - .../Account/ChangePasswordSuccess.aspx | 13 - .../Account/ChangePasswordSuccess.aspx.cs | 17 - .../ChangePasswordSuccess.aspx.designer.cs | 17 - .../DropNet.Samples.Web/Account/Login.aspx | 49 - .../DropNet.Samples.Web/Account/Login.aspx.cs | 17 - .../Account/Login.aspx.designer.cs | 35 - .../DropNet.Samples.Web/Account/Register.aspx | 75 - .../Account/Register.aspx.cs | 32 - .../Account/Register.aspx.designer.cs | 35 - .../DropNet.Samples.Web/Account/Web.config | 18 - .../DropNet.Samples.Web/Default.aspx | 12 - .../DropNet.Samples.Web/Default.aspx.cs | 47 - .../Default.aspx.designer.cs | 33 - .../DropNet.Samples.Web.csproj | 175 - .../DropNet.Samples.Web/Global.asax | 1 - .../DropNet.Samples.Web/Global.asax.cs | 47 - .../Properties/AssemblyInfo.cs | 35 - .../Scripts/jquery-1.4.1-vsdoc.js | 8061 ----------------- .../Scripts/jquery-1.4.1.js | 6111 ------------- .../Scripts/jquery-1.4.1.min.js | 167 - .../DropNet.Samples.Web/Site.Master | 43 - .../DropNet.Samples.Web/Site.Master.cs | 17 - .../Site.Master.designer.cs | 42 - .../DropNet.Samples.Web/Styles/Site.css | 294 - .../DropNet.Samples.Web/Web.Debug.config | 30 - .../DropNet.Samples.Web/Web.Release.config | 31 - .../DropNet.Samples.Web/Web.config | 52 - .../DropNet.Samples.Web/packages.config | 5 - .../DropNet.Samples.WinForms.sln | 20 - .../DropNet.Samples.WinForms.csproj | 92 - .../Form1.Designer.cs | 72 - .../DropNet.Samples.WinForms/Form1.cs | 95 - .../DropNet.Samples.WinForms/Form1.resx | 120 - .../DropNet.Samples.WinForms/Program.cs | 21 - .../Properties/AssemblyInfo.cs | 36 - .../Properties/Resources.Designer.cs | 71 - .../Properties/Resources.resx | 117 - .../Properties/Settings.Designer.cs | 30 - .../Properties/Settings.settings | 7 - .../DropNet.Samples.WinForms/packages.config | 4 - .../DropNet.1.9.3/DropNet.1.9.3.nupkg | Bin 163396 -> 0 bytes .../DropNet.1.9.3/lib/net35/DropNet.dll | Bin 32768 -> 0 bytes .../DropNet.1.9.3/lib/net35/RestSharp.dll | Bin 157184 -> 0 bytes .../lib/sl4-wp71/DropNet.WindowsPhone.dll | Bin 29696 -> 0 bytes .../lib/sl4-wp71/RestSharp.WindowsPhone.dll | Bin 178176 -> 0 bytes .../packages/repositories.config | 4 - DropNet.Samples/DropNet.Samples.sln | 58 - .../DropNet.1.8.3/DropNet.1.8.3.nupkg | Bin 235147 -> 0 bytes .../DropNet.1.8.3/lib/net35/DropNet.dll | Bin 33280 -> 0 bytes .../DropNet.1.8.3/lib/net35/RestSharp.dll | Bin 128512 -> 0 bytes .../lib/sl3-wp/DropNet.WindowsPhone.dll | Bin 29184 -> 0 bytes .../lib/sl3-wp/RestSharp.WindowsPhone.dll | Bin 106496 -> 0 bytes .../lib/sl4-wp71/DropNet.WindowsPhone.dll | Bin 29184 -> 0 bytes .../sl4-wp71/RestSharp.WindowsPhoneMango.dll | Bin 106496 -> 0 bytes .../Newtonsoft.Json.4.0.5.nupkg | Bin 3249991 -> 0 bytes .../lib/net20/Newtonsoft.Json.dll | Bin 375296 -> 0 bytes .../lib/net20/Newtonsoft.Json.xml | 7859 ---------------- .../lib/net35/Newtonsoft.Json.dll | Bin 335360 -> 0 bytes .../lib/net35/Newtonsoft.Json.xml | 6982 -------------- .../lib/net40/Newtonsoft.Json.dll | Bin 358400 -> 0 bytes .../lib/net40/Newtonsoft.Json.xml | 7141 --------------- .../lib/sl3-wp/Newtonsoft.Json.dll | Bin 305152 -> 0 bytes .../lib/sl3-wp/Newtonsoft.Json.xml | 6574 -------------- .../sl4-windowsphone71/Newtonsoft.Json.dll | Bin 305152 -> 0 bytes .../sl4-windowsphone71/Newtonsoft.Json.xml | 6574 -------------- .../lib/sl4/Newtonsoft.Json.dll | Bin 308736 -> 0 bytes .../lib/sl4/Newtonsoft.Json.xml | 6604 -------------- DropNet.Samples/packages/repositories.config | 6 - 87 files changed, 58829 deletions(-) delete mode 100644 DropNet.Samples/DropNet.Samples.VB/App.config delete mode 100644 DropNet.Samples/DropNet.Samples.VB/DropNet.Samples.VB.vbproj delete mode 100644 DropNet.Samples/DropNet.Samples.VB/Form1.Designer.vb delete mode 100644 DropNet.Samples/DropNet.Samples.VB/Form1.resx delete mode 100644 DropNet.Samples/DropNet.Samples.VB/Form1.vb delete mode 100644 DropNet.Samples/DropNet.Samples.VB/My Project/Application.Designer.vb delete mode 100644 DropNet.Samples/DropNet.Samples.VB/My Project/Application.myapp delete mode 100644 DropNet.Samples/DropNet.Samples.VB/My Project/AssemblyInfo.vb delete mode 100644 DropNet.Samples/DropNet.Samples.VB/My Project/Resources.Designer.vb delete mode 100644 DropNet.Samples/DropNet.Samples.VB/My Project/Resources.resx delete mode 100644 DropNet.Samples/DropNet.Samples.VB/My Project/Settings.Designer.vb delete mode 100644 DropNet.Samples/DropNet.Samples.VB/My Project/Settings.settings delete mode 100644 DropNet.Samples/DropNet.Samples.VB/packages.config delete mode 100644 DropNet.Samples/DropNet.Samples.Web/About.aspx delete mode 100644 DropNet.Samples/DropNet.Samples.Web/About.aspx.cs delete mode 100644 DropNet.Samples/DropNet.Samples.Web/About.aspx.designer.cs delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Account/ChangePassword.aspx delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Account/ChangePassword.aspx.cs delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Account/ChangePassword.aspx.designer.cs delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Account/ChangePasswordSuccess.aspx delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Account/ChangePasswordSuccess.aspx.cs delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Account/ChangePasswordSuccess.aspx.designer.cs delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Account/Login.aspx delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Account/Login.aspx.cs delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Account/Login.aspx.designer.cs delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Account/Register.aspx delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Account/Register.aspx.cs delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Account/Register.aspx.designer.cs delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Account/Web.config delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Default.aspx delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Default.aspx.cs delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Default.aspx.designer.cs delete mode 100644 DropNet.Samples/DropNet.Samples.Web/DropNet.Samples.Web.csproj delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Global.asax delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Global.asax.cs delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Properties/AssemblyInfo.cs delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Scripts/jquery-1.4.1-vsdoc.js delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Scripts/jquery-1.4.1.js delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Scripts/jquery-1.4.1.min.js delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Site.Master delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Site.Master.cs delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Site.Master.designer.cs delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Styles/Site.css delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Web.Debug.config delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Web.Release.config delete mode 100644 DropNet.Samples/DropNet.Samples.Web/Web.config delete mode 100644 DropNet.Samples/DropNet.Samples.Web/packages.config delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/DropNet.Samples.WinForms.sln delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/DropNet.Samples.WinForms/DropNet.Samples.WinForms.csproj delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/DropNet.Samples.WinForms/Form1.Designer.cs delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/DropNet.Samples.WinForms/Form1.cs delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/DropNet.Samples.WinForms/Form1.resx delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/DropNet.Samples.WinForms/Program.cs delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/DropNet.Samples.WinForms/Properties/AssemblyInfo.cs delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/DropNet.Samples.WinForms/Properties/Resources.Designer.cs delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/DropNet.Samples.WinForms/Properties/Resources.resx delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/DropNet.Samples.WinForms/Properties/Settings.Designer.cs delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/DropNet.Samples.WinForms/Properties/Settings.settings delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/DropNet.Samples.WinForms/packages.config delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/packages/DropNet.1.9.3/DropNet.1.9.3.nupkg delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/packages/DropNet.1.9.3/lib/net35/DropNet.dll delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/packages/DropNet.1.9.3/lib/net35/RestSharp.dll delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/packages/DropNet.1.9.3/lib/sl4-wp71/DropNet.WindowsPhone.dll delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/packages/DropNet.1.9.3/lib/sl4-wp71/RestSharp.WindowsPhone.dll delete mode 100644 DropNet.Samples/DropNet.Samples.WinForms/packages/repositories.config delete mode 100644 DropNet.Samples/DropNet.Samples.sln delete mode 100644 DropNet.Samples/packages/DropNet.1.8.3/DropNet.1.8.3.nupkg delete mode 100644 DropNet.Samples/packages/DropNet.1.8.3/lib/net35/DropNet.dll delete mode 100644 DropNet.Samples/packages/DropNet.1.8.3/lib/net35/RestSharp.dll delete mode 100644 DropNet.Samples/packages/DropNet.1.8.3/lib/sl3-wp/DropNet.WindowsPhone.dll delete mode 100644 DropNet.Samples/packages/DropNet.1.8.3/lib/sl3-wp/RestSharp.WindowsPhone.dll delete mode 100644 DropNet.Samples/packages/DropNet.1.8.3/lib/sl4-wp71/DropNet.WindowsPhone.dll delete mode 100644 DropNet.Samples/packages/DropNet.1.8.3/lib/sl4-wp71/RestSharp.WindowsPhoneMango.dll delete mode 100644 DropNet.Samples/packages/Newtonsoft.Json.4.0.5/Newtonsoft.Json.4.0.5.nupkg delete mode 100644 DropNet.Samples/packages/Newtonsoft.Json.4.0.5/lib/net20/Newtonsoft.Json.dll delete mode 100644 DropNet.Samples/packages/Newtonsoft.Json.4.0.5/lib/net20/Newtonsoft.Json.xml delete mode 100644 DropNet.Samples/packages/Newtonsoft.Json.4.0.5/lib/net35/Newtonsoft.Json.dll delete mode 100644 DropNet.Samples/packages/Newtonsoft.Json.4.0.5/lib/net35/Newtonsoft.Json.xml delete mode 100644 DropNet.Samples/packages/Newtonsoft.Json.4.0.5/lib/net40/Newtonsoft.Json.dll delete mode 100644 DropNet.Samples/packages/Newtonsoft.Json.4.0.5/lib/net40/Newtonsoft.Json.xml delete mode 100644 DropNet.Samples/packages/Newtonsoft.Json.4.0.5/lib/sl3-wp/Newtonsoft.Json.dll delete mode 100644 DropNet.Samples/packages/Newtonsoft.Json.4.0.5/lib/sl3-wp/Newtonsoft.Json.xml delete mode 100644 DropNet.Samples/packages/Newtonsoft.Json.4.0.5/lib/sl4-windowsphone71/Newtonsoft.Json.dll delete mode 100644 DropNet.Samples/packages/Newtonsoft.Json.4.0.5/lib/sl4-windowsphone71/Newtonsoft.Json.xml delete mode 100644 DropNet.Samples/packages/Newtonsoft.Json.4.0.5/lib/sl4/Newtonsoft.Json.dll delete mode 100644 DropNet.Samples/packages/Newtonsoft.Json.4.0.5/lib/sl4/Newtonsoft.Json.xml delete mode 100644 DropNet.Samples/packages/repositories.config diff --git a/DropNet.Samples/DropNet.Samples.VB/App.config b/DropNet.Samples/DropNet.Samples.VB/App.config deleted file mode 100644 index 64f3722..0000000 --- a/DropNet.Samples/DropNet.Samples.VB/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/DropNet.Samples/DropNet.Samples.VB/DropNet.Samples.VB.vbproj b/DropNet.Samples/DropNet.Samples.VB/DropNet.Samples.VB.vbproj deleted file mode 100644 index 681dff9..0000000 --- a/DropNet.Samples/DropNet.Samples.VB/DropNet.Samples.VB.vbproj +++ /dev/null @@ -1,140 +0,0 @@ - - - - Debug - x86 - - - 2.0 - {87DEB9FD-4BD8-44A5-839E-E4FADE7E1AF5} - WinExe - DropNet.Samples.VB.My.MyApplication - DropNet.Samples.VB - DropNet.Samples.VB - 512 - WindowsForms - v4.0 - Client - - - x86 - true - full - true - true - bin\Debug\ - DropNet.Samples.VB.xml - 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 - - - x86 - pdbonly - false - true - true - bin\Release\ - DropNet.Samples.VB.xml - 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 - - - On - - - Binary - - - Off - - - On - - - - False - ..\packages\DropNet.1.8.3\lib\net35\DropNet.dll - - - False - ..\packages\Newtonsoft.Json.4.0.5\lib\net40\Newtonsoft.Json.dll - - - ..\packages\DropNet.1.8.3\lib\net35\RestSharp.dll - - - - - - - - - - - - - - - - - - - - - - - - - - Form - - - Form1.vb - Form - - - - True - Application.myapp - - - True - True - Resources.resx - - - True - Settings.settings - True - - - - - Form1.vb - - - VbMyResourcesResXFileCodeGenerator - Resources.Designer.vb - My.Resources - Designer - - - - - MyApplicationCodeGenerator - Application.Designer.vb - - - SettingsSingleFileGenerator - My - Settings.Designer.vb - - - - - - \ No newline at end of file diff --git a/DropNet.Samples/DropNet.Samples.VB/Form1.Designer.vb b/DropNet.Samples/DropNet.Samples.VB/Form1.Designer.vb deleted file mode 100644 index c5e8b58..0000000 --- a/DropNet.Samples/DropNet.Samples.VB/Form1.Designer.vb +++ /dev/null @@ -1,50 +0,0 @@ - _ -Partial Class Form1 - Inherits System.Windows.Forms.Form - - 'Form overrides dispose to clean up the component list. - _ - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - Try - If disposing AndAlso components IsNot Nothing Then - components.Dispose() - End If - Finally - MyBase.Dispose(disposing) - End Try - End Sub - - 'Required by the Windows Form Designer - Private components As System.ComponentModel.IContainer - - 'NOTE: The following procedure is required by the Windows Form Designer - 'It can be modified using the Windows Form Designer. - 'Do not modify it using the code editor. - _ - Private Sub InitializeComponent() - Me.Button1 = New System.Windows.Forms.Button() - Me.SuspendLayout() - ' - 'Button1 - ' - Me.Button1.Location = New System.Drawing.Point(12, 12) - Me.Button1.Name = "Button1" - Me.Button1.Size = New System.Drawing.Size(75, 23) - Me.Button1.TabIndex = 0 - Me.Button1.Text = "TEST" - Me.Button1.UseVisualStyleBackColor = True - ' - 'Form1 - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(284, 261) - Me.Controls.Add(Me.Button1) - Me.Name = "Form1" - Me.Text = "Form1" - Me.ResumeLayout(False) - - End Sub - Friend WithEvents Button1 As System.Windows.Forms.Button - -End Class diff --git a/DropNet.Samples/DropNet.Samples.VB/Form1.resx b/DropNet.Samples/DropNet.Samples.VB/Form1.resx deleted file mode 100644 index 1af7de1..0000000 --- a/DropNet.Samples/DropNet.Samples.VB/Form1.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/DropNet.Samples/DropNet.Samples.VB/Form1.vb b/DropNet.Samples/DropNet.Samples.VB/Form1.vb deleted file mode 100644 index dd7386d..0000000 --- a/DropNet.Samples/DropNet.Samples.VB/Form1.vb +++ /dev/null @@ -1,17 +0,0 @@ -Public Class Form1 - - Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click - Dim client As New DropNetClient("API", "SECRET") - - client.Account_InfoAsync(AddressOf AccountInfo_Success, AddressOf AccountInfo_Fail) - End Sub - - Private Sub AccountInfo_Success(accountInfo As DropNet.Models.AccountInfo) - 'Do something with accountInfo - End Sub - - Private Sub AccountInfo_Fail(ex As DropNet.Exceptions.DropboxException) - 'Failed to get AccountInfo - End Sub - -End Class diff --git a/DropNet.Samples/DropNet.Samples.VB/My Project/Application.Designer.vb b/DropNet.Samples/DropNet.Samples.VB/My Project/Application.Designer.vb deleted file mode 100644 index 41510ec..0000000 --- a/DropNet.Samples/DropNet.Samples.VB/My Project/Application.Designer.vb +++ /dev/null @@ -1,38 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' Runtime Version:4.0.30319.431 -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - -Option Strict On -Option Explicit On - - -Namespace My - - 'NOTE: This file is auto-generated; do not modify it directly. To make changes, - ' or if you encounter build errors in this file, go to the Project Designer - ' (go to Project Properties or double-click the My Project node in - ' Solution Explorer), and make changes on the Application tab. - ' - Partial Friend Class MyApplication - - _ - Public Sub New() - MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) - Me.IsSingleInstance = false - Me.EnableVisualStyles = true - Me.SaveMySettingsOnExit = true - Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses - End Sub - - _ - Protected Overrides Sub OnCreateMainForm() - Me.MainForm = Global.DropNet.Samples.VB.Form1 - End Sub - End Class -End Namespace diff --git a/DropNet.Samples/DropNet.Samples.VB/My Project/Application.myapp b/DropNet.Samples/DropNet.Samples.VB/My Project/Application.myapp deleted file mode 100644 index 1243847..0000000 --- a/DropNet.Samples/DropNet.Samples.VB/My Project/Application.myapp +++ /dev/null @@ -1,11 +0,0 @@ - - - true - Form1 - false - 0 - true - 0 - 0 - true - diff --git a/DropNet.Samples/DropNet.Samples.VB/My Project/AssemblyInfo.vb b/DropNet.Samples/DropNet.Samples.VB/My Project/AssemblyInfo.vb deleted file mode 100644 index 9692e65..0000000 --- a/DropNet.Samples/DropNet.Samples.VB/My Project/AssemblyInfo.vb +++ /dev/null @@ -1,35 +0,0 @@ -Imports System -Imports System.Reflection -Imports System.Runtime.InteropServices - -' General Information about an assembly is controlled through the following -' set of attributes. Change these attribute values to modify the information -' associated with an assembly. - -' Review the values of the assembly attributes - - - - - - - - - - -'The following GUID is for the ID of the typelib if this project is exposed to COM - - -' Version information for an assembly consists of the following four values: -' -' Major Version -' Minor Version -' Build Number -' Revision -' -' You can specify all the values or you can default the Build and Revision Numbers -' by using the '*' as shown below: -' - - - diff --git a/DropNet.Samples/DropNet.Samples.VB/My Project/Resources.Designer.vb b/DropNet.Samples/DropNet.Samples.VB/My Project/Resources.Designer.vb deleted file mode 100644 index acbecb3..0000000 --- a/DropNet.Samples/DropNet.Samples.VB/My Project/Resources.Designer.vb +++ /dev/null @@ -1,62 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' Runtime Version:4.0.30319.431 -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - -Option Strict On -Option Explicit On - - -Namespace My.Resources - - 'This class was auto-generated by the StronglyTypedResourceBuilder - 'class via a tool like ResGen or Visual Studio. - 'To add or remove a member, edit your .ResX file then rerun ResGen - 'with the /str option, or rebuild your VS project. - ''' - ''' A strongly-typed resource class, for looking up localized strings, etc. - ''' - _ - Friend Module Resources - - Private resourceMan As Global.System.Resources.ResourceManager - - Private resourceCulture As Global.System.Globalization.CultureInfo - - ''' - ''' Returns the cached ResourceManager instance used by this class. - ''' - _ - Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager - Get - If Object.ReferenceEquals(resourceMan, Nothing) Then - Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("DropNet.Samples.VB.Resources", GetType(Resources).Assembly) - resourceMan = temp - End If - Return resourceMan - End Get - End Property - - ''' - ''' Overrides the current thread's CurrentUICulture property for all - ''' resource lookups using this strongly typed resource class. - ''' - _ - Friend Property Culture() As Global.System.Globalization.CultureInfo - Get - Return resourceCulture - End Get - Set(ByVal value As Global.System.Globalization.CultureInfo) - resourceCulture = value - End Set - End Property - End Module -End Namespace diff --git a/DropNet.Samples/DropNet.Samples.VB/My Project/Resources.resx b/DropNet.Samples/DropNet.Samples.VB/My Project/Resources.resx deleted file mode 100644 index af7dbeb..0000000 --- a/DropNet.Samples/DropNet.Samples.VB/My Project/Resources.resx +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/DropNet.Samples/DropNet.Samples.VB/My Project/Settings.Designer.vb b/DropNet.Samples/DropNet.Samples.VB/My Project/Settings.Designer.vb deleted file mode 100644 index aba0e6f..0000000 --- a/DropNet.Samples/DropNet.Samples.VB/My Project/Settings.Designer.vb +++ /dev/null @@ -1,73 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' Runtime Version:4.0.30319.431 -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - -Option Strict On -Option Explicit On - - -Namespace My - - _ - Partial Friend NotInheritable Class MySettings - Inherits Global.System.Configuration.ApplicationSettingsBase - - Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) - -#Region "My.Settings Auto-Save Functionality" -#If _MyType = "WindowsForms" Then - Private Shared addedHandler As Boolean - - Private Shared addedHandlerLockObject As New Object - - _ - Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) - If My.Application.SaveMySettingsOnExit Then - My.Settings.Save() - End If - End Sub -#End If -#End Region - - Public Shared ReadOnly Property [Default]() As MySettings - Get - -#If _MyType = "WindowsForms" Then - If Not addedHandler Then - SyncLock addedHandlerLockObject - If Not addedHandler Then - AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings - addedHandler = True - End If - End SyncLock - End If -#End If - Return defaultInstance - End Get - End Property - End Class -End Namespace - -Namespace My - - _ - Friend Module MySettingsProperty - - _ - Friend ReadOnly Property Settings() As Global.DropNet.Samples.VB.My.MySettings - Get - Return Global.DropNet.Samples.VB.My.MySettings.Default - End Get - End Property - End Module -End Namespace diff --git a/DropNet.Samples/DropNet.Samples.VB/My Project/Settings.settings b/DropNet.Samples/DropNet.Samples.VB/My Project/Settings.settings deleted file mode 100644 index 85b890b..0000000 --- a/DropNet.Samples/DropNet.Samples.VB/My Project/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/DropNet.Samples/DropNet.Samples.VB/packages.config b/DropNet.Samples/DropNet.Samples.VB/packages.config deleted file mode 100644 index 68c0e92..0000000 --- a/DropNet.Samples/DropNet.Samples.VB/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/DropNet.Samples/DropNet.Samples.Web/About.aspx b/DropNet.Samples/DropNet.Samples.Web/About.aspx deleted file mode 100644 index 8856366..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/About.aspx +++ /dev/null @@ -1,13 +0,0 @@ -<%@ Page Title="About Us" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" - CodeBehind="About.aspx.cs" Inherits="DropNet.Samples.Web.About" %> - - - - -

    - About -

    -

    - Put content here. -

    -
    diff --git a/DropNet.Samples/DropNet.Samples.Web/About.aspx.cs b/DropNet.Samples/DropNet.Samples.Web/About.aspx.cs deleted file mode 100644 index 219edd4..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/About.aspx.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace DropNet.Samples.Web -{ - public partial class About : System.Web.UI.Page - { - protected void Page_Load(object sender, EventArgs e) - { - - } - } -} diff --git a/DropNet.Samples/DropNet.Samples.Web/About.aspx.designer.cs b/DropNet.Samples/DropNet.Samples.Web/About.aspx.designer.cs deleted file mode 100644 index 499d88b..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/About.aspx.designer.cs +++ /dev/null @@ -1,17 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace DropNet.Samples.Web -{ - - - public partial class About - { - } -} diff --git a/DropNet.Samples/DropNet.Samples.Web/Account/ChangePassword.aspx b/DropNet.Samples/DropNet.Samples.Web/Account/ChangePassword.aspx deleted file mode 100644 index 64f2eeb..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Account/ChangePassword.aspx +++ /dev/null @@ -1,60 +0,0 @@ -<%@ Page Title="Change Password" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" - CodeBehind="ChangePassword.aspx.cs" Inherits="DropNet.Samples.Web.Account.ChangePassword" %> - - - - -

    - Change Password -

    -

    - Use the form below to change your password. -

    -

    - New passwords are required to be a minimum of <%= Membership.MinRequiredPasswordLength %> characters in length. -

    - - - - - - -
    -
    - Account Information -

    - Old Password: - - * -

    -

    - New Password: - - * -

    -

    - Confirm New Password: - - * - * -

    -
    -

    - - -

    -
    -
    -
    -
    diff --git a/DropNet.Samples/DropNet.Samples.Web/Account/ChangePassword.aspx.cs b/DropNet.Samples/DropNet.Samples.Web/Account/ChangePassword.aspx.cs deleted file mode 100644 index 23f1772..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Account/ChangePassword.aspx.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace DropNet.Samples.Web.Account -{ - public partial class ChangePassword : System.Web.UI.Page - { - protected void Page_Load(object sender, EventArgs e) - { - - } - } -} diff --git a/DropNet.Samples/DropNet.Samples.Web/Account/ChangePassword.aspx.designer.cs b/DropNet.Samples/DropNet.Samples.Web/Account/ChangePassword.aspx.designer.cs deleted file mode 100644 index ebfec85..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Account/ChangePassword.aspx.designer.cs +++ /dev/null @@ -1,26 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace DropNet.Samples.Web.Account -{ - - - public partial class ChangePassword - { - - /// - /// ChangeUserPassword control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.ChangePassword ChangeUserPassword; - } -} diff --git a/DropNet.Samples/DropNet.Samples.Web/Account/ChangePasswordSuccess.aspx b/DropNet.Samples/DropNet.Samples.Web/Account/ChangePasswordSuccess.aspx deleted file mode 100644 index 125b845..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Account/ChangePasswordSuccess.aspx +++ /dev/null @@ -1,13 +0,0 @@ -<%@ Page Title="Change Password" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" - CodeBehind="ChangePasswordSuccess.aspx.cs" Inherits="DropNet.Samples.Web.Account.ChangePasswordSuccess" %> - - - - -

    - Change Password -

    -

    - Your password has been changed successfully. -

    -
    diff --git a/DropNet.Samples/DropNet.Samples.Web/Account/ChangePasswordSuccess.aspx.cs b/DropNet.Samples/DropNet.Samples.Web/Account/ChangePasswordSuccess.aspx.cs deleted file mode 100644 index 3b1b265..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Account/ChangePasswordSuccess.aspx.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace DropNet.Samples.Web.Account -{ - public partial class ChangePasswordSuccess : System.Web.UI.Page - { - protected void Page_Load(object sender, EventArgs e) - { - - } - } -} diff --git a/DropNet.Samples/DropNet.Samples.Web/Account/ChangePasswordSuccess.aspx.designer.cs b/DropNet.Samples/DropNet.Samples.Web/Account/ChangePasswordSuccess.aspx.designer.cs deleted file mode 100644 index 4e4a230..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Account/ChangePasswordSuccess.aspx.designer.cs +++ /dev/null @@ -1,17 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace DropNet.Samples.Web.Account -{ - - - public partial class ChangePasswordSuccess - { - } -} diff --git a/DropNet.Samples/DropNet.Samples.Web/Account/Login.aspx b/DropNet.Samples/DropNet.Samples.Web/Account/Login.aspx deleted file mode 100644 index ad00826..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Account/Login.aspx +++ /dev/null @@ -1,49 +0,0 @@ -<%@ Page Title="Log In" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" - CodeBehind="Login.aspx.cs" Inherits="DropNet.Samples.Web.Account.Login" %> - - - - -

    - Log In -

    -

    - Please enter your username and password. - Register if you don't have an account. -

    - - - - - - -
    - -

    - -

    -
    -
    -
    -
    diff --git a/DropNet.Samples/DropNet.Samples.Web/Account/Login.aspx.cs b/DropNet.Samples/DropNet.Samples.Web/Account/Login.aspx.cs deleted file mode 100644 index dbd3aec..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Account/Login.aspx.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace DropNet.Samples.Web.Account -{ - public partial class Login : System.Web.UI.Page - { - protected void Page_Load(object sender, EventArgs e) - { - RegisterHyperLink.NavigateUrl = "Register.aspx?ReturnUrl=" + HttpUtility.UrlEncode(Request.QueryString["ReturnUrl"]); - } - } -} diff --git a/DropNet.Samples/DropNet.Samples.Web/Account/Login.aspx.designer.cs b/DropNet.Samples/DropNet.Samples.Web/Account/Login.aspx.designer.cs deleted file mode 100644 index 11f4c23..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Account/Login.aspx.designer.cs +++ /dev/null @@ -1,35 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace DropNet.Samples.Web.Account -{ - - - public partial class Login - { - - /// - /// RegisterHyperLink control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.HyperLink RegisterHyperLink; - - /// - /// LoginUser control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Login LoginUser; - } -} diff --git a/DropNet.Samples/DropNet.Samples.Web/Account/Register.aspx b/DropNet.Samples/DropNet.Samples.Web/Account/Register.aspx deleted file mode 100644 index cbd8b17..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Account/Register.aspx +++ /dev/null @@ -1,75 +0,0 @@ -<%@ Page Title="Register" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" - CodeBehind="Register.aspx.cs" Inherits="DropNet.Samples.Web.Account.Register" %> - - - - - - - - - - - - -

    - Create a New Account -

    -

    - Use the form below to create a new account. -

    -

    - Passwords are required to be a minimum of <%= Membership.MinRequiredPasswordLength %> characters in length. -

    - - - - -
    -
    - Account Information -

    - User Name: - - * -

    -

    - E-mail: - - * -

    -

    - Password: - - * -

    -

    - Confirm Password: - - * - * -

    -
    -

    - -

    -
    -
    - - -
    -
    -
    -
    diff --git a/DropNet.Samples/DropNet.Samples.Web/Account/Register.aspx.cs b/DropNet.Samples/DropNet.Samples.Web/Account/Register.aspx.cs deleted file mode 100644 index 0ee3846..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Account/Register.aspx.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Security; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace DropNet.Samples.Web.Account -{ - public partial class Register : System.Web.UI.Page - { - - protected void Page_Load(object sender, EventArgs e) - { - RegisterUser.ContinueDestinationPageUrl = Request.QueryString["ReturnUrl"]; - } - - protected void RegisterUser_CreatedUser(object sender, EventArgs e) - { - FormsAuthentication.SetAuthCookie(RegisterUser.UserName, false /* createPersistentCookie */); - - string continueUrl = RegisterUser.ContinueDestinationPageUrl; - if (String.IsNullOrEmpty(continueUrl)) - { - continueUrl = "~/"; - } - Response.Redirect(continueUrl); - } - - } -} diff --git a/DropNet.Samples/DropNet.Samples.Web/Account/Register.aspx.designer.cs b/DropNet.Samples/DropNet.Samples.Web/Account/Register.aspx.designer.cs deleted file mode 100644 index ea3ed4b..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Account/Register.aspx.designer.cs +++ /dev/null @@ -1,35 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace DropNet.Samples.Web.Account -{ - - - public partial class Register - { - - /// - /// RegisterUser control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.CreateUserWizard RegisterUser; - - /// - /// RegisterUserWizardStep control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.CreateUserWizardStep RegisterUserWizardStep; - } -} diff --git a/DropNet.Samples/DropNet.Samples.Web/Account/Web.config b/DropNet.Samples/DropNet.Samples.Web/Account/Web.config deleted file mode 100644 index 84a802a..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Account/Web.config +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/DropNet.Samples/DropNet.Samples.Web/Default.aspx b/DropNet.Samples/DropNet.Samples.Web/Default.aspx deleted file mode 100644 index d7a97e7..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Default.aspx +++ /dev/null @@ -1,12 +0,0 @@ -<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" - CodeBehind="Default.aspx.cs" Inherits="DropNet.Samples.Web._Default" %> - - - - -

    - Click the button to start. -

    - - -
    diff --git a/DropNet.Samples/DropNet.Samples.Web/Default.aspx.cs b/DropNet.Samples/DropNet.Samples.Web/Default.aspx.cs deleted file mode 100644 index 4f568eb..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Default.aspx.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace DropNet.Samples.Web -{ - public partial class _Default : System.Web.UI.Page - { - //////////////////////////////////////////////////// - // NOTE: This key is a Development only key setup for this sample and will only work with my login. - // MAKE SURE YOU CHANGE IT OR IT WONT WORK! - //////////////////////////////////////////////////// - DropNetClient _client = new DropNetClient("9m6v782a7aeop0w", "dbd11uqce6hr8zg"); - - protected void Page_Load(object sender, EventArgs e) - { - if (Request.Params["dropboxcallback"] == "1") - { - //Its a callback from dropbox! - if (Session["DropNetUserLogin"] != null) - { - _client.UserLogin = Session["DropNetUserLogin"] as DropNet.Models.UserLogin; - Session["DropNetUserLogin"] = _client.GetAccessToken(); - - var accountinfo = _client.Account_Info(); - litOutput.Text = accountinfo.quota_info.quota.ToString(); - } - else - { - litOutput.Text = "Session expired..."; - } - } - } - - protected void btnStart_Click(object sender, EventArgs e) - { - Session["DropNetUserLogin"] = _client.GetToken(); - - var url = _client.BuildAuthorizeUrl(Request.Url.ToString() + "?dropboxcallback=1"); - - Response.Redirect(url); - } - } -} diff --git a/DropNet.Samples/DropNet.Samples.Web/Default.aspx.designer.cs b/DropNet.Samples/DropNet.Samples.Web/Default.aspx.designer.cs deleted file mode 100644 index 0678954..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Default.aspx.designer.cs +++ /dev/null @@ -1,33 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace DropNet.Samples.Web { - - - public partial class _Default { - - /// - /// litOutput control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Literal litOutput; - - /// - /// btnStart control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Button btnStart; - } -} diff --git a/DropNet.Samples/DropNet.Samples.Web/DropNet.Samples.Web.csproj b/DropNet.Samples/DropNet.Samples.Web/DropNet.Samples.Web.csproj deleted file mode 100644 index 8475674..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/DropNet.Samples.Web.csproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - Debug - AnyCPU - - - 2.0 - {0C9AB699-2554-46AE-82FC-5017BB675072} - {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - DropNet.Samples.Web - DropNet.Samples.Web - v4.0 - false - - - true - full - false - bin\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\ - TRACE - prompt - 4 - - - - ..\packages\DropNet.1.8.3\lib\net35\DropNet.dll - - - - ..\packages\Newtonsoft.Json.4.0.5\lib\net40\Newtonsoft.Json.dll - - - ..\packages\DropNet.1.8.3\lib\net35\RestSharp.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Web.config - - - Web.config - - - - - About.aspx - ASPXCodeBehind - - - About.aspx - - - ChangePassword.aspx - ASPXCodeBehind - - - ChangePassword.aspx - - - ChangePasswordSuccess.aspx - ASPXCodeBehind - - - ChangePasswordSuccess.aspx - - - Login.aspx - ASPXCodeBehind - - - Login.aspx - - - Register.aspx - ASPXCodeBehind - - - Register.aspx - - - Default.aspx - ASPXCodeBehind - - - Default.aspx - - - Global.asax - - - - Site.Master - ASPXCodeBehind - - - Site.Master - - - - - - - - - - - - - - - - - - - False - True - 61847 - / - - - False - False - - - False - - - - - - \ No newline at end of file diff --git a/DropNet.Samples/DropNet.Samples.Web/Global.asax b/DropNet.Samples/DropNet.Samples.Web/Global.asax deleted file mode 100644 index 2b61048..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Global.asax +++ /dev/null @@ -1 +0,0 @@ -<%@ Application Codebehind="Global.asax.cs" Inherits="DropNet.Samples.Web.Global" Language="C#" %> diff --git a/DropNet.Samples/DropNet.Samples.Web/Global.asax.cs b/DropNet.Samples/DropNet.Samples.Web/Global.asax.cs deleted file mode 100644 index 295ae04..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Global.asax.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Security; -using System.Web.SessionState; - -namespace DropNet.Samples.Web -{ - public class Global : System.Web.HttpApplication - { - - void Application_Start(object sender, EventArgs e) - { - // Code that runs on application startup - - } - - void Application_End(object sender, EventArgs e) - { - // Code that runs on application shutdown - - } - - void Application_Error(object sender, EventArgs e) - { - // Code that runs when an unhandled error occurs - - } - - void Session_Start(object sender, EventArgs e) - { - // Code that runs when a new session is started - - } - - void Session_End(object sender, EventArgs e) - { - // Code that runs when a session ends. - // Note: The Session_End event is raised only when the sessionstate mode - // is set to InProc in the Web.config file. If session mode is set to StateServer - // or SQLServer, the event is not raised. - - } - - } -} diff --git a/DropNet.Samples/DropNet.Samples.Web/Properties/AssemblyInfo.cs b/DropNet.Samples/DropNet.Samples.Web/Properties/AssemblyInfo.cs deleted file mode 100644 index 51de48b..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DropNet.Samples.Web")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("DropNet.Samples.Web")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("d6179f39-7cd5-4371-995b-b8cb2d0b5a0e")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/DropNet.Samples/DropNet.Samples.Web/Scripts/jquery-1.4.1-vsdoc.js b/DropNet.Samples/DropNet.Samples.Web/Scripts/jquery-1.4.1-vsdoc.js deleted file mode 100644 index 681241d..0000000 --- a/DropNet.Samples/DropNet.Samples.Web/Scripts/jquery-1.4.1-vsdoc.js +++ /dev/null @@ -1,8061 +0,0 @@ -/* - * This file has been commented to support Visual Studio Intellisense. - * You should not use this file at runtime inside the browser--it is only - * intended to be used only for design-time IntelliSense. Please use the - * standard jQuery library for all production use. - * - * Comment version: 1.4.1a - */ - -/*! - * jQuery JavaScript Library v1.4.1 - * http://jquery.com/ - * - * Distributed in whole under the terms of the MIT - * - * Copyright 2010, John Resig - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Mon Jan 25 19:43:33 2010 -0500 - */ - -(function( window, undefined ) { - -// Define a local copy of jQuery -var jQuery = function( selector, context ) { - /// - /// 1: $(expression, context) - This function accepts a string containing a CSS selector which is then used to match a set of elements. - /// 2: $(html) - Create DOM elements on-the-fly from the provided String of raw HTML. - /// 3: $(elements) - Wrap jQuery functionality around a single or multiple DOM Element(s). - /// 4: $(callback) - A shorthand for $(document).ready(). - /// 5: $() - As of jQuery 1.4, if you pass no arguments in to the jQuery() method, an empty jQuery set will be returned. - /// - /// - /// 1: expression - An expression to search with. - /// 2: html - A string of HTML to create on the fly. - /// 3: elements - DOM element(s) to be encapsulated by a jQuery object. - /// 4: callback - The function to execute when the DOM is ready. - /// - /// - /// 1: context - A DOM Element, Document or jQuery to use as context. - /// - /// - - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context ); - }, - - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$, - - // Use the correct document accordingly with window argument (sandbox) - document = window.document, - - // A central reference to the root jQuery(document) - rootjQuery, - - // A simple way to check for HTML strings or ID strings - // (both of which we optimize for) - quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/, - - // Is it a simple selector - isSimple = /^.[^:#\[\.,]*$/, - - // Check if a string has a non-whitespace character in it - rnotwhite = /\S/, - - // Used for trimming whitespace - rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g, - - // Match a standalone tag - rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, - - // Keep a UserAgent string for use with jQuery.browser - userAgent = navigator.userAgent, - - // For matching the engine and version of the browser - browserMatch, - - // Has the ready events already been bound? - readyBound = false, - - // The functions to execute on DOM ready - readyList = [], - - // The ready event handler - DOMContentLoaded, - - // Save a reference to some core methods - toString = Object.prototype.toString, - hasOwnProperty = Object.prototype.hasOwnProperty, - push = Array.prototype.push, - slice = Array.prototype.slice, - indexOf = Array.prototype.indexOf; - -jQuery.fn = jQuery.prototype = { - init: function( selector, context ) { - - var match, elem, ret, doc; - - // Handle $(""), $(null), or $(undefined) - if ( !selector ) { - return this; - } - - // Handle $(DOMElement) - if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - // Are we dealing with HTML string or an ID? - match = quickExpr.exec( selector ); - - // Verify a match, and that no context was specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - doc = (context ? context.ownerDocument || context : document); - - // If a single string is passed in and it's a single tag - // just do a createElement and skip the rest - ret = rsingleTag.exec( selector ); - - if ( ret ) { - if ( jQuery.isPlainObject( context ) ) { - selector = [ document.createElement( ret[1] ) ]; - jQuery.fn.attr.call( selector, context, true ); - - } else { - selector = [ doc.createElement( ret[1] ) ]; - } - - } else { - ret = buildFragment( [ match[1] ], [ doc ] ); - selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes; - } - - // HANDLE: $("#id") - } else { - elem = document.getElementById( match[2] ); - - if ( elem ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id !== match[2] ) { - return rootjQuery.find( selector ); - } - - // Otherwise, we inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $("TAG") - } else if ( !context && /^\w+$/.test( selector ) ) { - this.selector = selector; - this.context = document; - selector = document.getElementsByTagName( selector ); - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return (context || rootjQuery).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return jQuery( context ).find( selector ); - } - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return rootjQuery.ready( selector ); - } - - if (selector.selector !== undefined) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.isArray( selector ) ? - this.setArray( selector ) : - jQuery.makeArray( selector, this ); - }, - - // Start with an empty selector - selector: "", - - // The current version of jQuery being used - jquery: "1.4.1", - - // The default length of a jQuery object is 0 - length: 0, - - // The number of elements contained in the matched element set - size: function() { - /// - /// The number of elements currently matched. - /// Part of Core - /// - /// - - return this.length; - }, - - toArray: function() { - /// - /// Retrieve all the DOM elements contained in the jQuery set, as an array. - /// - /// - return slice.call( this, 0 ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - /// - /// Access a single matched element. num is used to access the - /// Nth element matched. - /// Part of Core - /// - /// - /// - /// Access the element in the Nth position. - /// - - return num == null ? - - // Return a 'clean' array - this.toArray() : - - // Return just the object - ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems, name, selector ) { - /// - /// Set the jQuery object to an array of elements, while maintaining - /// the stack. - /// Part of Core - /// - /// - /// - /// An array of elements - /// - - // Build a new jQuery matched element set - var ret = jQuery( elems || null ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - ret.context = this.context; - - if ( name === "find" ) { - ret.selector = this.selector + (this.selector ? " " : "") + selector; - } else if ( name ) { - ret.selector = this.selector + "." + name + "(" + selector + ")"; - } - - // Return the newly-formed element set - return ret; - }, - - // Force the current matched set of elements to become - // the specified array of elements (destroying the stack in the process) - // You should use pushStack() in order to do this, but maintain the stack - setArray: function( elems ) { - /// - /// Set the jQuery object to an array of elements. This operation is - /// completely destructive - be sure to use .pushStack() if you wish to maintain - /// the jQuery stack. - /// Part of Core - /// - /// - /// - /// An array of elements - /// - - // Resetting the length to 0, then using the native Array push - // is a super-fast way to populate an object with array-like properties - this.length = 0; - push.apply( this, elems ); - - return this; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - /// - /// Execute a function within the context of every matched element. - /// This means that every time the passed-in function is executed - /// (which is once for every element matched) the 'this' keyword - /// points to the specific element. - /// Additionally, the function, when executed, is passed a single - /// argument representing the position of the element in the matched - /// set. - /// Part of Core - /// - /// - /// - /// A function to execute - /// - - return jQuery.each( this, callback, args ); - }, - - ready: function( fn ) { - /// - /// Binds a function to be executed whenever the DOM is ready to be traversed and manipulated. - /// - /// The function to be executed when the DOM is ready. - - // Attach the listeners - jQuery.bindReady(); - - // If the DOM is already ready - if ( jQuery.isReady ) { - // Execute the function immediately - fn.call( document, jQuery ); - - // Otherwise, remember the function for later - } else if ( readyList ) { - // Add the function to the wait list - readyList.push( fn ); - } - - return this; - }, - - eq: function( i ) { - /// - /// Reduce the set of matched elements to a single element. - /// The position of the element in the set of matched elements - /// starts at 0 and goes to length - 1. - /// Part of Core - /// - /// - /// - /// pos The index of the element that you wish to limit to. - /// - - return i === -1 ? - this.slice( i ) : - this.slice( i, +i + 1 ); - }, - - first: function() { - /// - /// Reduce the set of matched elements to the first in the set. - /// - /// - - return this.eq( 0 ); - }, - - last: function() { - /// - /// Reduce the set of matched elements to the final one in the set. - /// - /// - - return this.eq( -1 ); - }, - - slice: function() { - /// - /// Selects a subset of the matched elements. Behaves exactly like the built-in Array slice method. - /// - /// Where to start the subset (0-based). - /// Where to end the subset (not including the end element itself). - /// If omitted, ends at the end of the selection - /// The sliced elements - - return this.pushStack( slice.apply( this, arguments ), - "slice", slice.call(arguments).join(",") ); - }, - - map: function( callback ) { - /// - /// This member is internal. - /// - /// - /// - - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - end: function() { - /// - /// End the most recent 'destructive' operation, reverting the list of matched elements - /// back to its previous state. After an end operation, the list of matched elements will - /// revert to the last state of matched elements. - /// If there was no destructive operation before, an empty set is returned. - /// Part of DOM/Traversing - /// - /// - - return this.prevObject || jQuery(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: [].sort, - splice: [].splice -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -jQuery.extend = jQuery.fn.extend = function() { - /// - /// Extend one object with one or more others, returning the original, - /// modified, object. This is a great utility for simple inheritance. - /// jQuery.extend(settings, options); - /// var settings = jQuery.extend({}, defaults, options); - /// Part of JavaScript - /// - /// - /// The object to extend - /// - /// - /// The object that will be merged into the first. - /// - /// - /// (optional) More objects to merge into the first - /// - /// - - // copy reference to target object - var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } - - // extend jQuery itself if only one argument is passed - if ( length === i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging object literal values or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) { - var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src - : jQuery.isArray(copy) ? [] : {}; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend({ - noConflict: function( deep ) { - /// - /// Run this function to give control of the $ variable back - /// to whichever library first implemented it. This helps to make - /// sure that jQuery doesn't conflict with the $ object - /// of other libraries. - /// By using this function, you will only be able to access jQuery - /// using the 'jQuery' variable. For example, where you used to do - /// $("div p"), you now must do jQuery("div p"). - /// Part of Core - /// - /// - - window.$ = _$; - - if ( deep ) { - window.jQuery = _jQuery; - } - - return jQuery; - }, - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // Handle when the DOM is ready - ready: function() { - /// - /// This method is internal. - /// - /// - - // Make sure that the DOM is not already loaded - if ( !jQuery.isReady ) { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( !document.body ) { - return setTimeout( jQuery.ready, 13 ); - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If there are functions bound, to execute - if ( readyList ) { - // Execute all of them - var fn, i = 0; - while ( (fn = readyList[ i++ ]) ) { - fn.call( document, jQuery ); - } - - // Reset the list of functions - readyList = null; - } - - // Trigger any bound ready events - if ( jQuery.fn.triggerHandler ) { - jQuery( document ).triggerHandler( "ready" ); - } - } - }, - - bindReady: function() { - if ( readyBound ) { - return; - } - - readyBound = true; - - // Catch cases where $(document).ready() is called after the - // browser event has already occurred. - if ( document.readyState === "complete" ) { - return jQuery.ready(); - } - - // Mozilla, Opera and webkit nightlies currently support this event - if ( document.addEventListener ) { - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", jQuery.ready, false ); - - // If IE event model is used - } else if ( document.attachEvent ) { - // ensure firing before onload, - // maybe late but safe also for iframes - document.attachEvent("onreadystatechange", DOMContentLoaded); - - // A fallback to window.onload, that will always work - window.attachEvent( "onload", jQuery.ready ); - - // If IE and not a frame - // continually check to see if the document is ready - var toplevel = false; - - try { - toplevel = window.frameElement == null; - } catch(e) {} - - if ( document.documentElement.doScroll && toplevel ) { - doScrollCheck(); - } - } - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - /// - /// Determines if the parameter passed is a function. - /// - /// The object to check - /// True if the parameter is a function; otherwise false. - - return toString.call(obj) === "[object Function]"; - }, - - isArray: function( obj ) { - /// - /// Determine if the parameter passed is an array. - /// - /// Object to test whether or not it is an array. - /// True if the parameter is a function; otherwise false. - - return toString.call(obj) === "[object Array]"; - }, - - isPlainObject: function( obj ) { - /// - /// Check to see if an object is a plain object (created using "{}" or "new Object"). - /// - /// - /// The object that will be checked to see if it's a plain object. - /// - /// - - // Must be an Object. - // Because of IE, we also have to check the presence of the constructor property. - // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) { - return false; - } - - // Not own constructor property must be Object - if ( obj.constructor - && !hasOwnProperty.call(obj, "constructor") - && !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) { - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - - var key; - for ( key in obj ) {} - - return key === undefined || hasOwnProperty.call( obj, key ); - }, - - isEmptyObject: function( obj ) { - /// - /// Check to see if an object is empty (contains no properties). - /// - /// - /// The object that will be checked to see if it's empty. - /// - /// - - for ( var name in obj ) { - return false; - } - return true; - }, - - error: function( msg ) { - throw msg; - }, - - parseJSON: function( data ) { - if ( typeof data !== "string" || !data ) { - return null; - } - - // Make sure the incoming data is actual JSON - // Logic borrowed from http://json.org/json2.js - if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") - .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") - .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) { - - // Try to use the native JSON parser first - return window.JSON && window.JSON.parse ? - window.JSON.parse( data ) : - (new Function("return " + data))(); - - } else { - jQuery.error( "Invalid JSON: " + data ); - } - }, - - noop: function() { - /// - /// An empty function. - /// - /// - }, - - // Evalulates a script in a global context - globalEval: function( data ) { - /// - /// Internally evaluates a script in a global context. - /// - /// - - if ( data && rnotwhite.test(data) ) { - // Inspired by code by Andrea Giammarchi - // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html - var head = document.getElementsByTagName("head")[0] || document.documentElement, - script = document.createElement("script"); - - script.type = "text/javascript"; - - if ( jQuery.support.scriptEval ) { - script.appendChild( document.createTextNode( data ) ); - } else { - script.text = data; - } - - // Use insertBefore instead of appendChild to circumvent an IE6 bug. - // This arises when a base node is used (#2709). - head.insertBefore( script, head.firstChild ); - head.removeChild( script ); - } - }, - - nodeName: function( elem, name ) { - /// - /// Checks whether the specified element has the specified DOM node name. - /// - /// The element to examine - /// The node name to check - /// True if the specified node name matches the node's DOM node name; otherwise false - - return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); - }, - - // args is for internal usage only - each: function( object, callback, args ) { - /// - /// A generic iterator function, which can be used to seemlessly - /// iterate over both objects and arrays. This function is not the same - /// as $().each() - which is used to iterate, exclusively, over a jQuery - /// object. This function can be used to iterate over anything. - /// The callback has two arguments:the key (objects) or index (arrays) as first - /// the first, and the value as the second. - /// Part of JavaScript - /// - /// - /// The object, or array, to iterate over. - /// - /// - /// The function that will be executed on every object. - /// - /// - - var name, i = 0, - length = object.length, - isObj = length === undefined || jQuery.isFunction(object); - - if ( args ) { - if ( isObj ) { - for ( name in object ) { - if ( callback.apply( object[ name ], args ) === false ) { - break; - } - } - } else { - for ( ; i < length; ) { - if ( callback.apply( object[ i++ ], args ) === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isObj ) { - for ( name in object ) { - if ( callback.call( object[ name ], name, object[ name ] ) === false ) { - break; - } - } - } else { - for ( var value = object[0]; - i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} - } - } - - return object; - }, - - trim: function( text ) { - /// - /// Remove the whitespace from the beginning and end of a string. - /// Part of JavaScript - /// - /// - /// - /// The string to trim. - /// - - return (text || "").replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( array, results ) { - /// - /// Turns anything into a true array. This is an internal method. - /// - /// Anything to turn into an actual Array - /// - /// - - var ret = results || []; - - if ( array != null ) { - // The window, strings (and functions) also have 'length' - // The extra typeof function check is to prevent crashes - // in Safari 2 (See: #3039) - if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) { - push.call( ret, array ); - } else { - jQuery.merge( ret, array ); - } - } - - return ret; - }, - - inArray: function( elem, array ) { - if ( array.indexOf ) { - return array.indexOf( elem ); - } - - for ( var i = 0, length = array.length; i < length; i++ ) { - if ( array[ i ] === elem ) { - return i; - } - } - - return -1; - }, - - merge: function( first, second ) { - /// - /// Merge two arrays together, removing all duplicates. - /// The new array is: All the results from the first array, followed - /// by the unique results from the second array. - /// Part of JavaScript - /// - /// - /// - /// The first array to merge. - /// - /// - /// The second array to merge. - /// - - var i = first.length, j = 0; - - if ( typeof second.length === "number" ) { - for ( var l = second.length; j < l; j++ ) { - first[ i++ ] = second[ j ]; - } - } else { - while ( second[j] !== undefined ) { - first[ i++ ] = second[ j++ ]; - } - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, inv ) { - /// - /// Filter items out of an array, by using a filter function. - /// The specified function will be passed two arguments: The - /// current array item and the index of the item in the array. The - /// function must return 'true' to keep the item in the array, - /// false to remove it. - /// }); - /// Part of JavaScript - /// - /// - /// - /// array The Array to find items in. - /// - /// - /// The function to process each item against. - /// - /// - /// Invert the selection - select the opposite of the function. - /// - - var ret = []; - - // Go through the array, only saving the items - // that pass the validator function - for ( var i = 0, length = elems.length; i < length; i++ ) { - if ( !inv !== !callback( elems[ i ], i ) ) { - ret.push( elems[ i ] ); - } - } - - return ret; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - /// - /// Translate all items in an array to another array of items. - /// The translation function that is provided to this method is - /// called for each item in the array and is passed one argument: - /// The item to be translated. - /// The function can then return the translated value, 'null' - /// (to remove the item), or an array of values - which will - /// be flattened into the full array. - /// Part of JavaScript - /// - /// - /// - /// array The Array to translate. - /// - /// - /// The function to process each item against. - /// - - var ret = [], value; - - // Go through the array, translating each of the items to their - // new value (or values). - for ( var i = 0, length = elems.length; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - - return ret.concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - proxy: function( fn, proxy, thisObject ) { - /// - /// Takes a function and returns a new one that will always have a particular scope. - /// - /// - /// The function whose scope will be changed. - /// - /// - /// The object to which the scope of the function should be set. - /// - /// - - if ( arguments.length === 2 ) { - if ( typeof proxy === "string" ) { - thisObject = fn; - fn = thisObject[ proxy ]; - proxy = undefined; - - } else if ( proxy && !jQuery.isFunction( proxy ) ) { - thisObject = proxy; - proxy = undefined; - } - } - - if ( !proxy && fn ) { - proxy = function() { - return fn.apply( thisObject || this, arguments ); - }; - } - - // Set the guid of unique handler to the same of original handler, so it can be removed - if ( fn ) { - proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; - } - - // So proxy can be declared as an argument - return proxy; - }, - - // Use of jQuery.browser is frowned upon. - // More details: http://docs.jquery.com/Utilities/jQuery.browser - uaMatch: function( ua ) { - ua = ua.toLowerCase(); - - var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) || - /(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) || - /(msie) ([\w.]+)/.exec( ua ) || - !/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) || - []; - - return { browser: match[1] || "", version: match[2] || "0" }; - }, - - browser: {} -}); - -browserMatch = jQuery.uaMatch( userAgent ); -if ( browserMatch.browser ) { - jQuery.browser[ browserMatch.browser ] = true; - jQuery.browser.version = browserMatch.version; -} - -// Deprecated, use jQuery.browser.webkit instead -if ( jQuery.browser.webkit ) { - jQuery.browser.safari = true; -} - -if ( indexOf ) { - jQuery.inArray = function( elem, array ) { - /// - /// Determines the index of the first parameter in the array. - /// - /// The value to see if it exists in the array. - /// The array to look through for the value - /// The 0-based index of the item if it was found, otherwise -1. - - return indexOf.call( array, elem ); - }; -} - -// All jQuery objects should point back to these -rootjQuery = jQuery(document); - -// Cleanup functions for the document ready method -if ( document.addEventListener ) { - DOMContentLoaded = function() { - document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - jQuery.ready(); - }; - -} else if ( document.attachEvent ) { - DOMContentLoaded = function() { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( document.readyState === "complete" ) { - document.detachEvent( "onreadystatechange", DOMContentLoaded ); - jQuery.ready(); - } - }; -} - -// The DOM ready check for Internet Explorer -function doScrollCheck() { - if ( jQuery.isReady ) { - return; - } - - try { - // If IE is used, use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - document.documentElement.doScroll("left"); - } catch( error ) { - setTimeout( doScrollCheck, 1 ); - return; - } - - // and execute any waiting functions - jQuery.ready(); -} - -function evalScript( i, elem ) { - /// - /// This method is internal. - /// - /// - - if ( elem.src ) { - jQuery.ajax({ - url: elem.src, - async: false, - dataType: "script" - }); - } else { - jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); - } - - if ( elem.parentNode ) { - elem.parentNode.removeChild( elem ); - } -} - -// Mutifunctional method to get and set values to a collection -// The value/s can be optionally by executed if its a function -function access( elems, key, value, exec, fn, pass ) { - var length = elems.length; - - // Setting many attributes - if ( typeof key === "object" ) { - for ( var k in key ) { - access( elems, k, key[k], exec, fn, value ); - } - return elems; - } - - // Setting one attribute - if ( value !== undefined ) { - // Optionally, function values get executed if exec is true - exec = !pass && exec && jQuery.isFunction(value); - - for ( var i = 0; i < length; i++ ) { - fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); - } - - return elems; - } - - // Getting an attribute - return length ? fn( elems[0], key ) : null; -} - -function now() { - /// - /// Gets the current date. - /// - /// The current date. - - return (new Date).getTime(); -} - -// [vsdoc] The following function has been modified for IntelliSense. -// [vsdoc] Stubbing support properties to "false" for IntelliSense compat. -(function() { - - jQuery.support = {}; - - // var root = document.documentElement, - // script = document.createElement("script"), - // div = document.createElement("div"), - // id = "script" + now(); - - // div.style.display = "none"; - // div.innerHTML = "
    a"; - - // var all = div.getElementsByTagName("*"), - // a = div.getElementsByTagName("a")[0]; - - // // Can't get basic test support - // if ( !all || !all.length || !a ) { - // return; - // } - - jQuery.support = { - // IE strips leading whitespace when .innerHTML is used - leadingWhitespace: false, - - // Make sure that tbody elements aren't automatically inserted - // IE will insert them into empty tables - tbody: false, - - // Make sure that link elements get serialized correctly by innerHTML - // This requires a wrapper element in IE - htmlSerialize: false, - - // Get the style information from getAttribute - // (IE uses .cssText insted) - style: false, - - // Make sure that URLs aren't manipulated - // (IE normalizes it by default) - hrefNormalized: false, - - // Make sure that element opacity exists - // (IE uses filter instead) - // Use a regex to work around a WebKit issue. See #5145 - opacity: false, - - // Verify style float existence - // (IE uses styleFloat instead of cssFloat) - cssFloat: false, - - // Make sure that if no value is specified for a checkbox - // that it defaults to "on". - // (WebKit defaults to "" instead) - checkOn: false, - - // Make sure that a selected-by-default option has a working selected property. - // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) - optSelected: false, - - // Will be defined later - checkClone: false, - scriptEval: false, - noCloneEvent: false, - boxModel: false - }; - - // script.type = "text/javascript"; - // try { - // script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); - // } catch(e) {} - - // root.insertBefore( script, root.firstChild ); - - // // Make sure that the execution of code works by injecting a script - // // tag with appendChild/createTextNode - // // (IE doesn't support this, fails, and uses .text instead) - // if ( window[ id ] ) { - // jQuery.support.scriptEval = true; - // delete window[ id ]; - // } - - // root.removeChild( script ); - - // if ( div.attachEvent && div.fireEvent ) { - // div.attachEvent("onclick", function click() { - // // Cloning a node shouldn't copy over any - // // bound event handlers (IE does this) - // jQuery.support.noCloneEvent = false; - // div.detachEvent("onclick", click); - // }); - // div.cloneNode(true).fireEvent("onclick"); - // } - - // div = document.createElement("div"); - // div.innerHTML = ""; - - // var fragment = document.createDocumentFragment(); - // fragment.appendChild( div.firstChild ); - - // // WebKit doesn't clone checked state correctly in fragments - // jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; - - // // Figure out if the W3C box model works as expected - // // document.body must exist before we can do this - // jQuery(function() { - // var div = document.createElement("div"); - // div.style.width = div.style.paddingLeft = "1px"; - - // document.body.appendChild( div ); - // jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; - // document.body.removeChild( div ).style.display = 'none'; - // div = null; - // }); - - // // Technique from Juriy Zaytsev - // // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ - // var eventSupported = function( eventName ) { - // var el = document.createElement("div"); - // eventName = "on" + eventName; - - // var isSupported = (eventName in el); - // if ( !isSupported ) { - // el.setAttribute(eventName, "return;"); - // isSupported = typeof el[eventName] === "function"; - // } - // el = null; - - // return isSupported; - // }; - - jQuery.support.submitBubbles = false; - jQuery.support.changeBubbles = false; - - // // release memory in IE - // root = script = div = all = a = null; -})(); - -jQuery.props = { - "for": "htmlFor", - "class": "className", - readonly: "readOnly", - maxlength: "maxLength", - cellspacing: "cellSpacing", - rowspan: "rowSpan", - colspan: "colSpan", - tabindex: "tabIndex", - usemap: "useMap", - frameborder: "frameBorder" -}; -var expando = "jQuery" + now(), uuid = 0, windowData = {}; -var emptyObject = {}; - -jQuery.extend({ - cache: {}, - - expando:expando, - - // The following elements throw uncatchable exceptions if you - // attempt to add expando properties to them. - noData: { - "embed": true, - "object": true, - "applet": true - }, - - data: function( elem, name, data ) { - /// - /// Store arbitrary data associated with the specified element. - /// - /// - /// The DOM element to associate with the data. - /// - /// - /// A string naming the piece of data to set. - /// - /// - /// The new data value. - /// - /// - - if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { - return; - } - - elem = elem == window ? - windowData : - elem; - - var id = elem[ expando ], cache = jQuery.cache, thisCache; - - // Handle the case where there's no name immediately - if ( !name && !id ) { - return null; - } - - // Compute a unique ID for the element - if ( !id ) { - id = ++uuid; - } - - // Avoid generating a new cache unless none exists and we - // want to manipulate it. - if ( typeof name === "object" ) { - elem[ expando ] = id; - thisCache = cache[ id ] = jQuery.extend(true, {}, name); - } else if ( cache[ id ] ) { - thisCache = cache[ id ]; - } else if ( typeof data === "undefined" ) { - thisCache = emptyObject; - } else { - thisCache = cache[ id ] = {}; - } - - // Prevent overriding the named cache with undefined values - if ( data !== undefined ) { - elem[ expando ] = id; - thisCache[ name ] = data; - } - - return typeof name === "string" ? thisCache[ name ] : thisCache; - }, - - removeData: function( elem, name ) { - if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { - return; - } - - elem = elem == window ? - windowData : - elem; - - var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ]; - - // If we want to remove a specific section of the element's data - if ( name ) { - if ( thisCache ) { - // Remove the section of cache data - delete thisCache[ name ]; - - // If we've removed all the data, remove the element's cache - if ( jQuery.isEmptyObject(thisCache) ) { - jQuery.removeData( elem ); - } - } - - // Otherwise, we want to remove all of the element's data - } else { - // Clean up the element expando - try { - delete elem[ expando ]; - } catch( e ) { - // IE has trouble directly removing the expando - // but it's ok with using removeAttribute - if ( elem.removeAttribute ) { - elem.removeAttribute( expando ); - } - } - - // Completely remove the data cache - delete cache[ id ]; - } - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - /// - /// Store arbitrary data associated with the matched elements. - /// - /// - /// A string naming the piece of data to set. - /// - /// - /// The new data value. - /// - /// - - if ( typeof key === "undefined" && this.length ) { - return jQuery.data( this[0] ); - - } else if ( typeof key === "object" ) { - return this.each(function() { - jQuery.data( this, key ); - }); - } - - var parts = key.split("."); - parts[1] = parts[1] ? "." + parts[1] : ""; - - if ( value === undefined ) { - var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); - - if ( data === undefined && this.length ) { - data = jQuery.data( this[0], key ); - } - return data === undefined && parts[1] ? - this.data( parts[0] ) : - data; - } else { - return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() { - jQuery.data( this, key, value ); - }); - } - }, - - removeData: function( key ) { - return this.each(function() { - jQuery.removeData( this, key ); - }); - } -}); -jQuery.extend({ - queue: function( elem, type, data ) { - if ( !elem ) { - return; - } - - type = (type || "fx") + "queue"; - var q = jQuery.data( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( !data ) { - return q || []; - } - - if ( !q || jQuery.isArray(data) ) { - q = jQuery.data( elem, type, jQuery.makeArray(data) ); - - } else { - q.push( data ); - } - - return q; - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), fn = queue.shift(); - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - } - - if ( fn ) { - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift("inprogress"); - } - - fn.call(elem, function() { - jQuery.dequeue(elem, type); - }); - } - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - /// - /// 1: queue() - Returns a reference to the first element's queue (which is an array of functions). - /// 2: queue(callback) - Adds a new function, to be executed, onto the end of the queue of all matched elements. - /// 3: queue(queue) - Replaces the queue of all matched element with this new queue (the array of functions). - /// - /// The function to add to the queue. - /// - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - } - - if ( data === undefined ) { - return jQuery.queue( this[0], type ); - } - return this.each(function( i, elem ) { - var queue = jQuery.queue( this, type, data ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - /// - /// Removes a queued function from the front of the queue and executes it. - /// - /// The type of queue to access. - /// - - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - - // Based off of the plugin by Clint Helfers, with permission. - // http://blindsignals.com/index.php/2009/07/jquery-delay/ - delay: function( time, type ) { - /// - /// Set a timer to delay execution of subsequent items in the queue. - /// - /// - /// An integer indicating the number of milliseconds to delay execution of the next item in the queue. - /// - /// - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// - /// - - time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; - type = type || "fx"; - - return this.queue( type, function() { - var elem = this; - setTimeout(function() { - jQuery.dequeue( elem, type ); - }, time ); - }); - }, - - clearQueue: function( type ) { - /// - /// Remove from the queue all items that have not yet been run. - /// - /// - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// - /// - - return this.queue( type || "fx", [] ); - } -}); -var rclass = /[\n\t]/g, - rspace = /\s+/, - rreturn = /\r/g, - rspecialurl = /href|src|style/, - rtype = /(button|input)/i, - rfocusable = /(button|input|object|select|textarea)/i, - rclickable = /^(a|area)$/i, - rradiocheck = /radio|checkbox/; - -jQuery.fn.extend({ - attr: function( name, value ) { - /// - /// Set a single property to a computed value, on all matched elements. - /// Instead of a value, a function is provided, that computes the value. - /// Part of DOM/Attributes - /// - /// - /// - /// The name of the property to set. - /// - /// - /// A function returning the value to set. - /// - - return access( this, name, value, true, jQuery.attr ); - }, - - removeAttr: function( name, fn ) { - /// - /// Remove an attribute from each of the matched elements. - /// Part of DOM/Attributes - /// - /// - /// An attribute to remove. - /// - /// - - return this.each(function(){ - jQuery.attr( this, name, "" ); - if ( this.nodeType === 1 ) { - this.removeAttribute( name ); - } - }); - }, - - addClass: function( value ) { - /// - /// Adds the specified class(es) to each of the set of matched elements. - /// Part of DOM/Attributes - /// - /// - /// One or more class names to be added to the class attribute of each matched element. - /// - /// - - if ( jQuery.isFunction(value) ) { - return this.each(function(i) { - var self = jQuery(this); - self.addClass( value.call(this, i, self.attr("class")) ); - }); - } - - if ( value && typeof value === "string" ) { - var classNames = (value || "").split( rspace ); - - for ( var i = 0, l = this.length; i < l; i++ ) { - var elem = this[i]; - - if ( elem.nodeType === 1 ) { - if ( !elem.className ) { - elem.className = value; - - } else { - var className = " " + elem.className + " "; - for ( var c = 0, cl = classNames.length; c < cl; c++ ) { - if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { - elem.className += " " + classNames[c]; - } - } - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - /// - /// Removes all or the specified class(es) from the set of matched elements. - /// Part of DOM/Attributes - /// - /// - /// (Optional) A class name to be removed from the class attribute of each matched element. - /// - /// - - if ( jQuery.isFunction(value) ) { - return this.each(function(i) { - var self = jQuery(this); - self.removeClass( value.call(this, i, self.attr("class")) ); - }); - } - - if ( (value && typeof value === "string") || value === undefined ) { - var classNames = (value || "").split(rspace); - - for ( var i = 0, l = this.length; i < l; i++ ) { - var elem = this[i]; - - if ( elem.nodeType === 1 && elem.className ) { - if ( value ) { - var className = (" " + elem.className + " ").replace(rclass, " "); - for ( var c = 0, cl = classNames.length; c < cl; c++ ) { - className = className.replace(" " + classNames[c] + " ", " "); - } - elem.className = className.substring(1, className.length - 1); - - } else { - elem.className = ""; - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - /// - /// Add or remove a class from each element in the set of matched elements, depending - /// on either the class's presence or the value of the switch argument. - /// - /// - /// A class name to be toggled for each element in the matched set. - /// - /// - /// A boolean value to determine whether the class should be added or removed. - /// - /// - - var type = typeof value, isBool = typeof stateVal === "boolean"; - - if ( jQuery.isFunction( value ) ) { - return this.each(function(i) { - var self = jQuery(this); - self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal ); - }); - } - - return this.each(function() { - if ( type === "string" ) { - // toggle individual class names - var className, i = 0, self = jQuery(this), - state = stateVal, - classNames = value.split( rspace ); - - while ( (className = classNames[ i++ ]) ) { - // check each className given, space seperated list - state = isBool ? state : !self.hasClass( className ); - self[ state ? "addClass" : "removeClass" ]( className ); - } - - } else if ( type === "undefined" || type === "boolean" ) { - if ( this.className ) { - // store className if set - jQuery.data( this, "__className__", this.className ); - } - - // toggle whole className - this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || ""; - } - }); - }, - - hasClass: function( selector ) { - /// - /// Checks the current selection against a class and returns whether at least one selection has a given class. - /// - /// The class to check against - /// True if at least one element in the selection has the class, otherwise false. - - var className = " " + selector + " "; - for ( var i = 0, l = this.length; i < l; i++ ) { - if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { - return true; - } - } - - return false; - }, - - val: function( value ) { - /// - /// Set the value of every matched element. - /// Part of DOM/Attributes - /// - /// - /// - /// A string of text or an array of strings to set as the value property of each - /// matched element. - /// - - if ( value === undefined ) { - var elem = this[0]; - - if ( elem ) { - if ( jQuery.nodeName( elem, "option" ) ) { - return (elem.attributes.value || {}).specified ? elem.value : elem.text; - } - - // We need to handle select boxes special - if ( jQuery.nodeName( elem, "select" ) ) { - var index = elem.selectedIndex, - values = [], - options = elem.options, - one = elem.type === "select-one"; - - // Nothing was selected - if ( index < 0 ) { - return null; - } - - // Loop through all the selected options - for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { - var option = options[ i ]; - - if ( option.selected ) { - // Get the specifc value for the option - value = jQuery(option).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - } - - // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified - if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { - return elem.getAttribute("value") === null ? "on" : elem.value; - } - - - // Everything else, we just grab the value - return (elem.value || "").replace(rreturn, ""); - - } - - return undefined; - } - - var isFunction = jQuery.isFunction(value); - - return this.each(function(i) { - var self = jQuery(this), val = value; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call(this, i, self.val()); - } - - // Typecast each time if the value is a Function and the appended - // value is therefore different each time. - if ( typeof val === "number" ) { - val += ""; - } - - if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) { - this.checked = jQuery.inArray( self.val(), val ) >= 0; - - } else if ( jQuery.nodeName( this, "select" ) ) { - var values = jQuery.makeArray(val); - - jQuery( "option", this ).each(function() { - this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; - }); - - if ( !values.length ) { - this.selectedIndex = -1; - } - - } else { - this.value = val; - } - }); - } -}); - -jQuery.extend({ - attrFn: { - val: true, - css: true, - html: true, - text: true, - data: true, - width: true, - height: true, - offset: true - }, - - attr: function( elem, name, value, pass ) { - /// - /// This method is internal. - /// - /// - - // don't set attributes on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { - return undefined; - } - - if ( pass && name in jQuery.attrFn ) { - return jQuery(elem)[name](value); - } - - var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ), - // Whether we are setting (or getting) - set = value !== undefined; - - // Try to normalize/fix the name - name = notxml && jQuery.props[ name ] || name; - - // Only do all the following if this is a node (faster for style) - if ( elem.nodeType === 1 ) { - // These attributes require special treatment - var special = rspecialurl.test( name ); - - // Safari mis-reports the default selected property of an option - // Accessing the parent's selectedIndex property fixes it - if ( name === "selected" && !jQuery.support.optSelected ) { - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - - // If applicable, access the attribute via the DOM 0 way - if ( name in elem && notxml && !special ) { - if ( set ) { - // We can't allow the type property to be changed (since it causes problems in IE) - if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { - jQuery.error( "type property can't be changed" ); - } - - elem[ name ] = value; - } - - // browsers index elements by id/name on forms, give priority to attributes. - if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { - return elem.getAttributeNode( name ).nodeValue; - } - - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - if ( name === "tabIndex" ) { - var attributeNode = elem.getAttributeNode( "tabIndex" ); - - return attributeNode && attributeNode.specified ? - attributeNode.value : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } - - return elem[ name ]; - } - - if ( !jQuery.support.style && notxml && name === "style" ) { - if ( set ) { - elem.style.cssText = "" + value; - } - - return elem.style.cssText; - } - - if ( set ) { - // convert the value to a string (all browsers do this but IE) see #1070 - elem.setAttribute( name, "" + value ); - } - - var attr = !jQuery.support.hrefNormalized && notxml && special ? - // Some attributes require a special call on IE - elem.getAttribute( name, 2 ) : - elem.getAttribute( name ); - - // Non-existent attributes return null, we normalize to undefined - return attr === null ? undefined : attr; - } - - // elem is actually elem.style ... set the style - // Using attr for specific style information is now deprecated. Use style insead. - return jQuery.style( elem, name, value ); - } -}); -var fcleanup = function( nm ) { - return nm.replace(/[^\w\s\.\|`]/g, function( ch ) { - return "\\" + ch; - }); -}; - -/* - * A number of helper functions used for managing events. - * Many of the ideas behind this code originated from - * Dean Edwards' addEvent library. - */ -jQuery.event = { - - // Bind an event to an element - // Original by Dean Edwards - add: function( elem, types, handler, data ) { - /// - /// This method is internal. - /// - /// - - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // For whatever reason, IE has trouble passing the window object - // around, causing it to be cloned in the process - if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) { - elem = window; - } - - // Make sure that the function being executed has a unique ID - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // if data is passed, bind to handler - if ( data !== undefined ) { - // Create temporary function pointer to original handler - var fn = handler; - - // Create unique handler function, wrapped around original handler - handler = jQuery.proxy( fn ); - - // Store data in unique handler - handler.data = data; - } - - // Init the element's event structure - var events = jQuery.data( elem, "events" ) || jQuery.data( elem, "events", {} ), - handle = jQuery.data( elem, "handle" ), eventHandle; - - if ( !handle ) { - eventHandle = function() { - // Handle the second event of a trigger and when - // an event is called after a page has unloaded - return typeof jQuery !== "undefined" && !jQuery.event.triggered ? - jQuery.event.handle.apply( eventHandle.elem, arguments ) : - undefined; - }; - - handle = jQuery.data( elem, "handle", eventHandle ); - } - - // If no handle is found then we must be trying to bind to one of the - // banned noData elements - if ( !handle ) { - return; - } - - // Add elem as a property of the handle function - // This is to prevent a memory leak with non-native - // event in IE. - handle.elem = elem; - - // Handle multiple events separated by a space - // jQuery(...).bind("mouseover mouseout", fn); - types = types.split( /\s+/ ); - - var type, i = 0; - - while ( (type = types[ i++ ]) ) { - // Namespaced event handlers - var namespaces = type.split("."); - type = namespaces.shift(); - - if ( i > 1 ) { - handler = jQuery.proxy( handler ); - - if ( data !== undefined ) { - handler.data = data; - } - } - - handler.type = namespaces.slice(0).sort().join("."); - - // Get the current list of functions bound to this event - var handlers = events[ type ], - special = this.special[ type ] || {}; - - // Init the event handler queue - if ( !handlers ) { - handlers = events[ type ] = {}; - - // Check for a special event handler - // Only use addEventListener/attachEvent if the special - // events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, handler) === false ) { - // Bind the global event handler to the element - if ( elem.addEventListener ) { - elem.addEventListener( type, handle, false ); - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, handle ); - } - } - } - - if ( special.add ) { - var modifiedHandler = special.add.call( elem, handler, data, namespaces, handlers ); - if ( modifiedHandler && jQuery.isFunction( modifiedHandler ) ) { - modifiedHandler.guid = modifiedHandler.guid || handler.guid; - modifiedHandler.data = modifiedHandler.data || handler.data; - modifiedHandler.type = modifiedHandler.type || handler.type; - handler = modifiedHandler; - } - } - - // Add the function to the element's handler list - handlers[ handler.guid ] = handler; - - // Keep track of which events have been used, for global triggering - this.global[ type ] = true; - } - - // Nullify elem to prevent memory leaks in IE - elem = null; - }, - - global: {}, - - // Detach an event or set of events from an element - remove: function( elem, types, handler ) { - /// - /// This method is internal. - /// - /// - - // don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - var events = jQuery.data( elem, "events" ), ret, type, fn; - - if ( events ) { - // Unbind all events for the element - if ( types === undefined || (typeof types === "string" && types.charAt(0) === ".") ) { - for ( type in events ) { - this.remove( elem, type + (types || "") ); - } - } else { - // types is actually an event object here - if ( types.type ) { - handler = types.handler; - types = types.type; - } - - // Handle multiple events separated by a space - // jQuery(...).unbind("mouseover mouseout", fn); - types = types.split(/\s+/); - var i = 0; - while ( (type = types[ i++ ]) ) { - // Namespaced event handlers - var namespaces = type.split("."); - type = namespaces.shift(); - var all = !namespaces.length, - cleaned = jQuery.map( namespaces.slice(0).sort(), fcleanup ), - namespace = new RegExp("(^|\\.)" + cleaned.join("\\.(?:.*\\.)?") + "(\\.|$)"), - special = this.special[ type ] || {}; - - if ( events[ type ] ) { - // remove the given handler for the given type - if ( handler ) { - fn = events[ type ][ handler.guid ]; - delete events[ type ][ handler.guid ]; - - // remove all handlers for the given type - } else { - for ( var handle in events[ type ] ) { - // Handle the removal of namespaced events - if ( all || namespace.test( events[ type ][ handle ].type ) ) { - delete events[ type ][ handle ]; - } - } - } - - if ( special.remove ) { - special.remove.call( elem, namespaces, fn); - } - - // remove generic event handler if no more handlers exist - for ( ret in events[ type ] ) { - break; - } - if ( !ret ) { - if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, jQuery.data( elem, "handle" ), false ); - } else if ( elem.detachEvent ) { - elem.detachEvent( "on" + type, jQuery.data( elem, "handle" ) ); - } - } - ret = null; - delete events[ type ]; - } - } - } - } - - // Remove the expando if it's no longer used - for ( ret in events ) { - break; - } - if ( !ret ) { - var handle = jQuery.data( elem, "handle" ); - if ( handle ) { - handle.elem = null; - } - jQuery.removeData( elem, "events" ); - jQuery.removeData( elem, "handle" ); - } - } - }, - - // bubbling is internal - trigger: function( event, data, elem /*, bubbling */ ) { - /// - /// This method is internal. - /// - /// - - // Event object or event type - var type = event.type || event, - bubbling = arguments[3]; - - if ( !bubbling ) { - event = typeof event === "object" ? - // jQuery.Event object - event[expando] ? event : - // Object literal - jQuery.extend( jQuery.Event(type), event ) : - // Just the event type (string) - jQuery.Event(type); - - if ( type.indexOf("!") >= 0 ) { - event.type = type = type.slice(0, -1); - event.exclusive = true; - } - - // Handle a global trigger - if ( !elem ) { - // Don't bubble custom events when global (to avoid too much overhead) - event.stopPropagation(); - - // Only trigger if we've ever bound an event for it - if ( this.global[ type ] ) { - jQuery.each( jQuery.cache, function() { - if ( this.events && this.events[type] ) { - jQuery.event.trigger( event, data, this.handle.elem ); - } - }); - } - } - - // Handle triggering a single element - - // don't do events on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { - return undefined; - } - - // Clean up in case it is reused - event.result = undefined; - event.target = elem; - - // Clone the incoming data, if any - data = jQuery.makeArray( data ); - data.unshift( event ); - } - - event.currentTarget = elem; - - // Trigger the event, it is assumed that "handle" is a function - var handle = jQuery.data( elem, "handle" ); - if ( handle ) { - handle.apply( elem, data ); - } - - var parent = elem.parentNode || elem.ownerDocument; - - // Trigger an inline bound script - try { - if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) { - if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) { - event.result = false; - } - } - - // prevent IE from throwing an error for some elements with some event types, see #3533 - } catch (e) {} - - if ( !event.isPropagationStopped() && parent ) { - jQuery.event.trigger( event, data, parent, true ); - - } else if ( !event.isDefaultPrevented() ) { - var target = event.target, old, - isClick = jQuery.nodeName(target, "a") && type === "click"; - - if ( !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { - try { - if ( target[ type ] ) { - // Make sure that we don't accidentally re-trigger the onFOO events - old = target[ "on" + type ]; - - if ( old ) { - target[ "on" + type ] = null; - } - - this.triggered = true; - target[ type ](); - } - - // prevent IE from throwing an error for some elements with some event types, see #3533 - } catch (e) {} - - if ( old ) { - target[ "on" + type ] = old; - } - - this.triggered = false; - } - } - }, - - handle: function( event ) { - /// - /// This method is internal. - /// - /// - - // returned undefined or false - var all, handlers; - - event = arguments[0] = jQuery.event.fix( event || window.event ); - event.currentTarget = this; - - // Namespaced event handlers - var namespaces = event.type.split("."); - event.type = namespaces.shift(); - - // Cache this now, all = true means, any handler - all = !namespaces.length && !event.exclusive; - - var namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)"); - - handlers = ( jQuery.data(this, "events") || {} )[ event.type ]; - - for ( var j in handlers ) { - var handler = handlers[ j ]; - - // Filter the functions by class - if ( all || namespace.test(handler.type) ) { - // Pass in a reference to the handler function itself - // So that we can later remove it - event.handler = handler; - event.data = handler.data; - - var ret = handler.apply( this, arguments ); - - if ( ret !== undefined ) { - event.result = ret; - if ( ret === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - - if ( event.isImmediatePropagationStopped() ) { - break; - } - - } - } - - return event.result; - }, - - props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), - - fix: function( event ) { - /// - /// This method is internal. - /// - /// - - if ( event[ expando ] ) { - return event; - } - - // store a copy of the original event object - // and "clone" to set read-only properties - var originalEvent = event; - event = jQuery.Event( originalEvent ); - - for ( var i = this.props.length, prop; i; ) { - prop = this.props[ --i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Fix target property, if necessary - if ( !event.target ) { - event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either - } - - // check if target is a textnode (safari) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && event.fromElement ) { - event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; - } - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && event.clientX != null ) { - var doc = document.documentElement, body = document.body; - event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); - event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); - } - - // Add which for key events - if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) { - event.which = event.charCode || event.keyCode; - } - - // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) - if ( !event.metaKey && event.ctrlKey ) { - event.metaKey = event.ctrlKey; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && event.button !== undefined ) { - event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); - } - - return event; - }, - - // Deprecated, use jQuery.guid instead - guid: 1E8, - - // Deprecated, use jQuery.proxy instead - proxy: jQuery.proxy, - - special: { - ready: { - // Make sure the ready event is setup - setup: jQuery.bindReady, - teardown: jQuery.noop - }, - - live: { - add: function( proxy, data, namespaces, live ) { - jQuery.extend( proxy, data || {} ); - - proxy.guid += data.selector + data.live; - data.liveProxy = proxy; - - jQuery.event.add( this, data.live, liveHandler, data ); - - }, - - remove: function( namespaces ) { - if ( namespaces.length ) { - var remove = 0, name = new RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)"); - - jQuery.each( (jQuery.data(this, "events").live || {}), function() { - if ( name.test(this.type) ) { - remove++; - } - }); - - if ( remove < 1 ) { - jQuery.event.remove( this, namespaces[0], liveHandler ); - } - } - }, - special: {} - }, - beforeunload: { - setup: function( data, namespaces, fn ) { - // We only want to do this special case on windows - if ( this.setInterval ) { - this.onbeforeunload = fn; - } - - return false; - }, - teardown: function( namespaces, fn ) { - if ( this.onbeforeunload === fn ) { - this.onbeforeunload = null; - } - } - } - } -}; - -jQuery.Event = function( src ) { - // Allow instantiation without the 'new' keyword - if ( !this.preventDefault ) { - return new jQuery.Event( src ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - // Event type - } else { - this.type = src; - } - - // timeStamp is buggy for some events on Firefox(#3843) - // So we won't rely on the native value - this.timeStamp = now(); - - // Mark it as fixed - this[ expando ] = true; -}; - -function returnFalse() { - return false; -} -function returnTrue() { - return true; -} - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - preventDefault: function() { - this.isDefaultPrevented = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - - // if preventDefault exists run it on the original event - if ( e.preventDefault ) { - e.preventDefault(); - } - // otherwise set the returnValue property of the original event to false (IE) - e.returnValue = false; - }, - stopPropagation: function() { - this.isPropagationStopped = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - // if stopPropagation exists run it on the original event - if ( e.stopPropagation ) { - e.stopPropagation(); - } - // otherwise set the cancelBubble property of the original event to true (IE) - e.cancelBubble = true; - }, - stopImmediatePropagation: function() { - this.isImmediatePropagationStopped = returnTrue; - this.stopPropagation(); - }, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse -}; - -// Checks if an event happened on an element within another element -// Used in jQuery.event.special.mouseenter and mouseleave handlers -var withinElement = function( event ) { - // Check if mouse(over|out) are still within the same parent element - var parent = event.relatedTarget; - - // Traverse up the tree - while ( parent && parent !== this ) { - // Firefox sometimes assigns relatedTarget a XUL element - // which we cannot access the parentNode property of - try { - parent = parent.parentNode; - - // assuming we've left the element since we most likely mousedover a xul element - } catch(e) { - break; - } - } - - if ( parent !== this ) { - // set the correct event type - event.type = event.data; - - // handle event if we actually just moused on to a non sub-element - jQuery.event.handle.apply( this, arguments ); - } - -}, - -// In case of event delegation, we only need to rename the event.type, -// liveHandler will take care of the rest. -delegate = function( event ) { - event.type = event.data; - jQuery.event.handle.apply( this, arguments ); -}; - -// Create mouseenter and mouseleave events -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - setup: function( data ) { - jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); - }, - teardown: function( data ) { - jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); - } - }; -}); - -// submit delegation -if ( !jQuery.support.submitBubbles ) { - -jQuery.event.special.submit = { - setup: function( data, namespaces, fn ) { - if ( this.nodeName.toLowerCase() !== "form" ) { - jQuery.event.add(this, "click.specialSubmit." + fn.guid, function( e ) { - var elem = e.target, type = elem.type; - - if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { - return trigger( "submit", this, arguments ); - } - }); - - jQuery.event.add(this, "keypress.specialSubmit." + fn.guid, function( e ) { - var elem = e.target, type = elem.type; - - if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { - return trigger( "submit", this, arguments ); - } - }); - - } else { - return false; - } - }, - - remove: function( namespaces, fn ) { - jQuery.event.remove( this, "click.specialSubmit" + (fn ? "."+fn.guid : "") ); - jQuery.event.remove( this, "keypress.specialSubmit" + (fn ? "."+fn.guid : "") ); - } -}; - -} - -// change delegation, happens here so we have bind. -if ( !jQuery.support.changeBubbles ) { - -var formElems = /textarea|input|select/i; - -function getVal( elem ) { - var type = elem.type, val = elem.value; - - if ( type === "radio" || type === "checkbox" ) { - val = elem.checked; - - } else if ( type === "select-multiple" ) { - val = elem.selectedIndex > -1 ? - jQuery.map( elem.options, function( elem ) { - return elem.selected; - }).join("-") : - ""; - - } else if ( elem.nodeName.toLowerCase() === "select" ) { - val = elem.selectedIndex; - } - - return val; -} - -function testChange( e ) { - var elem = e.target, data, val; - - if ( !formElems.test( elem.nodeName ) || elem.readOnly ) { - return; - } - - data = jQuery.data( elem, "_change_data" ); - val = getVal(elem); - - // the current data will be also retrieved by beforeactivate - if ( e.type !== "focusout" || elem.type !== "radio" ) { - jQuery.data( elem, "_change_data", val ); - } - - if ( data === undefined || val === data ) { - return; - } - - if ( data != null || val ) { - e.type = "change"; - return jQuery.event.trigger( e, arguments[1], elem ); - } -} - -jQuery.event.special.change = { - filters: { - focusout: testChange, - - click: function( e ) { - var elem = e.target, type = elem.type; - - if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) { - return testChange.call( this, e ); - } - }, - - // Change has to be called before submit - // Keydown will be called before keypress, which is used in submit-event delegation - keydown: function( e ) { - var elem = e.target, type = elem.type; - - if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") || - (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || - type === "select-multiple" ) { - return testChange.call( this, e ); - } - }, - - // Beforeactivate happens also before the previous element is blurred - // with this event you can't trigger a change event, but you can store - // information/focus[in] is not needed anymore - beforeactivate: function( e ) { - var elem = e.target; - - if ( elem.nodeName.toLowerCase() === "input" && elem.type === "radio" ) { - jQuery.data( elem, "_change_data", getVal(elem) ); - } - } - }, - setup: function( data, namespaces, fn ) { - for ( var type in changeFilters ) { - jQuery.event.add( this, type + ".specialChange." + fn.guid, changeFilters[type] ); - } - - return formElems.test( this.nodeName ); - }, - remove: function( namespaces, fn ) { - for ( var type in changeFilters ) { - jQuery.event.remove( this, type + ".specialChange" + (fn ? "."+fn.guid : ""), changeFilters[type] ); - } - - return formElems.test( this.nodeName ); - } -}; - -var changeFilters = jQuery.event.special.change.filters; - -} - -function trigger( type, elem, args ) { - args[0].type = type; - return jQuery.event.handle.apply( elem, args ); -} - -// Create "bubbling" focus and blur events -if ( document.addEventListener ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - jQuery.event.special[ fix ] = { - setup: function() { - /// - /// This method is internal. - /// - /// - - this.addEventListener( orig, handler, true ); - }, - teardown: function() { - /// - /// This method is internal. - /// - /// - - this.removeEventListener( orig, handler, true ); - } - }; - - function handler( e ) { - e = jQuery.event.fix( e ); - e.type = fix; - return jQuery.event.handle.call( this, e ); - } - }); -} - -// jQuery.each(["bind", "one"], function( i, name ) { -// jQuery.fn[ name ] = function( type, data, fn ) { -// // Handle object literals -// if ( typeof type === "object" ) { -// for ( var key in type ) { -// this[ name ](key, data, type[key], fn); -// } -// return this; -// } -// -// if ( jQuery.isFunction( data ) ) { -// fn = data; -// data = undefined; -// } -// -// var handler = name === "one" ? jQuery.proxy( fn, function( event ) { -// jQuery( this ).unbind( event, handler ); -// return fn.apply( this, arguments ); -// }) : fn; -// -// return type === "unload" && name !== "one" ? -// this.one( type, data, fn ) : -// this.each(function() { -// jQuery.event.add( this, type, handler, data ); -// }); -// }; -// }); - -jQuery.fn[ "bind" ] = function( type, data, fn ) { - /// - /// Binds a handler to one or more events for each matched element. Can also bind custom events. - /// - /// One or more event types separated by a space. Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error . - /// Additional data passed to the event handler as event.data - /// A function to bind to the event on each of the set of matched elements. function callback(eventObject) such that this corresponds to the dom element. - - // Handle object literals - if ( typeof type === "object" ) { - for ( var key in type ) { - this[ "bind" ](key, data, type[key], fn); - } - return this; - } - - if ( jQuery.isFunction( data ) ) { - fn = data; - data = undefined; - } - - var handler = "bind" === "one" ? jQuery.proxy( fn, function( event ) { - jQuery( this ).unbind( event, handler ); - return fn.apply( this, arguments ); - }) : fn; - - return type === "unload" && "bind" !== "one" ? - this.one( type, data, fn ) : - this.each(function() { - jQuery.event.add( this, type, handler, data ); - }); -}; - -jQuery.fn[ "one" ] = function( type, data, fn ) { - /// - /// Binds a handler to one or more events to be executed exactly once for each matched element. - /// - /// One or more event types separated by a space. Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error . - /// Additional data passed to the event handler as event.data - /// A function to bind to the event on each of the set of matched elements. function callback(eventObject) such that this corresponds to the dom element. - - // Handle object literals - if ( typeof type === "object" ) { - for ( var key in type ) { - this[ "one" ](key, data, type[key], fn); - } - return this; - } - - if ( jQuery.isFunction( data ) ) { - fn = data; - data = undefined; - } - - var handler = "one" === "one" ? jQuery.proxy( fn, function( event ) { - jQuery( this ).unbind( event, handler ); - return fn.apply( this, arguments ); - }) : fn; - - return type === "unload" && "one" !== "one" ? - this.one( type, data, fn ) : - this.each(function() { - jQuery.event.add( this, type, handler, data ); - }); -}; - -jQuery.fn.extend({ - unbind: function( type, fn ) { - /// - /// Unbinds a handler from one or more events for each matched element. - /// - /// One or more event types separated by a space. Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error . - /// A function to bind to the event on each of the set of matched elements. function callback(eventObject) such that this corresponds to the dom element. - - // Handle object literals - if ( typeof type === "object" && !type.preventDefault ) { - for ( var key in type ) { - this.unbind(key, type[key]); - } - return this; - } - - return this.each(function() { - jQuery.event.remove( this, type, fn ); - }); - }, - trigger: function( type, data ) { - /// - /// Triggers a type of event on every matched element. - /// - /// One or more event types separated by a space. Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error . - /// Additional data passed to the event handler as additional arguments. - /// This parameter is undocumented. - - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - - triggerHandler: function( type, data ) { - /// - /// Triggers all bound event handlers on an element for a specific event type without executing the browser's default actions. - /// - /// One or more event types separated by a space. Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error . - /// Additional data passed to the event handler as additional arguments. - /// This parameter is undocumented. - - if ( this[0] ) { - var event = jQuery.Event( type ); - event.preventDefault(); - event.stopPropagation(); - jQuery.event.trigger( event, data, this[0] ); - return event.result; - } - }, - - toggle: function( fn ) { - /// - /// Toggles among two or more function calls every other click. - /// - /// The functions among which to toggle execution - - // Save reference to arguments for access in closure - var args = arguments, i = 1; - - // link all the functions, so any of them can unbind this click handler - while ( i < args.length ) { - jQuery.proxy( fn, args[ i++ ] ); - } - - return this.click( jQuery.proxy( fn, function( event ) { - // Figure out which function to execute - var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i; - jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 ); - - // Make sure that clicks stop - event.preventDefault(); - - // and execute the function - return args[ lastToggle ].apply( this, arguments ) || false; - })); - }, - - hover: function( fnOver, fnOut ) { - /// - /// Simulates hovering (moving the mouse on or off of an object). - /// - /// The function to fire when the mouse is moved over a matched element. - /// The function to fire when the mouse is moved off of a matched element. - - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } -}); - -// jQuery.each(["live", "die"], function( i, name ) { -// jQuery.fn[ name ] = function( types, data, fn ) { -// var type, i = 0; -// -// if ( jQuery.isFunction( data ) ) { -// fn = data; -// data = undefined; -// } -// -// types = (types || "").split( /\s+/ ); -// -// while ( (type = types[ i++ ]) != null ) { -// type = type === "focus" ? "focusin" : // focus --> focusin -// type === "blur" ? "focusout" : // blur --> focusout -// type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support -// type; -// -// if ( name === "live" ) { -// // bind live handler -// jQuery( this.context ).bind( liveConvert( type, this.selector ), { -// data: data, selector: this.selector, live: type -// }, fn ); -// -// } else { -// // unbind live handler -// jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null ); -// } -// } -// -// return this; -// } -// }); - -jQuery.fn[ "live" ] = function( types, data, fn ) { - /// - /// Attach a handler to the event for all elements which match the current selector, now or - /// in the future. - /// - /// - /// A string containing a JavaScript event type, such as "click" or "keydown". - /// - /// - /// A map of data that will be passed to the event handler. - /// - /// - /// A function to execute at the time the event is triggered. - /// - /// - - var type, i = 0; - - if ( jQuery.isFunction( data ) ) { - fn = data; - data = undefined; - } - - types = (types || "").split( /\s+/ ); - - while ( (type = types[ i++ ]) != null ) { - type = type === "focus" ? "focusin" : // focus --> focusin - type === "blur" ? "focusout" : // blur --> focusout - type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support - type; - - if ( "live" === "live" ) { - // bind live handler - jQuery( this.context ).bind( liveConvert( type, this.selector ), { - data: data, selector: this.selector, live: type - }, fn ); - - } else { - // unbind live handler - jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null ); - } - } - - return this; -} - -jQuery.fn[ "die" ] = function( types, data, fn ) { - /// - /// Remove all event handlers previously attached using .live() from the elements. - /// - /// - /// A string containing a JavaScript event type, such as click or keydown. - /// - /// - /// The function that is to be no longer executed. - /// - /// - - var type, i = 0; - - if ( jQuery.isFunction( data ) ) { - fn = data; - data = undefined; - } - - types = (types || "").split( /\s+/ ); - - while ( (type = types[ i++ ]) != null ) { - type = type === "focus" ? "focusin" : // focus --> focusin - type === "blur" ? "focusout" : // blur --> focusout - type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support - type; - - if ( "die" === "live" ) { - // bind live handler - jQuery( this.context ).bind( liveConvert( type, this.selector ), { - data: data, selector: this.selector, live: type - }, fn ); - - } else { - // unbind live handler - jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null ); - } - } - - return this; -} - -function liveHandler( event ) { - var stop, elems = [], selectors = [], args = arguments, - related, match, fn, elem, j, i, l, data, - live = jQuery.extend({}, jQuery.data( this, "events" ).live); - - // Make sure we avoid non-left-click bubbling in Firefox (#3861) - if ( event.button && event.type === "click" ) { - return; - } - - for ( j in live ) { - fn = live[j]; - if ( fn.live === event.type || - fn.altLive && jQuery.inArray(event.type, fn.altLive) > -1 ) { - - data = fn.data; - if ( !(data.beforeFilter && data.beforeFilter[event.type] && - !data.beforeFilter[event.type](event)) ) { - selectors.push( fn.selector ); - } - } else { - delete live[j]; - } - } - - match = jQuery( event.target ).closest( selectors, event.currentTarget ); - - for ( i = 0, l = match.length; i < l; i++ ) { - for ( j in live ) { - fn = live[j]; - elem = match[i].elem; - related = null; - - if ( match[i].selector === fn.selector ) { - // Those two events require additional checking - if ( fn.live === "mouseenter" || fn.live === "mouseleave" ) { - related = jQuery( event.relatedTarget ).closest( fn.selector )[0]; - } - - if ( !related || related !== elem ) { - elems.push({ elem: elem, fn: fn }); - } - } - } - } - - for ( i = 0, l = elems.length; i < l; i++ ) { - match = elems[i]; - event.currentTarget = match.elem; - event.data = match.fn.data; - if ( match.fn.apply( match.elem, args ) === false ) { - stop = false; - break; - } - } - - return stop; -} - -function liveConvert( type, selector ) { - return "live." + (type ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&"); -} - -// jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + -// "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + -// "change select submit keydown keypress keyup error").split(" "), function( i, name ) { -// -// // Handle event binding -// jQuery.fn[ name ] = function( fn ) { -// return fn ? this.bind( name, fn ) : this.trigger( name ); -// }; -// -// if ( jQuery.attrFn ) { -// jQuery.attrFn[ name ] = true; -// } -// }); - -jQuery.fn[ "blur" ] = function( fn ) { - /// - /// 1: blur() - Triggers the blur event of each matched element. - /// 2: blur(fn) - Binds a function to the blur event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "blur", fn ) : this.trigger( "blur" ); -}; - -jQuery.fn[ "focus" ] = function( fn ) { - /// - /// 1: focus() - Triggers the focus event of each matched element. - /// 2: focus(fn) - Binds a function to the focus event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "focus", fn ) : this.trigger( "focus" ); -}; - -jQuery.fn[ "focusin" ] = function( fn ) { - /// - /// Bind an event handler to the "focusin" JavaScript event. - /// - /// - /// A function to execute each time the event is triggered. - /// - /// - - return fn ? this.bind( "focusin", fn ) : this.trigger( "focusin" ); -}; - -jQuery.fn[ "focusout" ] = function( fn ) { - /// - /// Bind an event handler to the "focusout" JavaScript event. - /// - /// - /// A function to execute each time the event is triggered. - /// - /// - - return fn ? this.bind( "focusout", fn ) : this.trigger( "focusout" ); -}; - -jQuery.fn[ "load" ] = function( fn ) { - /// - /// 1: load() - Triggers the load event of each matched element. - /// 2: load(fn) - Binds a function to the load event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "load", fn ) : this.trigger( "load" ); -}; - -jQuery.fn[ "resize" ] = function( fn ) { - /// - /// 1: resize() - Triggers the resize event of each matched element. - /// 2: resize(fn) - Binds a function to the resize event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "resize", fn ) : this.trigger( "resize" ); -}; - -jQuery.fn[ "scroll" ] = function( fn ) { - /// - /// 1: scroll() - Triggers the scroll event of each matched element. - /// 2: scroll(fn) - Binds a function to the scroll event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "scroll", fn ) : this.trigger( "scroll" ); -}; - -jQuery.fn[ "unload" ] = function( fn ) { - /// - /// 1: unload() - Triggers the unload event of each matched element. - /// 2: unload(fn) - Binds a function to the unload event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "unload", fn ) : this.trigger( "unload" ); -}; - -jQuery.fn[ "click" ] = function( fn ) { - /// - /// 1: click() - Triggers the click event of each matched element. - /// 2: click(fn) - Binds a function to the click event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "click", fn ) : this.trigger( "click" ); -}; - -jQuery.fn[ "dblclick" ] = function( fn ) { - /// - /// 1: dblclick() - Triggers the dblclick event of each matched element. - /// 2: dblclick(fn) - Binds a function to the dblclick event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "dblclick", fn ) : this.trigger( "dblclick" ); -}; - -jQuery.fn[ "mousedown" ] = function( fn ) { - /// - /// Binds a function to the mousedown event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "mousedown", fn ) : this.trigger( "mousedown" ); -}; - -jQuery.fn[ "mouseup" ] = function( fn ) { - /// - /// Bind a function to the mouseup event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "mouseup", fn ) : this.trigger( "mouseup" ); -}; - -jQuery.fn[ "mousemove" ] = function( fn ) { - /// - /// Bind a function to the mousemove event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "mousemove", fn ) : this.trigger( "mousemove" ); -}; - -jQuery.fn[ "mouseover" ] = function( fn ) { - /// - /// Bind a function to the mouseover event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "mouseover", fn ) : this.trigger( "mouseover" ); -}; - -jQuery.fn[ "mouseout" ] = function( fn ) { - /// - /// Bind a function to the mouseout event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "mouseout", fn ) : this.trigger( "mouseout" ); -}; - -jQuery.fn[ "mouseenter" ] = function( fn ) { - /// - /// Bind a function to the mouseenter event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "mouseenter", fn ) : this.trigger( "mouseenter" ); -}; - -jQuery.fn[ "mouseleave" ] = function( fn ) { - /// - /// Bind a function to the mouseleave event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "mouseleave", fn ) : this.trigger( "mouseleave" ); -}; - -jQuery.fn[ "change" ] = function( fn ) { - /// - /// 1: change() - Triggers the change event of each matched element. - /// 2: change(fn) - Binds a function to the change event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "change", fn ) : this.trigger( "change" ); -}; - -jQuery.fn[ "select" ] = function( fn ) { - /// - /// 1: select() - Triggers the select event of each matched element. - /// 2: select(fn) - Binds a function to the select event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "select", fn ) : this.trigger( "select" ); -}; - -jQuery.fn[ "submit" ] = function( fn ) { - /// - /// 1: submit() - Triggers the submit event of each matched element. - /// 2: submit(fn) - Binds a function to the submit event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "submit", fn ) : this.trigger( "submit" ); -}; - -jQuery.fn[ "keydown" ] = function( fn ) { - /// - /// 1: keydown() - Triggers the keydown event of each matched element. - /// 2: keydown(fn) - Binds a function to the keydown event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "keydown", fn ) : this.trigger( "keydown" ); -}; - -jQuery.fn[ "keypress" ] = function( fn ) { - /// - /// 1: keypress() - Triggers the keypress event of each matched element. - /// 2: keypress(fn) - Binds a function to the keypress event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "keypress", fn ) : this.trigger( "keypress" ); -}; - -jQuery.fn[ "keyup" ] = function( fn ) { - /// - /// 1: keyup() - Triggers the keyup event of each matched element. - /// 2: keyup(fn) - Binds a function to the keyup event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "keyup", fn ) : this.trigger( "keyup" ); -}; - -jQuery.fn[ "error" ] = function( fn ) { - /// - /// 1: error() - Triggers the error event of each matched element. - /// 2: error(fn) - Binds a function to the error event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "error", fn ) : this.trigger( "error" ); -}; - -// Prevent memory leaks in IE -// Window isn't included so as not to unbind existing unload events -// More info: -// - http://isaacschlueter.com/2006/10/msie-memory-leaks/ -if ( window.attachEvent && !window.addEventListener ) { - window.attachEvent("onunload", function() { - for ( var id in jQuery.cache ) { - if ( jQuery.cache[ id ].handle ) { - // Try/Catch is to handle iframes being unloaded, see #4280 - try { - jQuery.event.remove( jQuery.cache[ id ].handle.elem ); - } catch(e) {} - } - } - }); -} -/*! - * Sizzle CSS Selector Engine - v1.0 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){ - -var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, - done = 0, - toString = Object.prototype.toString, - hasDuplicate = false, - baseHasDuplicate = true; - -// Here we check if the JavaScript engine is using some sort of -// optimization where it does not always call our comparision -// function. If that is the case, discard the hasDuplicate value. -// Thus far that includes Google Chrome. -[0, 0].sort(function(){ - baseHasDuplicate = false; - return 0; -}); - -var Sizzle = function(selector, context, results, seed) { - results = results || []; - var origContext = context = context || document; - - if ( context.nodeType !== 1 && context.nodeType !== 9 ) { - return []; - } - - if ( !selector || typeof selector !== "string" ) { - return results; - } - - var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context), - soFar = selector; - - // Reset the position of the chunker regexp (start from head) - while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) { - soFar = m[3]; - - parts.push( m[1] ); - - if ( m[2] ) { - extra = m[3]; - break; - } - } - - if ( parts.length > 1 && origPOS.exec( selector ) ) { - if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { - set = posProcess( parts[0] + parts[1], context ); - } else { - set = Expr.relative[ parts[0] ] ? - [ context ] : - Sizzle( parts.shift(), context ); - - while ( parts.length ) { - selector = parts.shift(); - - if ( Expr.relative[ selector ] ) { - selector += parts.shift(); - } - - set = posProcess( selector, set ); - } - } - } else { - // Take a shortcut and set the context if the root selector is an ID - // (but not if it'll be faster if the inner selector is an ID) - if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && - Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { - var ret = Sizzle.find( parts.shift(), context, contextXML ); - context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; - } - - if ( context ) { - var ret = seed ? - { expr: parts.pop(), set: makeArray(seed) } : - Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); - set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; - - if ( parts.length > 0 ) { - checkSet = makeArray(set); - } else { - prune = false; - } - - while ( parts.length ) { - var cur = parts.pop(), pop = cur; - - if ( !Expr.relative[ cur ] ) { - cur = ""; - } else { - pop = parts.pop(); - } - - if ( pop == null ) { - pop = context; - } - - Expr.relative[ cur ]( checkSet, pop, contextXML ); - } - } else { - checkSet = parts = []; - } - } - - if ( !checkSet ) { - checkSet = set; - } - - if ( !checkSet ) { - Sizzle.error( cur || selector ); - } - - if ( toString.call(checkSet) === "[object Array]" ) { - if ( !prune ) { - results.push.apply( results, checkSet ); - } else if ( context && context.nodeType === 1 ) { - for ( var i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { - results.push( set[i] ); - } - } - } else { - for ( var i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && checkSet[i].nodeType === 1 ) { - results.push( set[i] ); - } - } - } - } else { - makeArray( checkSet, results ); - } - - if ( extra ) { - Sizzle( extra, origContext, results, seed ); - Sizzle.uniqueSort( results ); - } - - return results; -}; - -Sizzle.uniqueSort = function(results){ - /// - /// Removes all duplicate elements from an array of elements. - /// - /// The array to translate - /// The array after translation. - - if ( sortOrder ) { - hasDuplicate = baseHasDuplicate; - results.sort(sortOrder); - - if ( hasDuplicate ) { - for ( var i = 1; i < results.length; i++ ) { - if ( results[i] === results[i-1] ) { - results.splice(i--, 1); - } - } - } - } - - return results; -}; - -Sizzle.matches = function(expr, set){ - return Sizzle(expr, null, null, set); -}; - -Sizzle.find = function(expr, context, isXML){ - var set, match; - - if ( !expr ) { - return []; - } - - for ( var i = 0, l = Expr.order.length; i < l; i++ ) { - var type = Expr.order[i], match; - - if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { - var left = match[1]; - match.splice(1,1); - - if ( left.substr( left.length - 1 ) !== "\\" ) { - match[1] = (match[1] || "").replace(/\\/g, ""); - set = Expr.find[ type ]( match, context, isXML ); - if ( set != null ) { - expr = expr.replace( Expr.match[ type ], "" ); - break; - } - } - } - } - - if ( !set ) { - set = context.getElementsByTagName("*"); - } - - return {set: set, expr: expr}; -}; - -Sizzle.filter = function(expr, set, inplace, not){ - var old = expr, result = [], curLoop = set, match, anyFound, - isXMLFilter = set && set[0] && isXML(set[0]); - - while ( expr && set.length ) { - for ( var type in Expr.filter ) { - if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { - var filter = Expr.filter[ type ], found, item, left = match[1]; - anyFound = false; - - match.splice(1,1); - - if ( left.substr( left.length - 1 ) === "\\" ) { - continue; - } - - if ( curLoop === result ) { - result = []; - } - - if ( Expr.preFilter[ type ] ) { - match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); - - if ( !match ) { - anyFound = found = true; - } else if ( match === true ) { - continue; - } - } - - if ( match ) { - for ( var i = 0; (item = curLoop[i]) != null; i++ ) { - if ( item ) { - found = filter( item, match, i, curLoop ); - var pass = not ^ !!found; - - if ( inplace && found != null ) { - if ( pass ) { - anyFound = true; - } else { - curLoop[i] = false; - } - } else if ( pass ) { - result.push( item ); - anyFound = true; - } - } - } - } - - if ( found !== undefined ) { - if ( !inplace ) { - curLoop = result; - } - - expr = expr.replace( Expr.match[ type ], "" ); - - if ( !anyFound ) { - return []; - } - - break; - } - } - } - - // Improper expression - if ( expr === old ) { - if ( anyFound == null ) { - Sizzle.error( expr ); - } else { - break; - } - } - - old = expr; - } - - return curLoop; -}; - -Sizzle.error = function( msg ) { - throw "Syntax error, unrecognized expression: " + msg; -}; - -var Expr = Sizzle.selectors = { - order: [ "ID", "NAME", "TAG" ], - match: { - ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, - CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/, - NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/, - ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, - TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/, - CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, - POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, - PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ - }, - leftMatch: {}, - attrMap: { - "class": "className", - "for": "htmlFor" - }, - attrHandle: { - href: function(elem){ - return elem.getAttribute("href"); - } - }, - relative: { - "+": function(checkSet, part){ - var isPartStr = typeof part === "string", - isTag = isPartStr && !/\W/.test(part), - isPartStrNotTag = isPartStr && !isTag; - - if ( isTag ) { - part = part.toLowerCase(); - } - - for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { - if ( (elem = checkSet[i]) ) { - while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} - - checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? - elem || false : - elem === part; - } - } - - if ( isPartStrNotTag ) { - Sizzle.filter( part, checkSet, true ); - } - }, - ">": function(checkSet, part){ - var isPartStr = typeof part === "string"; - - if ( isPartStr && !/\W/.test(part) ) { - part = part.toLowerCase(); - - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - if ( elem ) { - var parent = elem.parentNode; - checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; - } - } - } else { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - if ( elem ) { - checkSet[i] = isPartStr ? - elem.parentNode : - elem.parentNode === part; - } - } - - if ( isPartStr ) { - Sizzle.filter( part, checkSet, true ); - } - } - }, - "": function(checkSet, part, isXML){ - var doneName = done++, checkFn = dirCheck; - - if ( typeof part === "string" && !/\W/.test(part) ) { - var nodeCheck = part = part.toLowerCase(); - checkFn = dirNodeCheck; - } - - checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); - }, - "~": function(checkSet, part, isXML){ - var doneName = done++, checkFn = dirCheck; - - if ( typeof part === "string" && !/\W/.test(part) ) { - var nodeCheck = part = part.toLowerCase(); - checkFn = dirNodeCheck; - } - - checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); - } - }, - find: { - ID: function(match, context, isXML){ - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - return m ? [m] : []; - } - }, - NAME: function(match, context){ - if ( typeof context.getElementsByName !== "undefined" ) { - var ret = [], results = context.getElementsByName(match[1]); - - for ( var i = 0, l = results.length; i < l; i++ ) { - if ( results[i].getAttribute("name") === match[1] ) { - ret.push( results[i] ); - } - } - - return ret.length === 0 ? null : ret; - } - }, - TAG: function(match, context){ - return context.getElementsByTagName(match[1]); - } - }, - preFilter: { - CLASS: function(match, curLoop, inplace, result, not, isXML){ - match = " " + match[1].replace(/\\/g, "") + " "; - - if ( isXML ) { - return match; - } - - for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { - if ( elem ) { - if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) { - if ( !inplace ) { - result.push( elem ); - } - } else if ( inplace ) { - curLoop[i] = false; - } - } - } - - return false; - }, - ID: function(match){ - return match[1].replace(/\\/g, ""); - }, - TAG: function(match, curLoop){ - return match[1].toLowerCase(); - }, - CHILD: function(match){ - if ( match[1] === "nth" ) { - // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' - var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( - match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || - !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); - - // calculate the numbers (first)n+(last) including if they are negative - match[2] = (test[1] + (test[2] || 1)) - 0; - match[3] = test[3] - 0; - } - - // TODO: Move to normal caching system - match[0] = done++; - - return match; - }, - ATTR: function(match, curLoop, inplace, result, not, isXML){ - var name = match[1].replace(/\\/g, ""); - - if ( !isXML && Expr.attrMap[name] ) { - match[1] = Expr.attrMap[name]; - } - - if ( match[2] === "~=" ) { - match[4] = " " + match[4] + " "; - } - - return match; - }, - PSEUDO: function(match, curLoop, inplace, result, not){ - if ( match[1] === "not" ) { - // If we're dealing with a complex expression, or a simple one - if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { - match[3] = Sizzle(match[3], null, null, curLoop); - } else { - var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); - if ( !inplace ) { - result.push.apply( result, ret ); - } - return false; - } - } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { - return true; - } - - return match; - }, - POS: function(match){ - match.unshift( true ); - return match; - } - }, - filters: { - enabled: function(elem){ - return elem.disabled === false && elem.type !== "hidden"; - }, - disabled: function(elem){ - return elem.disabled === true; - }, - checked: function(elem){ - return elem.checked === true; - }, - selected: function(elem){ - // Accessing this property makes selected-by-default - // options in Safari work properly - elem.parentNode.selectedIndex; - return elem.selected === true; - }, - parent: function(elem){ - return !!elem.firstChild; - }, - empty: function(elem){ - return !elem.firstChild; - }, - has: function(elem, i, match){ - /// - /// Internal use only; use hasClass('class') - /// - /// - - return !!Sizzle( match[3], elem ).length; - }, - header: function(elem){ - return /h\d/i.test( elem.nodeName ); - }, - text: function(elem){ - return "text" === elem.type; - }, - radio: function(elem){ - return "radio" === elem.type; - }, - checkbox: function(elem){ - return "checkbox" === elem.type; - }, - file: function(elem){ - return "file" === elem.type; - }, - password: function(elem){ - return "password" === elem.type; - }, - submit: function(elem){ - return "submit" === elem.type; - }, - image: function(elem){ - return "image" === elem.type; - }, - reset: function(elem){ - return "reset" === elem.type; - }, - button: function(elem){ - return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; - }, - input: function(elem){ - return /input|select|textarea|button/i.test(elem.nodeName); - } - }, - setFilters: { - first: function(elem, i){ - return i === 0; - }, - last: function(elem, i, match, array){ - return i === array.length - 1; - }, - even: function(elem, i){ - return i % 2 === 0; - }, - odd: function(elem, i){ - return i % 2 === 1; - }, - lt: function(elem, i, match){ - return i < match[3] - 0; - }, - gt: function(elem, i, match){ - return i > match[3] - 0; - }, - nth: function(elem, i, match){ - return match[3] - 0 === i; - }, - eq: function(elem, i, match){ - return match[3] - 0 === i; - } - }, - filter: { - PSEUDO: function(elem, match, i, array){ - var name = match[1], filter = Expr.filters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - } else if ( name === "contains" ) { - return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; - } else if ( name === "not" ) { - var not = match[3]; - - for ( var i = 0, l = not.length; i < l; i++ ) { - if ( not[i] === elem ) { - return false; - } - } - - return true; - } else { - Sizzle.error( "Syntax error, unrecognized expression: " + name ); - } - }, - CHILD: function(elem, match){ - var type = match[1], node = elem; - switch (type) { - case 'only': - case 'first': - while ( (node = node.previousSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - if ( type === "first" ) { - return true; - } - node = elem; - case 'last': - while ( (node = node.nextSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - return true; - case 'nth': - var first = match[2], last = match[3]; - - if ( first === 1 && last === 0 ) { - return true; - } - - var doneName = match[0], - parent = elem.parentNode; - - if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { - var count = 0; - for ( node = parent.firstChild; node; node = node.nextSibling ) { - if ( node.nodeType === 1 ) { - node.nodeIndex = ++count; - } - } - parent.sizcache = doneName; - } - - var diff = elem.nodeIndex - last; - if ( first === 0 ) { - return diff === 0; - } else { - return ( diff % first === 0 && diff / first >= 0 ); - } - } - }, - ID: function(elem, match){ - return elem.nodeType === 1 && elem.getAttribute("id") === match; - }, - TAG: function(elem, match){ - return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; - }, - CLASS: function(elem, match){ - return (" " + (elem.className || elem.getAttribute("class")) + " ") - .indexOf( match ) > -1; - }, - ATTR: function(elem, match){ - var name = match[1], - result = Expr.attrHandle[ name ] ? - Expr.attrHandle[ name ]( elem ) : - elem[ name ] != null ? - elem[ name ] : - elem.getAttribute( name ), - value = result + "", - type = match[2], - check = match[4]; - - return result == null ? - type === "!=" : - type === "=" ? - value === check : - type === "*=" ? - value.indexOf(check) >= 0 : - type === "~=" ? - (" " + value + " ").indexOf(check) >= 0 : - !check ? - value && result !== false : - type === "!=" ? - value !== check : - type === "^=" ? - value.indexOf(check) === 0 : - type === "$=" ? - value.substr(value.length - check.length) === check : - type === "|=" ? - value === check || value.substr(0, check.length + 1) === check + "-" : - false; - }, - POS: function(elem, match, i, array){ - var name = match[2], filter = Expr.setFilters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - } - } - } -}; - -var origPOS = Expr.match.POS; - -for ( var type in Expr.match ) { - Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); - Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){ - return "\\" + (num - 0 + 1); - })); -} - -var makeArray = function(array, results) { - array = Array.prototype.slice.call( array, 0 ); - - if ( results ) { - results.push.apply( results, array ); - return results; - } - - return array; -}; - -// Perform a simple check to determine if the browser is capable of -// converting a NodeList to an array using builtin methods. -try { - Array.prototype.slice.call( document.documentElement.childNodes, 0 ); - -// Provide a fallback method if it does not work -} catch(e){ - makeArray = function(array, results) { - var ret = results || []; - - if ( toString.call(array) === "[object Array]" ) { - Array.prototype.push.apply( ret, array ); - } else { - if ( typeof array.length === "number" ) { - for ( var i = 0, l = array.length; i < l; i++ ) { - ret.push( array[i] ); - } - } else { - for ( var i = 0; array[i]; i++ ) { - ret.push( array[i] ); - } - } - } - - return ret; - }; -} - -var sortOrder; - -if ( document.documentElement.compareDocumentPosition ) { - sortOrder = function( a, b ) { - if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { - if ( a == b ) { - hasDuplicate = true; - } - return a.compareDocumentPosition ? -1 : 1; - } - - var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; - if ( ret === 0 ) { - hasDuplicate = true; - } - return ret; - }; -} else if ( "sourceIndex" in document.documentElement ) { - sortOrder = function( a, b ) { - if ( !a.sourceIndex || !b.sourceIndex ) { - if ( a == b ) { - hasDuplicate = true; - } - return a.sourceIndex ? -1 : 1; - } - - var ret = a.sourceIndex - b.sourceIndex; - if ( ret === 0 ) { - hasDuplicate = true; - } - return ret; - }; -} else if ( document.createRange ) { - sortOrder = function( a, b ) { - if ( !a.ownerDocument || !b.ownerDocument ) { - if ( a == b ) { - hasDuplicate = true; - } - return a.ownerDocument ? -1 : 1; - } - - var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); - aRange.setStart(a, 0); - aRange.setEnd(a, 0); - bRange.setStart(b, 0); - bRange.setEnd(b, 0); - var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); - if ( ret === 0 ) { - hasDuplicate = true; - } - return ret; - }; -} - -// Utility function for retreiving the text value of an array of DOM nodes -function getText( elems ) { - var ret = "", elem; - - for ( var i = 0; elems[i]; i++ ) { - elem = elems[i]; - - // Get the text from text nodes and CDATA nodes - if ( elem.nodeType === 3 || elem.nodeType === 4 ) { - ret += elem.nodeValue; - - // Traverse everything else, except comment nodes - } else if ( elem.nodeType !== 8 ) { - ret += getText( elem.childNodes ); - } - } - - return ret; -} - -// [vsdoc] The following function has been modified for IntelliSense. -// Check to see if the browser returns elements by name when -// querying by getElementById (and provide a workaround) -(function(){ - // We're going to inject a fake input element with a specified name - // var form = document.createElement("div"), - // id = "script" + (new Date).getTime(); - // form.innerHTML = ""; - - // // Inject it into the root element, check its status, and remove it quickly - // var root = document.documentElement; - // root.insertBefore( form, root.firstChild ); - - // The workaround has to do additional checks after a getElementById - // Which slows things down for other browsers (hence the branching) - // if ( document.getElementById( id ) ) { - Expr.find.ID = function(match, context, isXML){ - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; - } - }; - - Expr.filter.ID = function(elem, match){ - var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); - return elem.nodeType === 1 && node && node.nodeValue === match; - }; - // } - - // root.removeChild( form ); - root = form = null; // release memory in IE -})(); - -// [vsdoc] The following function has been modified for IntelliSense. -(function(){ - // Check to see if the browser returns only elements - // when doing getElementsByTagName("*") - - // Create a fake element - // var div = document.createElement("div"); - // div.appendChild( document.createComment("") ); - - // Make sure no comments are found - // if ( div.getElementsByTagName("*").length > 0 ) { - Expr.find.TAG = function(match, context){ - var results = context.getElementsByTagName(match[1]); - - // Filter out possible comments - if ( match[1] === "*" ) { - var tmp = []; - - for ( var i = 0; results[i]; i++ ) { - if ( results[i].nodeType === 1 ) { - tmp.push( results[i] ); - } - } - - results = tmp; - } - - return results; - }; - // } - - // Check to see if an attribute returns normalized href attributes - // div.innerHTML = ""; - // if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && - // div.firstChild.getAttribute("href") !== "#" ) { - Expr.attrHandle.href = function(elem){ - return elem.getAttribute("href", 2); - }; - // } - - div = null; // release memory in IE -})(); - -if ( document.querySelectorAll ) { - (function(){ - var oldSizzle = Sizzle, div = document.createElement("div"); - div.innerHTML = "

    "; - - // Safari can't handle uppercase or unicode characters when - // in quirks mode. - if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { - return; - } - - Sizzle = function(query, context, extra, seed){ - context = context || document; - - // Only use querySelectorAll on non-XML documents - // (ID selectors don't work in non-HTML documents) - if ( !seed && context.nodeType === 9 && !isXML(context) ) { - try { - return makeArray( context.querySelectorAll(query), extra ); - } catch(e){} - } - - return oldSizzle(query, context, extra, seed); - }; - - for ( var prop in oldSizzle ) { - Sizzle[ prop ] = oldSizzle[ prop ]; - } - - div = null; // release memory in IE - })(); -} - -(function(){ - var div = document.createElement("div"); - - div.innerHTML = "
    "; - - // Opera can't find a second classname (in 9.6) - // Also, make sure that getElementsByClassName actually exists - if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { - return; - } - - // Safari caches class attributes, doesn't catch changes (in 3.2) - div.lastChild.className = "e"; - - if ( div.getElementsByClassName("e").length === 1 ) { - return; - } - - Expr.order.splice(1, 0, "CLASS"); - Expr.find.CLASS = function(match, context, isXML) { - if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { - return context.getElementsByClassName(match[1]); - } - }; - - div = null; // release memory in IE -})(); - -function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - if ( elem ) { - elem = elem[dir]; - var match = false; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 && !isXML ){ - elem.sizcache = doneName; - elem.sizset = i; - } - - if ( elem.nodeName.toLowerCase() === cur ) { - match = elem; - break; - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - if ( elem ) { - elem = elem[dir]; - var match = false; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 ) { - if ( !isXML ) { - elem.sizcache = doneName; - elem.sizset = i; - } - if ( typeof cur !== "string" ) { - if ( elem === cur ) { - match = true; - break; - } - - } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { - match = elem; - break; - } - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -var contains = document.compareDocumentPosition ? function(a, b){ - /// - /// Check to see if a DOM node is within another DOM node. - /// - /// - /// The DOM element that may contain the other element. - /// - /// - /// The DOM node that may be contained by the other element. - /// - /// - - return a.compareDocumentPosition(b) & 16; -} : function(a, b){ - /// - /// Check to see if a DOM node is within another DOM node. - /// - /// - /// The DOM element that may contain the other element. - /// - /// - /// The DOM node that may be contained by the other element. - /// - /// - - return a !== b && (a.contains ? a.contains(b) : true); -}; - -var isXML = function(elem){ - /// - /// Determines if the parameter passed is an XML document. - /// - /// The object to test - /// True if the parameter is an XML document; otherwise false. - - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -var posProcess = function(selector, context){ - var tmpSet = [], later = "", match, - root = context.nodeType ? [context] : context; - - // Position selectors must be done after the filter - // And so must :not(positional) so we move all PSEUDOs to the end - while ( (match = Expr.match.PSEUDO.exec( selector )) ) { - later += match[0]; - selector = selector.replace( Expr.match.PSEUDO, "" ); - } - - selector = Expr.relative[selector] ? selector + "*" : selector; - - for ( var i = 0, l = root.length; i < l; i++ ) { - Sizzle( selector, root[i], tmpSet ); - } - - return Sizzle.filter( later, tmpSet ); -}; - -// EXPOSE -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.filters; -jQuery.unique = Sizzle.uniqueSort; -jQuery.getText = getText; -jQuery.isXMLDoc = isXML; -jQuery.contains = contains; - -return; - -window.Sizzle = Sizzle; - -})(); -var runtil = /Until$/, - rparentsprev = /^(?:parents|prevUntil|prevAll)/, - // Note: This RegExp should be improved, or likely pulled from Sizzle - rmultiselector = /,/, - slice = Array.prototype.slice; - -// Implement the identical functionality for filter and not -var winnow = function( elements, qualifier, keep ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep(elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) === keep; - }); - - } else if ( qualifier.nodeType ) { - return jQuery.grep(elements, function( elem, i ) { - return (elem === qualifier) === keep; - }); - - } else if ( typeof qualifier === "string" ) { - var filtered = jQuery.grep(elements, function( elem ) { - return elem.nodeType === 1; - }); - - if ( isSimple.test( qualifier ) ) { - return jQuery.filter(qualifier, filtered, !keep); - } else { - qualifier = jQuery.filter( qualifier, filtered ); - } - } - - return jQuery.grep(elements, function( elem, i ) { - return (jQuery.inArray( elem, qualifier ) >= 0) === keep; - }); -}; - -jQuery.fn.extend({ - find: function( selector ) { - /// - /// Searches for all elements that match the specified expression. - /// This method is a good way to find additional descendant - /// elements with which to process. - /// All searching is done using a jQuery expression. The expression can be - /// written using CSS 1-3 Selector syntax, or basic XPath. - /// Part of DOM/Traversing - /// - /// - /// - /// An expression to search with. - /// - /// - - var ret = this.pushStack( "", "find", selector ), length = 0; - - for ( var i = 0, l = this.length; i < l; i++ ) { - length = ret.length; - jQuery.find( selector, this[i], ret ); - - if ( i > 0 ) { - // Make sure that the results are unique - for ( var n = length; n < ret.length; n++ ) { - for ( var r = 0; r < length; r++ ) { - if ( ret[r] === ret[n] ) { - ret.splice(n--, 1); - break; - } - } - } - } - } - - return ret; - }, - - has: function( target ) { - /// - /// Reduce the set of matched elements to those that have a descendant that matches the - /// selector or DOM element. - /// - /// - /// A string containing a selector expression to match elements against. - /// - /// - - var targets = jQuery( target ); - return this.filter(function() { - for ( var i = 0, l = targets.length; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - not: function( selector ) { - /// - /// Removes any elements inside the array of elements from the set - /// of matched elements. This method is used to remove one or more - /// elements from a jQuery object. - /// Part of DOM/Traversing - /// - /// - /// A set of elements to remove from the jQuery set of matched elements. - /// - /// - - return this.pushStack( winnow(this, selector, false), "not", selector); - }, - - filter: function( selector ) { - /// - /// Removes all elements from the set of matched elements that do not - /// pass the specified filter. This method is used to narrow down - /// the results of a search. - /// }) - /// Part of DOM/Traversing - /// - /// - /// - /// A function to use for filtering - /// - /// - - return this.pushStack( winnow(this, selector, true), "filter", selector ); - }, - - is: function( selector ) { - /// - /// Checks the current selection against an expression and returns true, - /// if at least one element of the selection fits the given expression. - /// Does return false, if no element fits or the expression is not valid. - /// filter(String) is used internally, therefore all rules that apply there - /// apply here, too. - /// Part of DOM/Traversing - /// - /// - /// - /// The expression with which to filter - /// - - return !!selector && jQuery.filter( selector, this ).length > 0; - }, - - closest: function( selectors, context ) { - /// - /// Get a set of elements containing the closest parent element that matches the specified selector, the starting element included. - /// - /// - /// A string containing a selector expression to match elements against. - /// - /// - /// A DOM element within which a matching element may be found. If no context is passed - /// in then the context of the jQuery set will be used instead. - /// - /// - - if ( jQuery.isArray( selectors ) ) { - var ret = [], cur = this[0], match, matches = {}, selector; - - if ( cur && selectors.length ) { - for ( var i = 0, l = selectors.length; i < l; i++ ) { - selector = selectors[i]; - - if ( !matches[selector] ) { - matches[selector] = jQuery.expr.match.POS.test( selector ) ? - jQuery( selector, context || this.context ) : - selector; - } - } - - while ( cur && cur.ownerDocument && cur !== context ) { - for ( selector in matches ) { - match = matches[selector]; - - if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) { - ret.push({ selector: selector, elem: cur }); - delete matches[selector]; - } - } - cur = cur.parentNode; - } - } - - return ret; - } - - var pos = jQuery.expr.match.POS.test( selectors ) ? - jQuery( selectors, context || this.context ) : null; - - return this.map(function( i, cur ) { - while ( cur && cur.ownerDocument && cur !== context ) { - if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) { - return cur; - } - cur = cur.parentNode; - } - return null; - }); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - /// - /// Searches every matched element for the object and returns - /// the index of the element, if found, starting with zero. - /// Returns -1 if the object wasn't found. - /// Part of Core - /// - /// - /// - /// Object to search for - /// - - if ( !elem || typeof elem === "string" ) { - return jQuery.inArray( this[0], - // If it receives a string, the selector is used - // If it receives nothing, the siblings are used - elem ? jQuery( elem ) : this.parent().children() ); - } - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[0] : elem, this ); - }, - - add: function( selector, context ) { - /// - /// Adds one or more Elements to the set of matched elements. - /// Part of DOM/Traversing - /// - /// - /// A string containing a selector expression to match additional elements against. - /// - /// - /// Add some elements rooted against the specified context. - /// - /// - - var set = typeof selector === "string" ? - jQuery( selector, context || this.context ) : - jQuery.makeArray( selector ), - all = jQuery.merge( this.get(), set ); - - return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? - all : - jQuery.unique( all ) ); - }, - - andSelf: function() { - /// - /// Adds the previous selection to the current selection. - /// - /// - - return this.add( this.prevObject ); - } -}); - -// A painfully simple check to see if an element is disconnected -// from a document (should be improved, where feasible). -function isDisconnected( node ) { - return !node || !node.parentNode || node.parentNode.nodeType === 11; -} - -jQuery.each({ - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); - }, - next: function( elem ) { - return jQuery.nth( elem, 2, "nextSibling" ); - }, - prev: function( elem ) { - return jQuery.nth( elem, 2, "previousSibling" ); - }, - nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); - }, - siblings: function( elem ) { - return jQuery.sibling( elem.parentNode.firstChild, elem ); - }, - children: function( elem ) { - return jQuery.sibling( elem.firstChild ); - }, - contents: function( elem ) { - return jQuery.nodeName( elem, "iframe" ) ? - elem.contentDocument || elem.contentWindow.document : - jQuery.makeArray( elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var ret = jQuery.map( this, fn, until ); - - if ( !runtil.test( name ) ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - ret = this.length > 1 ? jQuery.unique( ret ) : ret; - - if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { - ret = ret.reverse(); - } - - return this.pushStack( ret, name, slice.call(arguments).join(",") ); - }; -}); - -jQuery.fn[ "parentsUntil" ] = function( until, selector ) { - /// - /// Get the ancestors of each element in the current set of matched elements, up to but not - /// including the element matched by the selector. - /// - /// - /// A string containing a selector expression to indicate where to stop matching ancestor - /// elements. - /// - /// - - var fn = function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - } - - var ret = jQuery.map( this, fn, until ); - - if ( !runtil.test( "parentsUntil" ) ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - ret = this.length > 1 ? jQuery.unique( ret ) : ret; - - if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( "parentsUntil" ) ) { - ret = ret.reverse(); - } - - return this.pushStack( ret, "parentsUntil", slice.call(arguments).join(",") ); -}; - -jQuery.fn[ "nextUntil" ] = function( until, selector ) { - /// - /// Get all following siblings of each element up to but not including the element matched - /// by the selector. - /// - /// - /// A string containing a selector expression to indicate where to stop matching following - /// sibling elements. - /// - /// - - var fn = function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - } - - var ret = jQuery.map( this, fn, until ); - - if ( !runtil.test( "nextUntil" ) ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - ret = this.length > 1 ? jQuery.unique( ret ) : ret; - - if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( "nextUntil" ) ) { - ret = ret.reverse(); - } - - return this.pushStack( ret, "nextUntil", slice.call(arguments).join(",") ); -}; - -jQuery.fn[ "prevUntil" ] = function( until, selector ) { - /// - /// Get all preceding siblings of each element up to but not including the element matched - /// by the selector. - /// - /// - /// A string containing a selector expression to indicate where to stop matching preceding - /// sibling elements. - /// - /// - - var fn = function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - } - - var ret = jQuery.map( this, fn, until ); - - if ( !runtil.test( "prevUntil" ) ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - ret = this.length > 1 ? jQuery.unique( ret ) : ret; - - if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( "prevUntil" ) ) { - ret = ret.reverse(); - } - - return this.pushStack( ret, "prevUntil", slice.call(arguments).join(",") ); -}; - -jQuery.extend({ - filter: function( expr, elems, not ) { - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return jQuery.find.matches(expr, elems); - }, - - dir: function( elem, dir, until ) { - /// - /// This member is internal only. - /// - /// - - var matched = [], cur = elem[dir]; - while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { - if ( cur.nodeType === 1 ) { - matched.push( cur ); - } - cur = cur[dir]; - } - return matched; - }, - - nth: function( cur, result, dir, elem ) { - /// - /// This member is internal only. - /// - /// - - result = result || 1; - var num = 0; - - for ( ; cur; cur = cur[dir] ) { - if ( cur.nodeType === 1 && ++num === result ) { - break; - } - } - - return cur; - }, - - sibling: function( n, elem ) { - /// - /// This member is internal only. - /// - /// - - var r = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - r.push( n ); - } - } - - return r; - } -}); -var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, - rleadingWhitespace = /^\s+/, - rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g, - rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i, - rtagName = /<([\w:]+)/, - rtbody = /"; - }, - wrapMap = { - option: [ 1, "" ], - legend: [ 1, "
    ", "
    " ], - thead: [ 1, "", "
    " ], - tr: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - col: [ 2, "", "
    " ], - area: [ 1, "", "" ], - _default: [ 0, "", "" ] - }; - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// IE can't serialize and