diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index fa6867c17..984b9ca9b 100644 --- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -81,6 +81,7 @@ + diff --git a/NzbDrone.Core.Test/ProviderTests/GrowlProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/GrowlProviderTest.cs new file mode 100644 index 000000000..a7586aa7f --- /dev/null +++ b/NzbDrone.Core.Test/ProviderTests/GrowlProviderTest.cs @@ -0,0 +1,73 @@ +using System; +using AutoMoq; +using FizzWare.NBuilder; +using FluentAssertions; +using Moq; +using NUnit.Framework; +using NzbDrone.Core.Model; +using NzbDrone.Core.Providers; +using NzbDrone.Core.Repository; +using NzbDrone.Core.Repository.Quality; +using NzbDrone.Core.Test.Framework; + +// ReSharper disable InconsistentNaming + +namespace NzbDrone.Core.Test.ProviderTests +{ + [Explicit] + [TestFixture] + public class GrowlProviderTest : TestBase + { + [Test] + public void Register_should_add_new_application_to_local_growl_instance() + { + //Setup + var mocker = new AutoMoqer(MockBehavior.Strict); + + //Act + mocker.Resolve().Register("localhost", 23053, ""); + + //Assert + mocker.VerifyAllMocks(); + } + + [Test] + public void TestNotification_should_send_a_message_to_local_growl_instance() + { + //Setup + var mocker = new AutoMoqer(MockBehavior.Strict); + + //Act + mocker.Resolve().TestNotification("localhost", 23053, ""); + + //Assert + mocker.VerifyAllMocks(); + } + + [Test] + public void OnGrab_should_send_a_message_to_local_growl_instance() + { + //Setup + var mocker = new AutoMoqer(MockBehavior.Strict); + + //Act + mocker.Resolve().SendNotification("Episode Grabbed", "Series Title - 1x05 - Episode Title", "GRAB", "localhost", 23053, ""); + + //Assert + mocker.VerifyAllMocks(); + } + + [Test] + public void OnDownload_should_send_a_message_to_local_growl_instance() + { + //Setup + var mocker = new AutoMoqer(MockBehavior.Strict); + + //Act + mocker.Resolve().SendNotification("Episode Downloaded", "Series Title - 1x05 - Episode Title", "DOWNLOAD", "localhost", 23053, ""); + + //Assert + mocker.VerifyAllMocks(); + } + } +} \ No newline at end of file diff --git a/NzbDrone.Core/CentralDispatch.cs b/NzbDrone.Core/CentralDispatch.cs index 7a661f892..37a3fb385 100644 --- a/NzbDrone.Core/CentralDispatch.cs +++ b/NzbDrone.Core/CentralDispatch.cs @@ -35,7 +35,6 @@ namespace NzbDrone.Core } } - public static void InitializeApp() { BindKernel(); @@ -105,6 +104,9 @@ namespace NzbDrone.Core private static void BindExternalNotifications() { _kernel.Bind().To(); + _kernel.Bind().To(); + _kernel.Bind().To(); + _kernel.Bind().To(); var notifiers = _kernel.GetAll(); _kernel.Get().InitializeNotifiers(notifiers.ToList()); diff --git a/NzbDrone.Core/Model/Twitter/TwitterAuthorizationModel.cs b/NzbDrone.Core/Model/Twitter/TwitterAuthorizationModel.cs new file mode 100644 index 000000000..275c0af04 --- /dev/null +++ b/NzbDrone.Core/Model/Twitter/TwitterAuthorizationModel.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace NzbDrone.Core.Model.Twitter +{ + public class TwitterAuthorizationModel + { + public string Token { get; set; } + public string Url { get; set; } + } +} diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 608076c01..999ed1f31 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -125,6 +125,12 @@ False ..\Libraries\Exceptioneer.WindowsFormsClient.dll + + ..\packages\Growl.0.6\lib\Growl.Connector.dll + + + ..\packages\Growl.0.6\lib\Growl.CoreLibrary.dll + ..\packages\DotNetZip.1.9.1.8\lib\net20\Ionic.Zip.dll @@ -145,6 +151,9 @@ False ..\packages\MiniProfiler.1.9\lib\net40\MvcMiniProfiler.dll + + ..\packages\Newtonsoft.Json.3.5.8\lib\35\Newtonsoft.Json.dll + ..\packages\Ninject.2.2.1.4\lib\net40-Full\Ninject.dll @@ -172,6 +181,9 @@ False ..\Libraries\TvdbLib.dll + + ..\packages\twitterizer.2.3.3\lib\35\Twitterizer2.dll + @@ -205,6 +217,7 @@ + @@ -214,6 +227,10 @@ + + + + @@ -225,6 +242,8 @@ + + @@ -341,6 +360,10 @@ NzbDrone.Common + + + + diff --git a/NzbDrone.Core/NzbDrone.ico b/NzbDrone.Core/NzbDrone.ico new file mode 100644 index 000000000..1d6e4d3f4 Binary files /dev/null and b/NzbDrone.Core/NzbDrone.ico differ diff --git a/NzbDrone.Core/Providers/Core/ConfigProvider.cs b/NzbDrone.Core/Providers/Core/ConfigProvider.cs index 00b4f8bf9..10a8df3e0 100644 --- a/NzbDrone.Core/Providers/Core/ConfigProvider.cs +++ b/NzbDrone.Core/Providers/Core/ConfigProvider.cs @@ -255,6 +255,115 @@ namespace NzbDrone.Core.Providers.Core set { SetValue("UpdateUrl", value); } } + public virtual Boolean SmtpNotifyOnGrab + { + get { return GetValueBoolean("SmtpNotifyOnGrab"); } + + set { SetValue("SmtpNotifyOnGrab", value); } + } + + public virtual Boolean SmtpNotifyOnDownload + { + get { return GetValueBoolean("SmtpNotifyOnDownload"); } + + set { SetValue("SmtpNotifyOnDownload", value); } + } + + public virtual string SmtpServer + { + get { return GetValue("SmtpServer", String.Empty); } + set { SetValue("SmtpServer", value); } + } + + public virtual int SmtpPort + { + get { return GetValueInt("SmtpPort", 25); } + set { SetValue("SmtpPort", value); } + } + + public virtual Boolean SmtpUseSsl + { + get { return GetValueBoolean("SmtpUseSsl"); } + + set { SetValue("SmtpUseSsl", value); } + } + + public virtual string SmtpUsername + { + get { return GetValue("SmtpUsername", String.Empty); } + set { SetValue("SmtpUsername", value); } + } + + public virtual string SmtpPassword + { + get { return GetValue("SmtpPassword", String.Empty); } + set { SetValue("SmtpPassword", value); } + } + + public virtual string SmtpFromAddress + { + get { return GetValue("SmtpFromAddress", String.Empty); } + set { SetValue("SmtpFromAddress", value); } + } + + public virtual string SmtpToAddresses + { + get { return GetValue("SmtpToAddresses", String.Empty); } + set { SetValue("SmtpToAddresses", value); } + } + + public virtual Boolean TwitterNotifyOnGrab + { + get { return GetValueBoolean("TwitterNotifyOnGrab"); } + + set { SetValue("TwitterNotifyOnGrab", value); } + } + + public virtual Boolean TwitterNotifyOnDownload + { + get { return GetValueBoolean("TwitterNotifyOnDownload"); } + + set { SetValue("TwitterNotifyOnDownload", value); } + } + + public virtual string TwitterAccessToken + { + get { return GetValue("TwitterAccessToken", String.Empty); } + set { SetValue("TwitterAccessToken", value); } + } + + public virtual string TwitterAccessTokenSecret + { + get { return GetValue("TwitterAccessTokenSecret", String.Empty); } + set { SetValue("TwitterAccessTokenSecret", value); } + } + + public virtual Boolean GrowlNotifyOnGrab + { + get { return GetValueBoolean("GrowlNotifyOnGrab"); } + + set { SetValue("GrowlNotifyOnGrab", value); } + } + + public virtual Boolean GrowlNotifyOnDownload + { + get { return GetValueBoolean("GrowlNotifyOnDownload"); } + + set { SetValue("GrowlNotifyOnDownload", value); } + } + + public virtual string GrowlHost + { + get { return GetValue("GrowlHost", String.Empty); } + set { SetValue("GrowlHost", value); } + } + + public virtual string GrowlPassword + { + get { return GetValue("GrowlPassword", String.Empty); } + set { SetValue("GrowlPassword", value); } + } + private string GetValue(string key) { return GetValue(key, String.Empty); diff --git a/NzbDrone.Core/Providers/ExternalNotification/Growl.cs b/NzbDrone.Core/Providers/ExternalNotification/Growl.cs new file mode 100644 index 000000000..d4e887dd2 --- /dev/null +++ b/NzbDrone.Core/Providers/ExternalNotification/Growl.cs @@ -0,0 +1,78 @@ +using System; +using NLog; +using NzbDrone.Core.Providers.Core; +using NzbDrone.Core.Repository; + +namespace NzbDrone.Core.Providers.ExternalNotification +{ + public class Growl : ExternalNotificationBase + { + private readonly GrowlProvider _growlProvider; + + private readonly Logger Logger = LogManager.GetCurrentClassLogger(); + + public Growl(ConfigProvider configProvider, GrowlProvider growlProvider) + : base(configProvider) + { + _growlProvider = growlProvider; + } + + public override string Name + { + get { return "Growl"; } + } + + public override void OnGrab(string message) + { + try + { + if(_configProvider.GrowlNotifyOnGrab) + { + _logger.Trace("Sending Notification to Growl"); + const string title = "Episode Grabbed"; + + var growlHost = _configProvider.GrowlHost.Split(':'); + var host = growlHost[0]; + var port = Convert.ToInt32(growlHost[1]); + + _growlProvider.SendNotification(title, message, host, "GRAB", port, _configProvider.GrowlPassword); + } + } + + catch (Exception ex) + { + Logger.WarnException(ex.Message, ex); + throw; + } + } + + public override void OnDownload(string message, Series series) + { + try + { + if (_configProvider.GrowlNotifyOnDownload) + { + _logger.Trace("Sending Notification to Growl"); + const string title = "Episode Downloaded"; + + var growlHost = _configProvider.GrowlHost.Split(':'); + var host = growlHost[0]; + var port = Convert.ToInt32(growlHost[1]); + + _growlProvider.SendNotification(title, message, host, "DOWNLOAD", port, _configProvider.GrowlPassword); + } + } + + catch (Exception ex) + { + Logger.WarnException(ex.Message, ex); + throw; + } + } + + public override void OnRename(string message, Series series) + { + + } + } +} diff --git a/NzbDrone.Core/Providers/ExternalNotification/Smtp.cs b/NzbDrone.Core/Providers/ExternalNotification/Smtp.cs new file mode 100644 index 000000000..33287a053 --- /dev/null +++ b/NzbDrone.Core/Providers/ExternalNotification/Smtp.cs @@ -0,0 +1,51 @@ +using System; +using NzbDrone.Core.Providers.Core; +using NzbDrone.Core.Repository; + +namespace NzbDrone.Core.Providers.ExternalNotification +{ + public class Smtp: ExternalNotificationBase + { + private readonly SmtpProvider _smtpProvider; + + public Smtp(ConfigProvider configProvider, SmtpProvider smtpProvider) + : base(configProvider) + { + _smtpProvider = smtpProvider; + } + + public override string Name + { + get { return "SMTP"; } + } + + public override void OnGrab(string message) + { + const string subject = "NzbDrone [TV] - Grabbed"; + var body = String.Format("{0} sent to SABnzbd queue.", message); + + if (_configProvider.SmtpNotifyOnGrab) + { + _logger.Trace("Sending SMTP Notification"); + _smtpProvider.SendEmail(subject, body); + } + } + + public override void OnDownload(string message, Series series) + { + const string subject = "NzbDrone [TV] - Downloaded"; + var body = String.Format("{0} Downloaded and sorted.", message); + + if (_configProvider.SmtpNotifyOnDownload) + { + _logger.Trace("Sending SMTP Notification"); + _smtpProvider.SendEmail(subject, body); + } + } + + public override void OnRename(string message, Series series) + { + + } + } +} diff --git a/NzbDrone.Core/Providers/ExternalNotification/Twitter.cs b/NzbDrone.Core/Providers/ExternalNotification/Twitter.cs new file mode 100644 index 000000000..79fae1a9a --- /dev/null +++ b/NzbDrone.Core/Providers/ExternalNotification/Twitter.cs @@ -0,0 +1,44 @@ +using System; +using NzbDrone.Core.Providers.Core; +using NzbDrone.Core.Repository; + +namespace NzbDrone.Core.Providers.ExternalNotification +{ + public class Twitter : ExternalNotificationBase + { + private readonly TwitterProvider _twitterProvider; + + public Twitter(ConfigProvider configProvider, TwitterProvider twitterProvider) + : base(configProvider) + { + _twitterProvider = twitterProvider; + } + + public override string Name + { + get { return "Twitter"; } + } + + public override void OnGrab(string message) + { + if (_configProvider.TwitterNotifyOnGrab) + { + _logger.Trace("Sending Notification to Twitter (On Grab)"); + _twitterProvider.SendTweet("Download Started: " + message); + } + } + + public override void OnDownload(string message, Series series) + { + if (_configProvider.TwitterNotifyOnDownload) + { + _logger.Trace("Sending Notification to Twitter (On Grab)"); + _twitterProvider.SendTweet("Downloaded Complete: " + message); + } + } + + public override void OnRename(string message, Series series) + { + } + } +} diff --git a/NzbDrone.Core/Providers/GrowlProvider.cs b/NzbDrone.Core/Providers/GrowlProvider.cs new file mode 100644 index 000000000..cc1dd44db --- /dev/null +++ b/NzbDrone.Core/Providers/GrowlProvider.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Growl.Connector; +using NLog; + +namespace NzbDrone.Core.Providers +{ + public class GrowlProvider + { + private readonly Logger Logger = LogManager.GetCurrentClassLogger(); + + private readonly Application _growlApplication = new Application("NzbDrone"); + private GrowlConnector _growlConnector; + private List _notificationTypes; + + public GrowlProvider() + { + _notificationTypes = GetNotificationTypes(); + _growlApplication.Icon = "https://github.com/NzbDrone/NzbDrone/raw/master/NzbDrone.Core/NzbDrone.jpg"; + } + + public virtual void Register(string hostname, int port, string password) + { + Logger.Trace("Registering NzbDrone with Growl host: {0}:{1}", hostname, port); + _growlConnector = new GrowlConnector(password, hostname, port); + _growlConnector.Register(_growlApplication, _notificationTypes.ToArray()); + } + + public virtual void TestNotification(string hostname, int port, string password) + { + const string title = "Test Notification"; + const string message = "This is a test message from NzbDrone"; + + SendNotification(title, message, "TEST", hostname, port, password); + } + + public virtual void SendNotification(string title, string message, string notificationTypeName, string hostname, int port, string password) + { + var notificationType = _notificationTypes.Single(n => n.Name == notificationTypeName); + + var notification = new Notification("NzbDrone", notificationType.Name, DateTime.Now.Ticks.ToString(), title, message); + + _growlConnector = new GrowlConnector(password, hostname, port); + + Logger.Trace("Sending Notification to: {0}:{1}", hostname, port); + _growlConnector.Notify(notification); + } + + private List GetNotificationTypes() + { + var notificationTypes = new List(); + notificationTypes.Add(new NotificationType("TEST", "Test")); + notificationTypes.Add(new NotificationType("GRAB", "Episode Grabbed")); + notificationTypes.Add(new NotificationType("DOWNLOAD", "Episode Complete")); + + return notificationTypes; + } + } +} diff --git a/NzbDrone.Core/Providers/SmtpProvider.cs b/NzbDrone.Core/Providers/SmtpProvider.cs new file mode 100644 index 000000000..2ff2eb26b --- /dev/null +++ b/NzbDrone.Core/Providers/SmtpProvider.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Mail; +using System.Text; +using NLog; +using Ninject; +using NzbDrone.Core.Providers.Core; + +namespace NzbDrone.Core.Providers +{ + public class SmtpProvider + { + private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + private readonly ConfigProvider _configProvider; + + [Inject] + public SmtpProvider(ConfigProvider configProvider) + { + _configProvider = configProvider; + } + + public virtual bool SendEmail(string subject, string body, bool htmlBody = false) + { + //Create the Email message + var email = new MailMessage(); + + //Set the addresses + email.From = new MailAddress(_configProvider.SmtpFromAddress); + + //Allow multiple to addresses (split on each comma) + foreach (var toAddress in _configProvider.SmtpToAddresses.Split(',')) + { + email.To.Add(toAddress.Trim()); + } + + //Set the Subject + email.Subject = subject; + + //Set the Body + email.Body = body; + + //Html Body + email.IsBodyHtml = htmlBody; + + //Handle credentials + var username = _configProvider.SmtpUsername; + var password = _configProvider.SmtpPassword; + + NetworkCredential credentials = null; + + if (!String.IsNullOrWhiteSpace(username)) + credentials = new NetworkCredential(username, password); + + //Send the email + return Send(email, _configProvider.SmtpServer, _configProvider.SmtpPort, _configProvider.SmtpUseSsl, credentials); + } + + public virtual bool SendTestEmail(string server, int port, bool ssl, string username, string password, string fromAddress, string toAddresses) + { + var subject = "NzbDrone SMTP Test Notification"; + var body = "This is a test email from NzbDrone, if you received this message you properly configured your SMTP settings! (Now save them!)"; + + //Create the Email message + var email = new MailMessage(); + + //Set the addresses + email.From = new MailAddress(fromAddress); + + //Allow multiple to addresses (split on each comma) + foreach (var toAddress in toAddresses.Split(',')) + { + email.To.Add(toAddress.Trim()); + } + + //Set the Subject + email.Subject = subject; + + //Set the Body + email.Body = body; + + //Html Body + email.IsBodyHtml = false; + + //Handle credentials + NetworkCredential credentials = null; + + if (!String.IsNullOrWhiteSpace(username)) + credentials = new NetworkCredential(username, password); + + //Send the email + return Send(email, _configProvider.SmtpServer, _configProvider.SmtpPort, _configProvider.SmtpUseSsl, credentials); + } + + public virtual bool Send(MailMessage email, string server, int port, bool ssl, NetworkCredential credentials) + { + try + { + //Create the SMTP connection + var smtp = new SmtpClient(server, port); + + //Enable SSL + smtp.EnableSsl = ssl; + + //Credentials + smtp.Credentials = credentials; + + //Send the email + smtp.Send(email); + + return true; + } + + catch (Exception ex) + { + Logger.Error("There was an error sending an email."); + Logger.TraceException(ex.Message, ex); + return false; + } + } + } +} diff --git a/NzbDrone.Core/Providers/TwitterProvider.cs b/NzbDrone.Core/Providers/TwitterProvider.cs new file mode 100644 index 000000000..cd4cc4fb0 --- /dev/null +++ b/NzbDrone.Core/Providers/TwitterProvider.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NLog; +using Ninject; +using NzbDrone.Core.Model; +using NzbDrone.Core.Model.Twitter; +using NzbDrone.Core.Providers.Core; +using Twitterizer; + +namespace NzbDrone.Core.Providers +{ + public class TwitterProvider + { + private readonly ConfigProvider _configProvider; + + private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + + private const string ConsumerKey = "umKU6jBWpFbHTuqQbW2VlQ"; + private const string ConsumerSecret = "e30OXkI6qrZWS35hbUUnrQQ8J2R9XNpccQNWAVK10"; + + [Inject] + public TwitterProvider(ConfigProvider configProvider) + { + _configProvider = configProvider; + } + + public virtual TwitterAuthorizationModel GetAuthorization() + { + try + { + OAuthTokenResponse requestToken = OAuthUtility.GetRequestToken(ConsumerKey, ConsumerSecret, "oob", null); + Uri authorizationUri = OAuthUtility.BuildAuthorizationUri(requestToken.Token); + + return new TwitterAuthorizationModel + { + Token = requestToken.Token, + Url = authorizationUri.ToString() + }; + } + catch (Exception ex) + { + Logger.Warn("Failed to get Twitter authorization URL."); + Logger.TraceException(ex.Message, ex); + + return null; + } + + } + + public virtual bool GetAndSaveAccessToken(string authToken, string verifier) + { + try + { + Logger.Debug("Attempting to get the AccessToken from Twitter"); + + OAuthTokenResponse accessToken = OAuthUtility.GetAccessToken(ConsumerKey, ConsumerSecret, authToken, verifier); + + _configProvider.TwitterAccessToken = accessToken.Token; + _configProvider.TwitterAccessTokenSecret = accessToken.TokenSecret; + + //Send a tweet to test! + SendTweet("I have just setup tweet notifications for NzbDrone!"); + + return true; + } + + catch (Exception ex) + { + Logger.TraceException(ex.Message, ex); + return false; + } + } + + public virtual bool SendTweet(string message) + { + try + { + Logger.Trace("Sending status update to twitter: {0}", message); + + var accessToken = _configProvider.TwitterAccessToken; + var accessTokenSecret = _configProvider.TwitterAccessTokenSecret; + + //If the access token or access token secret are not configured, log an error and return + if (String.IsNullOrWhiteSpace(accessToken) || String.IsNullOrWhiteSpace(accessTokenSecret)) + { + Logger.Warn("Twitter Setup is incomplete, please check your settings"); + return false; + } + + var token = new OAuthTokens + { + AccessToken = accessToken, + AccessTokenSecret = accessTokenSecret, + ConsumerKey = ConsumerKey, + ConsumerSecret = ConsumerSecret + }; + + TwitterStatus.Update(token, message + " #NzbDrone"); + + return true; + } + + catch (Exception ex) + { + Logger.DebugException(ex.Message, ex); + return false; + } + } + } +} diff --git a/NzbDrone.Core/Providers/Xbmc/ResourceManager.cs b/NzbDrone.Core/Providers/Xbmc/ResourceManager.cs index 0e8e7c548..7a9daefd2 100644 --- a/NzbDrone.Core/Providers/Xbmc/ResourceManager.cs +++ b/NzbDrone.Core/Providers/Xbmc/ResourceManager.cs @@ -37,7 +37,7 @@ public static System.Drawing.Bitmap GetIconAsImage(string Name) { - System.IO.Stream stm = typeof(ResourceManager).Assembly.GetManifestResourceStream(string.Format("{0}.Icons.{1}.ico", typeof(ResourceManager).Namespace, Name)); + System.IO.Stream stm = typeof(ResourceManager).Assembly.GetManifestResourceStream(string.Format("NzbDrone.Core.{0}.ico", Name)); if (stm == null) return null; System.Drawing.Bitmap bmp; using (System.Drawing.Icon ico = new System.Drawing.Icon(stm)) diff --git a/NzbDrone.Core/license.txt b/NzbDrone.Core/license.txt new file mode 100644 index 000000000..630a2961e --- /dev/null +++ b/NzbDrone.Core/license.txt @@ -0,0 +1,25 @@ +Growl.NET GNTP Connector Library +----------------------------------------------- +Copyright (c) 2008 - Growl for Windows +All rights reserved + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + diff --git a/NzbDrone.Core/packages.config b/NzbDrone.Core/packages.config index dd12cf164..0bdd610cd 100644 --- a/NzbDrone.Core/packages.config +++ b/NzbDrone.Core/packages.config @@ -1,8 +1,11 @@  + + + \ No newline at end of file diff --git a/NzbDrone.Web/Controllers/CommandController.cs b/NzbDrone.Web/Controllers/CommandController.cs index e401f01a4..4fc949dee 100644 --- a/NzbDrone.Web/Controllers/CommandController.cs +++ b/NzbDrone.Web/Controllers/CommandController.cs @@ -2,7 +2,9 @@ using System.Collections.Generic; using System.Web; using System.Web.Mvc; +using NLog; using NzbDrone.Core.Model; +using NzbDrone.Core.Model.Twitter; using NzbDrone.Core.Providers; using NzbDrone.Core.Providers.Jobs; using NzbDrone.Web.Models; @@ -13,11 +15,18 @@ namespace NzbDrone.Web.Controllers { private readonly JobProvider _jobProvider; private readonly SabProvider _sabProvider; + private readonly SmtpProvider _smtpProvider; + private readonly TwitterProvider _twitterProvider; - public CommandController(JobProvider jobProvider, SabProvider sabProvider) + private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + + public CommandController(JobProvider jobProvider, SabProvider sabProvider, + SmtpProvider smtpProvider, TwitterProvider twitterProvider) { _jobProvider = jobProvider; _sabProvider = sabProvider; + _smtpProvider = smtpProvider; + _twitterProvider = twitterProvider; } public JsonResult RssSync() @@ -58,9 +67,39 @@ namespace NzbDrone.Web.Controllers catch (Exception ex) { - //Todo: Log the error - throw; + Logger.Warn("Unable to get Categories from SABnzbd"); + Logger.DebugException(ex.Message, ex); + return Json(new NotificationResult { Title = "Failed", Text = "Unable to get SABnzbd Categories", NotificationType = NotificationType.Error }); } } + + [HttpPost] + public JsonResult SendTestEmail(string server, int port, bool ssl, string username, string password, string fromAddress, string toAddresses) + { + if (_smtpProvider.SendTestEmail(server, port, ssl, username, password, fromAddress, toAddresses)) + return Json(new NotificationResult { Title = "Successfully sent test email." }); + + return Json(new NotificationResult { Title = "Failed", Text = "Unable to send Email, please check your settings", NotificationType = NotificationType.Error }); + } + + public JsonResult GetTwitterAuthorization() + { + var result = _twitterProvider.GetAuthorization(); + + if (result == null) + return Json(new NotificationResult { Title = "Failed", Text = "Unable to get Twitter Authorization", NotificationType = NotificationType.Error }, JsonRequestBehavior.AllowGet); + + return new JsonResult { Data = result, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; + } + + public JsonResult VerifyTwitterAuthorization(string token, string verifier) + { + var result = _twitterProvider.GetAndSaveAccessToken(token, verifier); + + if (!result) + return Json(new NotificationResult { Title = "Failed", Text = "Unable to verify Twitter Authorization", NotificationType = NotificationType.Error }, JsonRequestBehavior.AllowGet); + + return Json(new NotificationResult { Title = "Successfully verified Twitter Authorization." }, JsonRequestBehavior.AllowGet); + } } } diff --git a/NzbDrone.Web/Controllers/SettingsController.cs b/NzbDrone.Web/Controllers/SettingsController.cs index 84bf6f023..89ef7aedf 100644 --- a/NzbDrone.Web/Controllers/SettingsController.cs +++ b/NzbDrone.Web/Controllers/SettingsController.cs @@ -160,7 +160,20 @@ namespace NzbDrone.Web.Controllers XbmcCleanLibrary = _configProvider.XbmcCleanLibrary, XbmcHosts = _configProvider.XbmcHosts, XbmcUsername = _configProvider.XbmcUsername, - XbmcPassword = _configProvider.XbmcPassword + XbmcPassword = _configProvider.XbmcPassword, + SmtpEnabled = _externalNotificationProvider.GetSettings(typeof(Smtp)).Enable, + SmtpNotifyOnGrab = _configProvider.SmtpNotifyOnGrab, + SmtpNotifyOnDownload = _configProvider.SmtpNotifyOnGrab, + SmtpServer = _configProvider.SmtpServer, + SmtpPort = _configProvider.SmtpPort, + SmtpUseSsl = _configProvider.SmtpUseSsl, + SmtpUsername = _configProvider.SmtpUsername, + SmtpPassword = _configProvider.SmtpPassword, + SmtpFromAddress = _configProvider.SmtpFromAddress, + SmtpToAddresses = _configProvider.SmtpToAddresses, + TwitterEnabled = _externalNotificationProvider.GetSettings(typeof(Twitter)).Enable, + TwitterNotifyOnGrab = _configProvider.TwitterNotifyOnGrab, + TwitterNotifyOnDownload = _configProvider.TwitterNotifyOnDownload }; return View(model); @@ -433,6 +446,29 @@ namespace NzbDrone.Web.Controllers _configProvider.XbmcUsername = data.XbmcUsername; _configProvider.XbmcPassword = data.XbmcPassword; + //SMTP + var smtpSettings = _externalNotificationProvider.GetSettings(typeof (Smtp)); + smtpSettings.Enable = data.SmtpEnabled; + _externalNotificationProvider.SaveSettings(smtpSettings); + + _configProvider.SmtpNotifyOnGrab = data.SmtpNotifyOnGrab; + _configProvider.SmtpNotifyOnDownload = data.SmtpNotifyOnDownload; + _configProvider.SmtpServer = data.SmtpServer; + _configProvider.SmtpPort = data.SmtpPort; + _configProvider.SmtpUseSsl = data.SmtpUseSsl; + _configProvider.SmtpUsername = data.SmtpUsername; + _configProvider.SmtpPassword = data.SmtpPassword; + _configProvider.SmtpFromAddress = data.SmtpFromAddress; + _configProvider.SmtpToAddresses = data.SmtpToAddresses; + + //Twitter + var twitterSettings = _externalNotificationProvider.GetSettings(typeof(Twitter)); + twitterSettings.Enable = data.TwitterEnabled; + _externalNotificationProvider.SaveSettings(twitterSettings); + + _configProvider.TwitterNotifyOnGrab = data.TwitterNotifyOnGrab; + _configProvider.TwitterNotifyOnDownload = data.TwitterNotifyOnDownload; + return GetSuccessResult(); } diff --git a/NzbDrone.Web/Models/NotificationSettingsModel.cs b/NzbDrone.Web/Models/NotificationSettingsModel.cs index 27e2026b6..73afa0f32 100644 --- a/NzbDrone.Web/Models/NotificationSettingsModel.cs +++ b/NzbDrone.Web/Models/NotificationSettingsModel.cs @@ -5,6 +5,7 @@ namespace NzbDrone.Web.Models { public class NotificationSettingsModel { + //XBMC [DisplayName("Enabled")] [Description("Enable notifications for XBMC?")] public bool XbmcEnabled { get; set; } @@ -42,5 +43,72 @@ namespace NzbDrone.Web.Models [Description("XBMC webserver password")] [DisplayFormat(ConvertEmptyStringToNull = false)] public string XbmcPassword { get; set; } + + //SMTP + [DisplayName("Enabled")] + [Description("Enable SMTP notifications?")] + public bool SmtpEnabled { get; set; } + + [DisplayName("Notify on Grab")] + [Description("Send notification when episode is sent to SABnzbd?")] + public bool SmtpNotifyOnGrab { get; set; } + + [DisplayName("Notify on Download")] + [Description("Send notification when episode is downloaded?")] + public bool SmtpNotifyOnDownload { get; set; } + + [DataType(DataType.Text)] + [DisplayName("Server")] + [Description("SMTP Server Hostname")] + [DisplayFormat(ConvertEmptyStringToNull = false)] + public string SmtpServer{ get; set; } + + [DataType(DataType.Text)] + [DisplayName("Port")] + [Description("SMTP Server Port")] + [DisplayFormat(ConvertEmptyStringToNull = false)] + public int SmtpPort { get; set; } + + [DisplayName("SSL")] + [Description("Does the SMTP Server use SSL?")] + [DisplayFormat(ConvertEmptyStringToNull = false)] + public bool SmtpUseSsl { get; set; } + + [DataType(DataType.Text)] + [DisplayName("Username")] + [Description("SMTP Server authentication username")] + [DisplayFormat(ConvertEmptyStringToNull = false)] + public string SmtpUsername { get; set; } + + [DataType(DataType.Text)] + [DisplayName("Password")] + [Description("SMTP Server authentication password")] + [DisplayFormat(ConvertEmptyStringToNull = false)] + public string SmtpPassword { get; set; } + + [DataType(DataType.Text)] + [DisplayName("Send From Address")] + [Description("Sender Email address")] + [DisplayFormat(ConvertEmptyStringToNull = false)] + public string SmtpFromAddress { get; set; } + + [DataType(DataType.Text)] + [DisplayName("Send To Addresses")] + [Description("Comma separated list of addresses to email")] + [DisplayFormat(ConvertEmptyStringToNull = false)] + public string SmtpToAddresses { get; set; } + + //Twitter + [DisplayName("Enabled")] + [Description("Enable notifications for Twitter?")] + public bool TwitterEnabled { get; set; } + + [DisplayName("Notify on Grab")] + [Description("Send notification when episode is sent to SABnzbd?")] + public bool TwitterNotifyOnGrab { get; set; } + + [DisplayName("Notify on Download")] + [Description("Send notification when episode is downloaded?")] + public bool TwitterNotifyOnDownload { get; set; } } } \ No newline at end of file diff --git a/NzbDrone.Web/NzbDrone.Web.csproj b/NzbDrone.Web/NzbDrone.Web.csproj index 3ca419382..00b232df6 100644 --- a/NzbDrone.Web/NzbDrone.Web.csproj +++ b/NzbDrone.Web/NzbDrone.Web.csproj @@ -930,6 +930,15 @@ + + + + + + + + + + + +]]> + + + The current configured value. true if enabled, otherwise false. Default: false + + + Allows configuration of the base address for API method requests for support for 3rd party 'twitter-like' APIs. + + + + + The default value can be set at an application level by adding a Twitterizer2.APIBaseAddress application setting with the base address as the value. + For example: + + + + + + +]]> + + The API end point base address. Default: "http://api.twitter.com/1/" + + + + Allows overriding of the default proxy settings for API call requests. + + The supplied , or null. + + + + + Allows run time enabling of API output caching. + + The default value can be set at an application level by adding a Twitterizer2.EnableCaching application setting with value true. + For example: + + + + + + +]]> + + + The currently configured value. true if enabled, otherwise false. Default: false + + + + + Allows configuration of the sliding expiration timespan for output caching. + + The default value can be set at an application level by adding a Twitterizer2.CacheTimeout application setting with value equal to the number of seconds of the duration. + For example: + + + + + + +]]> + + + The duration that API output should be cached, on a sliding expiration, once enabled. Default: 5 minutes + + + + + Initializes a new instance of the class. + + + + + Gets or sets the screen names. + + The screen names. + + + + Gets or sets the user ids. + + The user ids. + + + + Gets or sets a value indicating whether [include entities]. + + true if [include entities]; otherwise, false. + + + + The timeline options class. Provides optional parameters for timeline methods. + + + + + Initializes a new instance of the class. + + + + + Initializes the specified command. + + + The command. + The options. + + + + Gets or sets the minimum (earliest) status id to request. + + The since id. + + + + Gets or sets the max (latest) status id to request. + + The max id. + + + + Gets or sets the number of messages to request. + + The number of messages to request. + + + + Gets or sets the page number to request. + + The page number. + + + + Gets or sets a value indicating whether user objects should contain only Id values. + + true if user objects should contain only Id values; otherwise, false. + + + + Gets or sets a value indicating whether [include retweets]. + + true if [include retweets]; otherwise, false. + + + + The Saved Searches Command class. Returns the saved searches collection when successful. + + + + + The base command class. + + The business object the command should return. + + + + The ICommand interface. + + The Type of the BaseObject that the command returns + + + + + Initializes the command. + + + + + Executes the command. + + The results of the command. + + + + + Gets the request parameters. + + The request parameters. + + + + Initializes a new instance of the class. + + The method. + The end point. + The tokens. + The optional properties. + + + + Initializes the command. + + + + + Executes the command. + + The results of the command. + + + + Sets the status code. + + The twitter response. + The status code. + The rate limiting. + + + + Sets the command URI. + + The end point. + + + + Parses the rate limit headers. + + The headers of the web response. + An object that contains the rate-limiting info contained in the response headers + + + + Parses the access level headers. + + The headers of the web response. + An enum of the current access level of the OAuth Token being used. + + + + Adds the result to cache. + + The cache key builder. + The cache. + The result object. + + + + Gets or sets the optional properties. + + The optional properties. + + + + Gets or sets the API method URI. + + The URI for the API method. + + + + Gets or sets the method. + + The method. + + + + Gets or sets the request parameters. + + The request parameters. + + + + Gets or sets the image to upload. + + The image to upload. + + + + Gets or sets the serialization delegate. + + The serialization delegate. + + + + Gets the request tokens. + + The request tokens. + + + + Initializes a new instance of the class. + + The tokens. + The options. + + + + Initializes the command. + + + + + Represents a single point on planet earth. + + + + + Gets or sets the latitude. + + The latitude. + + + + Gets or sets the longitude. + + The longitude. + + + + Reads a json array of coordinates and converts it into a collection of coordinate objects. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Reads the json. + + The reader. + Type of the object. + The existing value. + The serializer. + A deserialized + + + + Writes the json. + + The writer. + The value. + The serializer. + + + + Twitter Error Details class + + Often, twitter returns error details in the body of response. This class represents the data structure of the error for deserialization. + + + + Gets or sets the request path. + + The request path. + + + + Gets or sets the error message. + + The error message. + + + + The image type that is being uploaded. + + + + + JPEG + + + + + GIF + + + + + PNG + + + + + Represents an image for uploading. Used to upload new profile and background images. + + + + + Gets the image's MIME type. + + + + + + Reads a file from the disk and returns a instance for uploading. + + The file path. + + + + + Gets or sets the filename. + + The filename. + + + + Gets or sets the data. + + The data. + + + + Gets or sets the type of the image. + + The type of the image. + + + + The TwitterStatus class represents a twitter status (also refered to as a tweet) and provides methods for interacting with status-centric API methods. + + + + + Returns the status text with HTML links to users, urls, and hashtags. + + + + + + Updates the authenticating user's status. A status update with text identical to the authenticating user's text identical to the authenticating user's current status will be ignored to prevent duplicates. + + The tokens. + The status text. + A object of the newly created status. + + + + Updates the authenticating user's status. A status update with text identical to the authenticating user's text identical to the authenticating user's current status will be ignored to prevent duplicates. + + The tokens. + The status text. + The options. + + A object of the newly created status. + + + + + Deletes the specified status. + + The oauth tokens. + The status id. + The options. + + A object of the deleted status. + + + + + Deletes the specified status. + + The oauth tokens. + The status id. + A object of the deleted status. + + + + Returns a single status, with user information, specified by the id parameter. + + The tokens. + The status id. + The options. + A instance. + + + + Returns a single status, with user information, specified by the id parameter. + + The tokens. + The status id. + A instance. + + + + Returns a single status, with user information, specified by the id parameter. + + The status id. + A instance. + + + + Retweets a tweet. Requires the id parameter of the tweet you are retweeting. (say that 5 times fast) + + The tokens. + The status id. + The options. + A representing the newly created tweet. + + + + Retweets a tweet. Requires the id parameter of the tweet you are retweeting. (say that 5 times fast) + + The tokens. + The status id. + A representing the newly created tweet. + + + + Returns up to 100 of the first retweets of a given tweet. + + The tokens. + The status id. + The options. + + A instance. + + + + + Returns up to 100 of the first retweets of a given tweet. + + The tokens. + The status id. + A instance. + + + + Retweets a tweet. Requires the id parameter of the tweet you are retweeting. (say that 5 times fast) + + The tokens. + The options. + + A representing the newly created tweet. + + + + + Retweets a tweet. Requires the id parameter of the tweet you are retweeting. (say that 5 times fast) + + The tokens. + + A representing the newly created tweet. + + + + + Deletes the status. + + The oauth tokens. + The options. + + A object of the deleted status. + + + + + Deletes the status. + + The oauth tokens. + + A object of the deleted status. + + + + + Shows Related Results of a tweet. Requires the id parameter of the tweet you are getting results for. + + The tokens. + The status id. + The options. + A representing the newly created tweet. + + + + Shows Related Results of a tweet. Requires the id parameter of the tweet you are getting results for. + + The tokens. + The status id. + The options. + A representing the newly created tweet. + + + + Gets or sets the status id. + + The status id. + + + + Gets or sets the string id. + + The string id. + + + + Gets or sets a value indicating whether this status message is truncated. + + + true if this status message is truncated; otherwise, false. + + + + + Gets or sets the created date. + + The created date. + + + + Gets or sets the source. + + The source. + + + + Gets or sets the screenName the status is in reply to. + + The screenName. + + + + Gets or sets the user id the status is in reply to. + + The user id. + + + + Gets or sets the status id the status is in reply to. + + The status id. + + + + Gets or sets a value indicating whether the authenticated user has favorited this status. + + + true if this instance is favorited; otherwise, false. + + + + + Gets or sets the text of the status. + + The status text. + + + + Gets or sets the user. + + The user that posted this status. + + + + Gets or sets the retweeted status. + + The retweeted status. + + + + Gets or sets the place. + + The place. + + + + Gets or sets the geo location data. + + The geo location data. + + + + Gets or sets the entities. + + The entities. + + + + Gets or sets the retweet count string. + + The retweet count. + + + + Gets the retweet count. + + The retweet count. + + + + Gets a value indicating that the number of retweets exceeds the reported value in RetweetCount. For example, "more than 100" + + The retweet count plus indicator. + + + + Gets or sets a value indicating whether this is retweeted. + + true if retweeted; otherwise, false. + + + + Values returned by Twitter when getting a request token or an access token. + + + + + Gets or sets the token. + + The token. + + + + Gets or sets the token secret. + + The token secret. + + + + Gets or sets the user ID. + + The user ID. + + + + Gets or sets the screenname. + + The screenname. + + + + Gets or sets the verification string. + This is required when overriding the application's callback url. + + The verification string. + + + + The namespace contains abstract classes and interfaces + + + + + The base class for object collections. + + The type of object stored in the collection. + + + + Gets or sets the annotations. + + The annotations. + + + + The Lookup Users command class. + + + + + Initializes a new instance of the class. + + The tokens. + The options. + + + + Inits this instance. + + + + + The Show Status Command + + + + + Initializes a new instance of the class. + + The request tokens. + The status id. + The options. + + + + Inits this instance. + + + + + The Mentions Command class + + + + + The Paged Timeline Command class. Provides common functionality for all of the paged timeline command classes. + + + + + + Initializes a new instance of the class. + + The HTTP method. + The end point. + The tokens. + The optional properties. + + + + Initializes the command. + + + + + Initializes a new instance of the class. + + The request tokens. + The options. + + + + Inits this instance. + + + + + The current trends options class. Provides a payload for optional parameters for the CurrentTrendsCommand class. + + + + + Gets or sets a value indicating whether [exclude hash tags]. + + true if [exclude hash tags]; otherwise, false. + + + + The create list command class + + + + + Initializes a new instance of the class. + + The request tokens. + The name of the list. + The username. + The options. + + + + Initializes the command. + + + + + Gets or sets the name of the list. + + The name of the list. + + + + Gets or sets a value indicating whether this instance is public. + + true if this instance is public; otherwise, false. + + + + Gets or sets the description. + + The description. + + + + Removes the specified member from the list. The authenticated user must be the list's owner to remove members from the list. + + + + + Initializes a new instance of the class. + + The request tokens. + The owner username. + The list id. + The user id. + The options. + + + + Initializes the command. + + + + + Gets or sets the user id. + + The user id. + + + + The delete favoriate command class. + Un-favorites the status specified in the ID parameter as the authenticating user. + Returns the un-favorited status in the requested format when successful. + + + + + Initializes a new instance of the class. + + The tokens. + The status id. + The options. + + + + Initializes the command. + + + + + The Create Favorite Command class. Favorites the status specified in the ID parameter as the authenticating user. Returns the favorite status when successful. + + + + + Initializes a new instance of the class. + + The tokens. + The status id. + The options. + + + + Initializes the command. + + + + + The followers options class. Provides a payload for optional parameters of the FollowersCommand class. + + + + + Gets or sets the ID of the user for whom to request a list of followers. + + The user id. + + + + Gets or sets the screen name of the user for whom to request a list of followers. + + The name of the screen. + + + + Gets or sets the cursor. + + The cursor. + + + + The Create Friendship Options class + + + + + Initializes a new instance of the class. + + + + + Gets or sets a value indicating whether to enable delivery of statuses from this user to the authenticated user's device + + true if follow; otherwise, false. + + + + The TwitterUserCollection class. + + + + + Deserializes the specified value. + + The value. + + + + + Gets or sets the next cursor. + + The next cursor. + + + + Gets or sets the previous cursor. + + The previous cursor. + + + + Gets or sets information about the user's rate usage. + + The rate limiting object. + + + + The TwitterStatusCollection class. + + + + + Gets or sets the current page number. + + The current page number. + + + + Describes the result status of a request + + + + + The request was completed successfully + + + + + The URI requested is invalid or the resource requested, such as a user, does not exists. + + + + + The request was invalid. An accompanying error message will explain why. + + + + + Authentication credentials were missing or incorrect. + + + + + Returned by the Search API when an invalid format is specified in the request. + + + + + The authorized user, or client IP address, is being rate limited. + + + + + Twitter is currently down. + + + + + Twitter is online, but is overloaded. Try again later. + + + + + The request failed due to a connection issue or timeout. + + + + + Something unexpected happened. See the error message for additional information. + + + + + The command to obtain followers of a user. + + + + + Initializes a new instance of the class. + + The request tokens. + The options. + + + + Initializes the command. + + + + + The show friendship command class. + + + + + The base address to the API method. + + + + + Initializes a new instance of the class. + + The tokens. + The source user id. + Name of the source user. + The target user id. + Name of the target screen. + The optional properties. + + + + Initializes the command. + + + + + Gets or sets the id of the source user. + + The source id. + + + + Gets or sets the screenname of the source user. + + The screenname of the source user. + + + + Gets or sets the id of the target user. + + The target id. + + + + Gets or sets the screenname of the target user. + + The screenname of the target user. + + + + The retweet command class. + + + + + The base address to the API method. + + + + + Initializes a new instance of the class. + + The request tokens. + The status id. + The options. + + + + Initializes the command. + + + + + The related tweets object. Represents the result from the related_results/show/:id.json endpoint. + + + + + + Gets or sets the results. + + The results. + + + + Gets or sets the type of the result. + + The type of the result. + + + + Gets or sets the name of the group. + + The name of the group. + + + + Gets or sets the score. + + The score. + + + + Represents mention of a user within a value. + + + + + The base class for twitter entities that describe tweet text. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the start index. + + The start index. + + + + Gets or sets the end index. + + The end index. + + + + Initializes a new instance of the class. + + + + + Gets or sets the user's screen name. + + The user's screen name. + + + + Gets or sets the user's name. + + The user's name. + + + + Gets or sets the user id. + + The user id. + + + + The create list command class + + + + + Initializes a new instance of the class. + + The options. + + + + Initializes the command. + + + + + The create list command class + + + + + Initializes a new instance of the class. + + The request tokens. + The username. + The list id or slug. + The options. + + + + Initializes the command. + + + + + Lists the possible types of geographic boundaries. + + + + + A single point. Expect one coordinate. + + + + + A line, or multiple lines joined end-to-end. + + + + + A polygon-shaped area. + + + + + A circle represented by a single point (the center) and the radius. + + + + + Represents a geological area + + + + + Gets or sets the type of the shape. + + The type of the shape. + + + + Gets or sets the coordinates. + + The coordinates. + + + + Creates a friendship between the authenticated user and another user + + + + + The base address to the API method. + + + + + Initializes a new instance of the class. + + The request tokens. + The userid. + The optional properties. + + + + Initializes a new instance of the class. + + The request tokens. + Name of the user. + The optional properties. + + + + Initializes the command. + + + + + Gets or sets the user id. + + The user id. + + + + Gets or sets the username. + + The username. + + + + The twitter list collection class. + + + + + Holds a collection of ID values + + + + + Annotations are additional pieces of data, supplied by Twitter clients, in a non-structured dictionary. + + The annotations. + + + + Deserializes the specified value. + + The value. + + + + + Gets or sets the next cursor. + + The next cursor. + + + + Gets or sets the previous cursor. + + The previous cursor. + + + + Gets or sets information about the user's rate usage. + + The rate limiting object. + + + + The TwitterFavorite class. Provides static methods for manipulating favorite tweets. + + + + + Prevents a default instance of the TwitterFavorite class from being created. + + + + + Favorites the status specified in the ID parameter as the authenticating user. + + The tokens. + The status id. + The options. + The favorite status when successful. + + + + Favorites the status specified in the ID parameter as the authenticating user. + + The tokens. + The status id. + The favorite status when successful. + + + + Un-favorites the status specified in the ID parameter as the authenticating user. + + The tokens. + The status id. + The options. + The un-favorited status in the requested format when successful. + + + + Un-favorites the status specified in the ID parameter as the authenticating user. + + The tokens. + The status id. + + The un-favorited status in the requested format when successful. + + + + + Returns the 20 most recent favorite statuses for the authenticating user or user specified by the ID parameter in the requested format. + + The tokens. + The options. + The 20 most recent favorite statuses + + + + Returns the 20 most recent favorite statuses for the authenticating user or user specified by the ID parameter in the requested format. + + The tokens. + The 20 most recent favorite statuses + + + + Returns the 20 most recent favorite statuses for the authenticating user or user specified by the ID parameter in the requested format. + + The options. + The 20 most recent favorite statuses + + + + The Direct Message Collection class + + + + Contains security tokens nessisary for performing authorized actions against the Twitter API + To perform authorized actions, you must create a new OAuthTokens variable and supply values for the , , , and properties, as follows: + + OAuthTokens tokens = new OAuthTokens(); + tokens.AccessToken = "XXX"; + tokens.AccessTokenSecret = "XXX"; + tokens.ConsumerKey = "XXX"; + tokens.ConsumerSecret = "XXX"; + + + Dim tokens As new OAuthTokens(); + tokens.AccessToken = "XXX" + tokens.AccessTokenSecret = "XXX" + tokens.ConsumerKey = "XXX" + tokens.ConsumerSecret = "XXX" + + + + + + Gets or sets the access token. + + The access token. + + + + Gets or sets the access token secret. + + The access token secret. + + + + Gets or sets the consumer key. + + The consumer key. + + + + Gets or sets the consumer secret. + + The consumer secret. + + + + Gets a value indicating whether this instance has consumer token values. + + + true if this instance has consumer token; otherwise, false. + + + + + Gets a value indicating whether this instance has access token values. + + + true if this instance has access token; otherwise, false. + + + + + Gets a value indicating whether this instance has values. This does not verify that the values are correct. + + + true if this instance has values; otherwise, false. + + + + + The Show User Command + + http://dev.twitter.com/doc/get/users/show + + + + Initializes a new instance of the class. + + The request tokens. + The user id. + The username. + The options. + + + + Inits this instance. + + + + + Gets or sets the user ID. + + The user ID. + + + + Gets or sets the name of the user. + + The name of the user. + + + + The IPagedCommand interface. + + The type of BaseObject that the command returns. + + + + Initializes a new instance of the class. + + The HTTP method. + The end point. + The tokens. + The optional properties. + + + + Gets or sets the page number to obtain. + + The page number. + + + + The create list command class + + + + + Initializes a new instance of the class. + + The request tokens. + The slug. + The list id. + The options. + + + + + + Initializes the command. + + + + + Gets or sets the list id. + + The list id. + + + + Gets or sets the slug. + + The slug. + + + + The command class to delete a status update. + + + + + Initializes a new instance of the class. + + The tokens. + The status id. + The options. + + + + Initializes the command. + + + + + Gets or sets the status id. + + The status id. + + + + Initializes a new instance of the class. + + The tokens. + The user id. + Name of the screen. + The options. + + + + Inits this instance. + + + + + Gets or sets the user id. + + The user id. + + + + Gets or sets the name of the screen. + + The name of the screen. + + + + The TwitterSavedSearch class. Provides static methods for manipulating saved searches tweets. + + + + + Creates the saved search specified in the query parameter as the authenticating user. + + The tokens. + The query. + The options. + The saved search when successful. + + + + Creates the saved search specified in the query parameter as the authenticating user. + + The tokens. + The query. + The saved search when successful. + + + + Deletes the saved search specified in the ID parameter as the authenticating user. + + The tokens. + The saved search id. + The options. + The deleted saved search in the requested format when successful. + + + + Deletes the saved search specified in the ID parameter as the authenticating user. + + The tokens. + The saved search id. + + The deleted saved search in the requested format when successful + + + + + Returns the the authenticating user's saved search queries in the requested format. + + The tokens. + The options. + The saved searches + + + + Returns the the authenticating user's saved search queries in the requested format. + + The tokens. + The saved searches + + + + Returns the the authenticating user's saved search queries in the requested format. + + The options. + The saved searches + + + + Gets or sets the Id. + + The Id of the saved search. + + + + Gets or sets the name. + + The name of the saved search. + + + + Gets or sets the query. + + The query. + + + + Gets or sets the position. + + The position. + + + + Gets or sets the created at date time. + + The created at. + + + + Converts date strings returned by the Twitter API into + + + + + The date pattern for most dates returned by the API + + + + + Reads the json. + + The reader. + Type of the object. + The existing value. + The serializer. + The parsed value as a DateTime, or null. + + + + Writes the json. + + The writer. + The value. + The serializer. + + + + The Twitter Relationship entity class + + + + + The relationship source + + + + + The relationship target + + + + + Allows the authenticating users to unfollow the user specified. + + The tokens. + + Returns the unfollowed user in the requested format when successful. Returns a string describing the failure condition when unsuccessful. + + + + + Gets or sets the source. + + The source. + + + + Gets or sets the target. + + The target. + + + + Gets or sets the relationship. + + The relationship. + + + + Performs the action. + + The command. + The parsed result of the action. + + + + + + The user search options class. Provides a payload for optional parameters of the UserSearchCommand class. + + + + + Gets or sets the number per page. Cannot be greater than 20. + + The number per page. + + + + Gets or sets the page of results to retrieve. + + The page of results to retrieve. + + + + The list membership command class + + + + + Initializes a new instance of the class. + + The request tokens. + The username. + The options. + + + + Initializes the command. + + + + + The Home Timeline Command + + + + + Initializes a new instance of the class. + + The request tokens. + The optional properties. + + + + Inits this instance. + + + + + The delete saved search command class. + Deletes the saved search specified in the ID parameter as the authenticating user. + Returns the deleted saved search in the requested format when successful. + + + + + Initializes a new instance of the class. + + The tokens. + The saved search id. + The options. + + + + Initializes the command. + + + + + The Twitter Place Collection class. A collection of objects. + + + + + Converts json data to a . + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Provides interaction with the Twitter API to obtain and manage relationships between users. + + + + + Returns the authenticating user's followers, each with current status inline. + + The tokens. + The options. + + A instance. + + + + + Returns the authenticating user's followers, each with current status inline. + + The tokens. + + A instance. + + + + + Returns the authenticating user's followers, each with current status inline. + + The options. + + A instance. + + + + + Returns a user's friends, each with current status inline. They are ordered by the order in which the user followed them, most recently followed first, 100 at a time. + + The tokens. + The options. + + A instance. + + Please note that the result set isn't guaranteed to be 100 every time as suspended users will be filtered out. + + + + Returns a user's friends, each with current status inline. They are ordered by the order in which the user followed them, most recently followed first, 100 at a time. + + The tokens. + + A instance. + + Please note that the result set isn't guaranteed to be 100 every time as suspended users will be filtered out. + + + + Returns a user's friends, each with current status inline. They are ordered by the order in which the user followed them, most recently followed first, 100 at a time. + + The options. + + A instance. + + Please note that the result set isn't guaranteed to be 100 every time as suspended users will be filtered out. + + + + Allows the authenticating users to follow the user specified in the userID parameter. + + The tokens. + The user id. + + Returns the followed user in the requested format when successful. + + + + + Allows the authenticating users to follow the user specified in the userID parameter. + + The tokens. + The user id. + The options. + + Returns the followed user in the requested format when successful. + + + + + Allows the authenticating users to follow the user specified in the userName parameter. + + The tokens. + The user name. + + Returns the followed user in the requested format when successful. + + + + + Allows the authenticating users to follow the user specified in the userName parameter. + + The tokens. + The user name. + The options. + + Returns the followed user in the requested format when successful. + + + + + Allows the authenticating users to unfollow the user specified in the ID parameter. + + The tokens. + The user id. + + Returns the unfollowed user in the requested format when successful. + + + + + Allows the authenticating users to unfollow the user specified in the ID parameter. + + The tokens. + The user id. + The options. + + Returns the unfollowed user in the requested format when successful. + + + + + Allows the authenticating users to unfollow the user specified in the ID parameter. + + The tokens. + The username. + + Returns the unfollowed user in the requested format when successful. + + + + + Allows the authenticating users to unfollow the user specified in the ID parameter. + + The tokens. + The username. + The options. + + Returns the unfollowed user in the requested format when successful. + + + + + Returns detailed information about the relationship between two users. + + The tokens. + The target user id. + A instance. + + + + Returns detailed information about the relationship between two users. + + The tokens. + The target user id. + The options. + A instance. + + + + Returns detailed information about the relationship between two users. + + The tokens. + The source user id. + The target user id. + A instance. + + + + Returns detailed information about the relationship between two users. + + The tokens. + The source user id. + The target user id. + The options. + A instance. + + + + Returns detailed information about the relationship between two users. + + The tokens. + The target user name. + A instance. + + + + Returns detailed information about the relationship between two users. + + The tokens. + The target user name. + The options. + A instance. + + + + Returns detailed information about the relationship between two users. + + The tokens. + The source user name. + The target user name. + A instance. + + + + Returns detailed information about the relationship between two users. + + The tokens. + The source user name. + The target user name. + The options. + A instance. + + + + Returns detailed information about the relationship between two users. + + The first user id. + The second user id. + + A instance. + + + + + Returns detailed information about the relationship between two users. + + The first username. + The second username. + + A instance. + + + + + Returns the numeric IDs for every user the specified user is friends with. + + The tokens. + The options. + + A instance. + + + + + Returns the numeric IDs for every user the specified user is friends with. + + The tokens. + + A instance. + + + + + Returns the numeric IDs for every user the specified user is following. + + The tokens. + The options. + + A instance. + + + + + Returns the numeric IDs for every user the specified user is following. + + The tokens. + + A instance. + + + + + Returns a collection of IDs for every user who has a pending request to follow the authenticating user. + + The tokens. + The options. + + + + + Returns a collection of IDs for every user who has a pending request to follow the authenticating user. + + The tokens. + + + + + Returns a collection of IDs for every protected user for whom the authenticating user has a pending follow request. + + The tokens. + The options. + + + + + Returns a collection of IDs for every protected user for whom the authenticating user has a pending follow request. + + The tokens. + + + + + The Direct Message Entity Class + + + + + Returns a list of the 20 most recent direct messages sent to the authenticating user. + + The tokens. + A instance. + + + + Returns a list of the 20 most recent direct messages sent to the authenticating user. + + The tokens. + The options. + + A instance. + + + + + Returns a list of the 20 most recent direct messages sent by the authenticating user. + + The tokens. + + A instance. + + + + + Sends a new direct message to the specified user from the authenticating user. + + The OAuth tokens. + The user id. + The text of your direct message. + The options. + + A instance. + + + + + Sends a new direct message to the specified user from the authenticating user. + + The OAuth tokens. + The user id. + The text of your direct message. + + A instance. + + + + + Sends a new direct message to the specified user from the authenticating user. + + The OAuth tokens. + The user's screen name. + The message text. + The options. + A object of the created direct message. + + + + Sends a new direct message to the specified user from the authenticating user. + + The OAuth tokens. + The user's screen name. + The message text. + A object of the created direct message. + + + + Returns a list of the 20 most recent direct messages sent by the authenticating user. + + The tokens. + The options. + + A instance. + + + + + Deletes this direct message. + + The tokens. + The options. + + A instance. + + + + + Deletes this direct message. + + The tokens. + The direct message id. + The options. + + A instance. + + + + + Gets or sets the direct message id. + + The direct message id. + + + + Gets or sets the sender id. + + The sender id. + + + + Gets or sets the direct message text. + + The direct message text. + + + + Gets or sets the recipient id. + + The recipient id. + + + + Gets or sets the created date. + + The created date. + + + + Gets or sets the name of the sender screen. + + The name of the sender screen. + + + + Gets or sets the name of the recipient screen. + + The name of the recipient screen. + + + + Gets or sets the sender. + + The sender. + + + + Gets or sets the recipient. + + The recipient. + + + + Gets or sets the entities. + + The entities. + + + + The direct messages sent options class. Provides a payload for the command. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the minimum (earliest) status id to request. + + The since id. + + + + Gets or sets the max (latest) status id to request. + + The max id. + + + + Gets or sets the number of messages to request. + + The number of messages to request. + + + + Gets or sets the page number to request. + + The page number. + + + + Gets or sets whether to include entities in the request. + + Boolean. + + + + The Twitterizer Exception + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The message. + + + + Initializes a new instance of the class. + + The message. + The inner exception. + + + + Parses the rate limit headers. + + The response. + + + + Gets or sets the result. + + The result. + + + + Gets or sets the response body. + + The response body. + + + + Gets or sets the rate limits. + + The rate limits. + + + + Gets or sets the error details. + + The error details. + + + + Gets the response that the remote host returned. + + + If a response is available from the Internet resource, a instance that contains the error response from an Internet resource; otherwise, null. + + + + Gets the bug report. + + The bug report. + + + + The twitter list entity class + + + + + Creates a new list for the authenticated user. Accounts are limited to 20 lists. + + The oauth tokens. + The username. + The list name. + if set to true creates a public list. + The description. + The options. + A instance. + + + + Creates a new list for the authenticated user. Accounts are limited to 20 lists. + + The oauth tokens. + The list name. + if set to true creates a public list. + The description. + The options. + A instance. + + + + Creates a new list for the authenticated user. Accounts are limited to 20 lists. + + The oauth tokens. + The username. + The list name. + if set to true creates a public list. + The description. + A instance. + + + + Updates the specified list. + + The oauth tokens. + The username. + The list id. + The options. + A instance. + + + + Updates the specified list. + + The oauth tokens. + The username. + The list id. + The options. + A instance. + + + + List the lists of the specified user. Private lists will be included if the authenticated users is the same as the user who's lists are being returned. + + The tokens. + The username. + The options. + + A instance. + + + + + List the lists of the specified user. Private lists will be included if the authenticated users is the same as the user who's lists are being returned. + + The tokens. + The options. + + A instance. + + + + + List the lists of the specified user. Private lists will be included if the authenticated users is the same as the user who's lists are being returned. + + The tokens. + The username. + + A instance. + + + + + Show the specified list. Private lists will only be shown if the authenticated user owns the specified list. + + The tokens. + The username. + The list id or slug. + The options. + + A instance. + + + + + Show the specified list. Private lists will only be shown if the authenticated user owns the specified list. + + The tokens. + The username. + The list id or slug. + + A instance. + + + + + Returns the specified list. Private lists will only be shown if the authenticated user owns the specified list. + + The tokens. + The slug. + A instance. + + + + Returns the specified list. Private lists will only be shown if the authenticated user owns the specified list. + + The tokens. + The slug. + The options. + A instance. + + + + Returns the specified list. Private lists will only be shown if the authenticated user owns the specified list. + + The tokens. + The list id. + A instance. + + + + Returns the specified list. Private lists will only be shown if the authenticated user owns the specified list. + + The tokens. + The list id. + The options. + A instance. + + + + Deletes the specified list. Must be owned by the authenticated user. + + The tokens. + The username. + The list id or slug. + The options. + A instance. + + + + Show tweet timeline for members of the specified list. + + The tokens. + The username. + The list id or slug. + The options. + + A instance. + + + + + List the lists the specified user has been added to. + + The tokens. + The username. + The options. + + A instance. + + + + + List the lists the specified user has been added to. + + The tokens. + The username. + + A instance. + + + + + List the lists the specified user follows. + + The tokens. + Name of the user. + The options. + + A instance. + + + + + List the lists the specified user follows. + + The tokens. + Name of the user. + + A instance. + + + + + Returns the members of the specified list. + + The tokens. + The username. + The list id or slug. + The options. + + A collection of users as . + + + + + Returns the members of the specified list. + + The tokens. + The username. + The list id. + + A collection of users as . + + + + + Add a member to a list. The authenticated user must own the list to be able to add members to it. Lists are limited to having 500 members. + + The tokens. + The username of the list owner. + The list id. + The user id to add. + The options. + + A representing the list the user was added to, or null. + + + + + Add a member to a list. The authenticated user must own the list to be able to add members to it. Lists are limited to having 500 members. + + The tokens. + The username of the list owner. + The list id. + The user id to add. + + A representing the list the user was added to, or null. + + + + + Removes the specified member from the list. The authenticated user must be the list's owner to remove members from the list. + + The tokens. + The username of the list owner. + The list id. + The user id to add. + The options. + + A representing the list the user was added to, or null. + + + + + Removes the specified member from the list. The authenticated user must be the list's owner to remove members from the list. + + The tokens. + The username of the list owner. + The list id. + The user id to add. + + A representing the list the user was added to, or null. + + + + + Check if a user is a member of the specified list. + + The tokens. + The username of the list owner. + The list id. + The user id. + The options. + + The user's details, if they are a member of the list, otherwise null. + + + + + Check if a user is a member of the specified list. + + The tokens. + The username of the list owner. + The list id. + The user id. + + The user's details, if they are a member of the list, otherwise null. + + + + + Subscribes the specified tokens. + + The tokens. + The list id. + + + + + Subscribes the specified tokens. + + The tokens. + The list id. + The optional properties. + + + + + Gets or sets the id. + + The list id. + + + + Gets or sets the name. + + The list name. + + + + Gets or sets the full name. + + The full name. + + + + Gets or sets the slug. + + The list slug. + + + + Gets or sets the description. + + The description. + + + + Gets or sets the number of subscribers. + + The number of subscribers. + + + + Gets or sets the number of members. + + The number of members. + + + + Gets or sets the absolute path. + + The absolute path. + + + + Gets or sets the mode. + + The list mode. + + + + Gets or sets the user that owns the list. + + The owning user. + + + + Gets a value indicating whether this instance is public. + + true if this instance is public; otherwise, false. + + + + Enumeration of the supported HTTP verbs supported by the + + + + + The HTTP GET method is used to retrieve data. + + + + + The HTTP POST method is used to transmit data. + + + + + The HTTP DELETE method is used to indicate that a resource should be deleted. + + + + + The Web Request Builder class. + + + + + The HTTP Authorization realm. + + + + + OAuth Parameters key names to include in the Authorization header. + + + + + Parameters that may appear in the list, but should never be included in the header or the request. + + + + + Initializes a new instance of the class. + + The request URI. + The verb. + + + + Initializes a new instance of the class. + + The request URI. + The verb. + The tokens. + + + + Executes the request. + + + + + + Prepares the request. It is not nessisary to call this method unless additional configuration is required. + + A object fully configured and ready for execution. + + + + Adds the parameters to request uri. + + + + + Adds the form field values to request. + + The request. + + + + Sets up the OAuth request details. + + + + + Generates the signature. + + + + + + Generate the timestamp for the signature + + A timestamp value in a string. + + + + Generate a nonce + + A random number between 123400 and 9999999 in a string. + + + + Normalizes the URL. + + The URL to normalize. + The normalized url string. + + + + Encodes a value for inclusion in a URL querystring. + + The value to Url encode + Returns a Url encoded string + + + + Encodes a series of key/value pairs for inclusion in a URL querystring. + + The parameters. + A string of all the keys and value pairs with the values encoded. + + + + Generates the authorization header. + + The string value of the HTTP header to be included for OAuth requests. + + + + Gets or sets the request URI. + + The request URI. + + + + Gets or sets the parameters. + + The parameters. + + + + Gets or sets the verb. + + The verb. + + + + Gets or sets the oauth tokens. + + The tokens. + + + + Gets or sets the keep alive header on PrepareRequest. + + Keep Alive. + + + + Gets or sets the UserAgent. + + The User Agent. + + + + Gets or sets the Basic Auth Credentials. + + The Basic Auth Credentials. + + + + Gets or sets the proxy. + + The proxy. + + + + Gets or sets a value indicating whether the request will be signed with an OAuth authorization header. + + true if [use O auth]; otherwise, false. + + + A utility for handling authorization and request signatures for the OAuth protocol. + Before you begin, you will need to register your application with Twitter. + + To authenticate a user, there are 3 steps you will take:
+ 1) Obtain a Request Token
+ 2) Authentication
+ 3) Obtain an Access Token +
+
+ First, you must obtain a request token from the API. + + string consumerKey = "XXX"; + string consumerSecret = "XXX"; + + // Obtain a request token + OAuthTokenResponse requestToken = OAuthUtility.GetRequestToken(consumerKey, consumerSecret); + + // Direct or instruct the user to the following address: + Uri authorizationUri = OAuthUtility.BuildAuthorizationUri(requestToken.Token); + + + Dim consumerKey As String = "XXX" + Dim consumerSecret As String = "XXX" + + '-- Obtain a request token + Dim requestToken As OAuthTokenResponse = OAuthUtility.GetRequestToken(consumerKey, consumerSecret) + + '-- Direct or instruct the user to the following address: + Dim authorizationUri As Uri = OAuthUtility.BuildAuthorizationUri(requestToken.Token) + + + After the user has returned, you must obtain or reuse the request token and obtain the verifier value. For web applications, both values will be provided on the querystring to the callback url as oauth_token and oauth_verifier, respectively. For desktop and mobile applications, the verifier will be a numeric PIN supplied to the user. + + + string consumerKey = "XXX"; + string consumerSecret = "XXX"; + string requestToken = "XXX"; + string verifier = "XXX"; + + // Obtain the access token for this user. + OAuthTokenResponse accessToken = OAuthUtility.GetAccessToken(consumerKey, consumerSecret, requestToken, verifier); + + // TODO: Save the access token to a database, session, xml file, or whereever my user data is stored. + + + Dim consumerKey As String = "XXX" + Dim consumerSecret As String = "XXX" + Dim requestToken As String = "XXX" + Dim verifier As String = "XXX" + + '-- Obtain the access token for this user. + Dim accessToken As OAuthTokenResponse = OAuthUtility.GetAccessToken(consumerKey, consumerSecret, requestToken, verifier) + + '-- TODO: Save the access token to a database, session, xml file, or whereever my user data is stored. + + +
+ + + Gets the request token. + + The consumer key. + The consumer secret. + The callback address. For PIN-based authentication "oob" should be supplied. + + + + + Tries to the parse querystring parameter. + + Name of the parameter. + The value of the parameter or an empty string. + + + + Gets a new OAuth request token from the twitter api. + + The consumer key. + The consumer secret. + The callback address. For PIN-based authentication "oob" should be supplied. + The proxy. + + A new instance. + + + + + Gets the access token. + + The consumer key. + The consumer secret. + The request token. + The pin number or verifier string. + + An class containing access token information. + + + + + Gets the access token. + + The consumer key. + The consumer secret. + The request token. + The pin number or verifier string. + The proxy. + + An class containing access token information. + + + + + Builds the authorization URI. + + The request token. + A new instance. + + + + Builds the authorization URI. + + The request token. + if set to true, the authenticate url will be used. (See: "Sign in with Twitter") + A new instance. + + + + Gets the access token during callback. + + The consumer key. + The consumer secret. + + Access tokens returned by the Twitter API + + + + + Adds the OAuth Echo header to the supplied web request. + + The request. + The tokens. + + + + The User Search Command class. + + + + + Initializes a new instance of the class. + + The request tokens. + The query. + The options. + + + + Initializes the command. + + + + + Gets or sets the query. + + The query. + + + + The get lists command class + + + + + Initializes a new instance of the class. + + The request tokens. + The username. + The options. + + + + Initializes the command. + + + + + The Direct Messages Sent Command class + + + + + Initializes a new instance of the class. + + The request tokens. + The options. + + + + Initializes the command. + + + + + Provides methods to request and modify details of an authorized user's account details. + + + + + Verifies the user's credentials. + + The tokens. + The options. + + + + + Verifies the user's credentials. + + The tokens. + + + + + Sets one or more hex values that control the color scheme of the authenticating user's profile page on twitter.com + + The tokens. + The options. + + The user, with updated data, as a + + + + + Updates the authenticating user's profile image. + + The tokens. + The avatar image for the profile. Must be a valid GIF, JPG, or PNG image of less than 700 kilobytes in size. Images with width larger than 500 pixels will be scaled down. + The options. + + The user, with updated data, as a + + + + + Updates the authenticating user's profile image. + + The tokens. + The avatar image for the profile. Must be a valid GIF, JPG, or PNG image of less than 700 kilobytes in size. Images with width larger than 500 pixels will be scaled down. + + The user, with updated data, as a + + + + + The friends options class. Provides a payload for optional parameters of the class. + + + + + Gets or sets the user id. + + The user id. + + + + Gets or sets the user's screen name. + + The screen name of the user. + + + + Gets or sets the cursor. + + The cursor. + + + + The Retweeted By Me Command. + + + + + Initializes a new instance of the class. + + The request tokens. + The options. + + + + Initializes the command. + + + + + The delete friendship command class. + + + + + The base address to the API method. + + + + + Initializes a new instance of the class. + + The request tokens. + The user id. + The user name. + The optional properties. + + + + Initializes the command. + + + + + Gets or sets the user id. + + The user id. + + + + Gets or sets the username. + + The username. + + + + The Create Friendship Options class + + + + + Gets or sets the cursor. + + The cursor. + + + + Gets or sets the ID of the user for whom to request a list of followers. + + The user id. + + + + Gets or sets the screen name of the user for whom to request a list of followers. + + The name of the screen. + + + + The list favorites options class. Provides a payload for optional parameters of the ListFavoritesCommand class. + + + + + Gets or sets the number of favorites to return. + + The number of favorites to return per page. + + + + Gets or sets the user name or id of the user for whom to return results for. + + The user name or id of the user for whom to return results for. + + + + Gets or sets the page. + + The page number. + + + + The Twitter Search Result Collection class + + + + + Deserializes the specified value. + + The value. + + + + + The Twitter Search Result class. + + + + + Gets or sets the profile image URL. + + The profile image URL. + + + + Gets or sets the created date. + + The created date. + + + + Gets or sets the name of from user screen. + + The name of from user screen. + + + + Gets or sets from user id. + + From user id. + + + + Gets or sets the name of to user screen. + + The name of to user screen. + + + + Gets or sets to user id. + + To user id. + + + + Gets or sets the status text. + + The status text. + + + + Gets or sets the status id. + + The status id. + + + + Gets or sets the source. + + The source. + + + + Gets or sets the language. + + The language. + + + + Gets or sets the geo location associated with the result. + + The geo location data. + + + + Gets or sets the location. + + The location. + + + + Provides data about the user's current rate limiting. + + + + + Gets the remaining number of requests until requests are denied. + + The remaining requests. + + + + Gets the total number of requests allowed before requests are denied. + + The total number of requests. + + + + Gets the date the remaining number of requests will be reset. + + The reset date. + + + + The command to obtain followers of a user. + + + + + Initializes a new instance of the class. + + The request tokens. + The options. + + + + Initializes the command. + + + + + The ListFavoritesCommand class. Returns the 20 most recent favorite statuses for the authenticating user or user specified by the ID parameter in the requested format. + + + + + Initializes a new instance of the class. + + The tokens. + The options. + + + + Initializes the command. + + + + + The information class which gives general information about the assembly. + + + + + Obtains the current assembly version. + + The assembly version string in the format (#.#.#.#) + + + + The Public Timeline Command class + + + + + Initializes a new instance of the class. + + The request tokens. + The options. + + + + Initializes the command. + + + + + Represents a pre-parsed url located within the body of a . + + + + + Initializes a new instance of the class. + + + + + Gets or sets the URL parsed from the tweet text. + + The parsed URL. + + + + Gets or sets the Display URL parsed from the tweet text. + + The parsed Display URL. + + + + Gets or sets the Expanded URL parsed from the tweet text. + + The parsed Expanded URL. + + + + Represents multiple objects. + + + + + The Json converter for data. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + The TwitterTrendCollection class. Represents multiple elements. + + + + + The Json converter class for the TwitterTrendCollection object + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Reads the json. + + The reader. + Type of the object. + The existing value. + The serializer. + A collection of items. + + + + Writes the json. + + The writer. + The value. + The serializer. + + + + The UserTimelineOptions class. Provides a payload for optional parameters of the class. + + + + + Gets or sets the ID of the user for whom to request a list of followers. + + The user id. + + + + Gets or sets the screen name of the user for whom to request a list of followers. + + The name of the screen. + + + + The TwitterSavedSearchCollection class. + + + + + The reverse geocode command class. Performs a reverse geocode lookup. + + + + + Initializes a new instance of the class. + + The latitude. + The longitude. + The options. + + + + Initializes the command. + + + + + Gets or sets the latitude. + + The latitude. + + + + Gets or sets the longitude. + + The longitude. + + + + The direct messages options class. Provides a payload for the command. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the minimum (earliest) status id to request. + + The since id. + + + + Gets or sets the max (latest) status id to request. + + The max id. + + + + Gets or sets the number of messages to request. + + The number of messages to request. + + + + Gets or sets the page number to request. + + The page number. + + + + Gets or sets whether to include entities in the request. + + Boolean. + + + + The TwitterTrend class. + + + + + Gets the current trends. + + The options. + + A collection of objects. + + + + + Gets the current trends. + + + A collection of objects. + + + + + Gets or sets the name. + + The name of the trend. + + + + Gets or sets the address. + + The address. + + + + Gets or sets the search query. + + The search query. + + + + The Twitter Result Type Enumeration + + + + + In a future release this will become the default value. Include both popular and real time results in the response. + + + + + The current default value. Return only the most recent results in the response. + + + + + Return only the most popular results in the response. + + + + + The user timeline command. + + + + + Initializes a new instance of the class. + + The request tokens. + The options. + + + + Initializes the command. + + + + + The twitter place class. Represents a place or area. + + + + + Retrieves a place based on the specified coordinates. + + The latitude. + The longitude. + The options. + A collection of matched items. + + + + Retrieves a place based on the specified coordinates. + + The latitude. + The longitude. + A collection of matched items. + + + + Gets or sets the country code. + + The country code. + + + + Gets or sets the type of the place. + + The type of the place. + + + + Gets or sets the address of the data. + + The address of the data. + + + + Gets or sets the country. + + The country. + + + + Gets or sets the address of the street. + + The address of the street. + + + + Gets or sets the full name. + + The full name. + + + + Gets or sets the name of the place. + + The name of the place. + + + + Gets or sets the place id. + + The place id. + + + + Gets or sets the bounding box. + + The bounding box. + + + + The twitter bounding box class. Represents a series of latitude and longitude coordinates that represents an area. + + + + + Gets or sets the type. + + The type of bounding box. + + + + Gets or sets the coordinates. + + The coordinates. + + + + The Direct Messages Command + + + + + Initializes a new instance of the class. + + The request tokens. + The options. + + + + Initializes the command. + + + + + The Delete Direct Message Command class. + + + + + Initializes a new instance of the class. + + The request tokens. + The status id. + The options. + + + + Initializes the command. + + + + + Gets or sets the status id. + + The status id. + + + + The Verify Credentials Options class. Provides a payload for optional parameters for the Verify Credentials Command. + + + + + Initializes a new instance of the class. + + + + + Gets or sets a value indicating whether [include entities]. + + true if [include entities]; otherwise, false. + + + + The twitter response class provides details of the response from an api call to the twitter api. + + + + + + Gets or sets the object that represents the data returned by the request to Twitter. + + The response object. + + + + Gets or sets the result of the request. + + The result. + + + + Gets or sets the request URL. + + The request URL. + + + + Gets the raw json or xml response provided by Twitter. + + The response body. + + + + Gets or sets the error message returned by the Twitter. + + The error message. + + + + Gets or sets the oauth tokens provided for the request. + + The tokens. + + + + Gets or sets a value indicating whether the response was retrieved from a cache. + + true if [response cached]; otherwise, false. + + + + Gets or sets the rate limiting details. + + The rate limiting object. + + + + Gets or sets the OAuth Token Access Level details. + + The access level. + + + + The CursorCursorPagedCommand class. + + The type of BaseObject that the command returns. + + + + + Initializes a new instance of the class. + + The method. + The end point. + The tokens. + The options. + + + + Gets or sets the cursor. + + The cursor. + + Optional. + Breaks the results into pages. + A single page contains 100 users. + + + + + The Retweets of Me options class. Provides optional parameters for the RetweetsOfMeCommand class. + + + + + Gets or sets the since status id. + + The since status id. + + + + Gets or sets the max status id. + + The max status id. + + + + Gets or sets the count of tweets to return. + + The count of tweets. + + + + Gets or sets the page number to return. + + The page number. + + + + Add a member to a list. The authenticated user must own the list to be able to add members to it. Lists are limited to having 500 members. + + + + + Initializes a new instance of the class. + + The request tokens. + The owner username. + The list id. + The user id. + The options. + + + + Initializes the command. + + + + + Gets or sets the user id. + + The user id. + + + + The verify credentials command class. + + + + + Initializes a new instance of the class. + + The request tokens. + The options. + + + + Initializes the command. + + + + + Initializes a new instance of the class. + + The tokens. + The image. + The options. + + + + Initializes the command. + + + + + The twitter list collection class. + + + + + Deserializes the specified value. + + The value. + + + + + Gets or sets the next cursor. + + The next cursor. + + + + Gets or sets the previous cursor. + + The previous cursor. + + + + Gets or sets information about the user's rate usage. + + The rate limiting object. + + + + The Retweets Of Me Command. + + + + + Initializes a new instance of the class. + + The request tokens. + The options. + + + + Initializes the command. + + + + + The available search result type filter options. + + + + + Use Twitter's default + + + + + Include both popular and real time results in the response. + + + + + Return only the most recent results in the response. + + + + + Return only the most popular results in the response. + + + + + The search options class. Provides a payload for optional parameters for the SearchCommand class. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the language. + + The language. + + + + Gets or sets the locale. + + The locale. + + + + Gets or sets the max id. + + The max id. + + + + Gets or sets the number per page. + + The number per page. + + + + Gets or sets the page number. + + The page number. + + + + Gets or sets the since date. + + The since date. + + + + Gets or sets the since id. + + The since id. + + + + Gets or sets the geo code string. + The parameter value is specified by "latitude,longitude,radius", where radius units must be specified as either "mi" (miles) or "km" (kilometers). Note that you cannot use the near operator via the API to geocode arbitrary locations; however you can use this geocode parameter to search near geocodes directly. + + The geo code. + + + + Gets or sets a value indicating whether to prefix the user name to the tweet. + + + true to prefix the user name to the tweet; otherwise, false. + + + + + Gets or sets the until date. + + The until date. + + + + Gets or sets the type of the result. + + The type of the result. + + + + Returns the members of the specified list. + + + + + Initializes a new instance of the class. + + The request tokens. + The options. + + + + Initializes the command. + + + + + The XAuthUtility class. + + + + + Allows OAuth applications to directly exchange Twitter usernames and passwords for OAuth access tokens and secrets. + + The consumer key. + The consumer secret. + The username. + The password. + A instance. + + + + The Serialization Helper class. Provides a simple interface for common serialization tasks. + + The type of object to be deserialized + + + + Deserializes the specified web response. + + The web response data. + The deserialization handler. + + A strongly typed object representing the deserialized data of type + + + + + Deserializes the specified web response. + + The web response data. + + A strongly typed object representing the deserialized data of type + + + + + The JavascriptConversionDelegate. The delegate is invokes when using the JavaScriptSerializer to manually construct a result object. + + Contains nested dictionary objects containing deserialized values for manual parsing. + A strongly typed object representing the deserialized data of type + + + + + The create list command class + + + + + Initializes a new instance of the class. + + The request tokens. + The query. + The options. + + + + Initializes the command. + + + + + Gets or sets the query. + + The query. + + + + The UpdateListOptions class. Provides a payload for optional parameters for the UpdaetListCommand class. + + + + + Gets or sets the name of the list. + + The name of the list. + + + + Gets or sets a value indicating whether this instance is public. + + true if this instance is public; otherwise, false. + + + + Gets or sets the description. + + The description. + + + + The list statuses options class. Provides a payload for the ListStatusesCommand class. + + + + + Gets or sets the since id. + + The since id. + + + + Gets or sets the max id. + + The max id. + + + + Gets or sets the number of items per page to request. + + The number of items per page. + + + + Gets or sets the page. + + The page number. + + + + Gets or sets whether to include entities in the request. + + Boolean. + + + + Provides optional parameters for the method. + + + + + Gets or sets the cursor. + + The cursor. + + + + Check if a user is a member of the specified list. + + + + + Initializes a new instance of the class. + + The request tokens. + The owner username. + The list id. + The user id. + The options. + + + + Initializes the command. + + + + + Provides common color converstion methods + + + + + + Converts the color string to a + + The value. + A representation of the color, or null. + + + + Reads the stream into a byte array. + + The response stream. + A byte array. + + + + The update list command class + + + + + Initializes a new instance of the class. + + The tokens. + The username. + The list id. + The options. + + + + Initializes the command. + + + + + The get list statuses command class + + + + + Initializes a new instance of the class. + + The request tokens. + The username. + The list id. + The options. + + + + Initializes the command. + + + + + Represents a pre-parsed hash tag in a value. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the hash tag text. + + The hash tag text. + + + + Provides methods for reporting users and tweets as inappropriate or spam. + + + + + Blocks the user and reports them for spam/abuse. + + The tokens. + The user id. + The options. + The user details. + + + + Blocks the user and reports them for spam/abuse. + + The tokens. + The user id. + The user details. + + + + Blocks the user and reports them for spam/abuse. + + The tokens. + The user's screen name. + The options. + The user details. + + + + Blocks the user and reports them for spam/abuse. + + The tokens. + The user's screen name. + The user details. + + + + The create list command class + + + + + Initializes a new instance of the class. + + The request tokens. + The options. + + + + Initializes the command. + + + + + Returns the members of the specified list. + + + + + Initializes a new instance of the class. + + The request tokens. + The username. + The list id or slug. + The options. + + + + Initializes the command. + + + + + The Twitter Rate Limit Status class + + + + + Gets the rate limiting status status for the authenticated user. + + The OAuth tokens. + The options. + + A instance. + + + + + Gets the rate limiting status status based on the application's IP address. + + The OAuth tokens. + + A instance. + + + + + Gets the rate limiting status status based on the application's IP address. + + + A instance. + + + + + Gets or sets the remaining hits. + + The remaining hits. + + + + Gets or sets the hourly limit. + + The hourly limit. + + + + Gets or sets the UTC string value of the time rate limiting will reset. + + The reset time string. + + + + The command to update the user's status. (a.k.a. post a new tweet) + + + + + Initializes a new instance of the class. + + The request tokens. + The status text. + The optional properties. + + + + Initializes the command. + + + + + Gets or sets the status text. + + The status text. + + + + The rate limit status command class. + + + + + Initializes a new instance of the class. + + The request tokens. + The options. + + + + Initializes the command. + + + + + The Friends Timeline Command class + + + + + Initializes a new instance of the class. + + The request tokens. + The options. + + + + Inits this instance. + + + + + The Retweets Options class. Provides a payload for optional parameters for the Retweets Command + + + + + Gets or sets the count of statuses to return. + + The number of statuses to return. + + + + The Related Results Command. + + + + + The base address to the API method. + + + + + Initializes a new instance of the class. + + The request tokens. + The status id. + The options. + + + + Initializes the command. + + + + + Provides a payload for optional parameters for the method. + + + + + A hint on the "region" in which to search. If a number, then this is a radius in meters, but it can also take a string that is suffixed with ft to specify feet. If this is not passed in, then it is assumed to be 0m. If coming from a device, in practice, this value is whatever accuracy the device has measuring its location (whether it be coming from a GPS, WiFi triangulation, etc.). + + + + + The minimal granularity of data to return. If this is not passed in, then neighborhood is assumed. city can also be passed. + + + + + A hint as to the number of results to return. This does not guarantee that the number of results returned will equal max_results, but instead informs how many "nearby" results to return. Ideally, only pass in the number of places you intend to display to the user here. + + + + + The Send Direct Message Command class + + + + + Initializes a new instance of the class. + + The request tokens. + The message text. + The user id. + The options. + + + + Initializes a new instance of the class. + + The tokens. + The message text. + Name of the user. + The options. + + + + Initializes a new instance of the class. + + The tokens. + The message text. + The options. + + + + Initializes the command. + + + + + Gets or sets the status text. + + The status text. + + + + Gets or sets the recipient user id. + + The recipient user id. + + + + Gets or sets the name of the recipient user. + + The name of the recipient user. + + + + Optional properties for the method. + + + + + Gets or sets the color of the background. + + The color of the background. + + + + Gets or sets the color of the text. + + The color of the text. + + + + Gets or sets the color of the link. + + The color of the link. + + + + Gets or sets the color of the sidebar fill. + + The color of the sidebar fill. + + + + Gets or sets the color of the sidebar border. + + The color of the sidebar border. + + + + Identifies command classes that must enforce rate limiting. This will cause rate status to be queried before each command call. + + + + + Initializes a new instance of the class. + + + + + The Status Update Options class + + + + + Initializes a new instance of the class. + + + + + Gets or sets the in reply to status id. + + The in reply to status id. + + + + Gets or sets the latitude. + + The latitude. + + + + Gets or sets the longitude. + + The longitude. + + + + Gets or sets a value indicating whether or not to put a pin on the exact coordinates a tweet has been sent from. + + true to put a pin on the exact coordinates; otherwise, false. + + + + Gets or sets a place in the world. These IDs can be retrieved from geo/reverse_geocode. + + The place id. + + + + The retweets command class. + + + + + Initializes a new instance of the class. + + The request tokens. + The status id. + The options. + + + + Initializes the command. + + + + + Gets or sets the status id. + + The status id. + + + + The Retweeted By Me Command. + + + + + Initializes a new instance of the class. + + The request tokens. + The options. + + + + Initializes the command. + + + + + Provides interaction with timelines + + + + + Returns the 20 most recent statuses, including retweets, posted by the authenticating user and that user's friends. This is the equivalent of /timeline/home on the Web. + + The tokens. + The options. + A collection of items. + + + The tokens. + A collection of items. + + + The options. + A collection of items. + + + + Returns the 20 most recent statuses posted by the authenticating user. It is also possible to request another user's timeline by using the screen_name or user_id parameter. + + The oauth tokens. + The options. + + A instance. + + + + + Returns the 20 most recent statuses posted by the authenticating user. It is also possible to request another user's timeline by using the screen_name or user_id parameter. + + The oauth tokens. + + A instance. + + + + + Returns the 20 most recent statuses posted by the authenticating user. It is also possible to request another user's timeline by using the screen_name or user_id parameter. + + The options. + + A instance. + + + + + Gets the public timeline. + + A . + + + + Gets the public timeline. + + The oauth tokens. + + A . + + + + + Gets the public timeline. + + The properties. + + A . + + + + + Gets the public timeline. + + The oauth tokens. + + A . + + + + + Obtains the authorized user's friends timeline. + + The tokens. + A . + + + + Obtains the authorized user's friends timeline. + + The tokens. + The options. + A . + + + + Returns the 20 most recent tweets of the authenticated user that have been retweeted by others. + + The tokens. + The options. + A instance. + + + + Returns the 20 most recent tweets of the authenticated user that have been retweeted by others. + + The tokens. + + A instance. + + + + + Returns the 20 most recent retweets posted by the authenticating user. + + The tokens. + The options. + A instance. + + + + Returns the 20 most recent retweets posted by the authenticating user. + + The tokens. + + A instance. + + + + + Returns the 20 most recent retweets posted by the authenticating user's friends. + + The tokens. + The options. + A instance. + + + + Returns the 20 most recent retweets posted by the authenticating user's friends. + + The tokens. + + A instance. + + + + + Returns the 20 most recent mentions (status containing @username) for the authenticating user. + + The tokens. + The options. + A instance. + + + + Returns the 20 most recent mentions (status containing @username) for the authenticating user. + + The tokens. + + A instance. + + + + + The Create Saved Search Command class. Creates the Saved Search with the query provided as the authenticating user. Returns the saved search when successful. + + + + + Initializes a new instance of the class. + + The tokens. + The query. + The options. + + + + Initializes the command. + + + + + Gets or sets the query. + + The query. + + + + Returns the members of the specified list. + + + + + Initializes a new instance of the class. + + The request tokens. + The options. + + + + Initializes the command. + + + + + Sets one or more hex values that control the color scheme of the authenticating user's profile page on twitter.com + + + + + Initializes a new instance of the class. + + The tokens. + The options. + + + + Initializes the command. + + + + + Indicates that a command class requires authorization tokens. + + + + + Initializes a new instance of the class. + + + + + Describes the access level of the OAuth Token + + + + + The request may not be authenticated or the Access Level header was missing from the response. + + + + + The OAuth token has read access levels only. + + + + + The OAuth token has read write access only. + + + + + The OAuth token has read write and direct messages access. + + + + + There was no OAuth token access level available for reading in the response headers. + + + + + Holds a collection of ID values that are broken into multiple pages. + + + + + Deserializes the specified value. + + The value. + + + + + Annotations are additional pieces of data, supplied by Twitter clients, in a non-structured dictionary. + + The annotations. + + + + Gets or sets the next cursor. + + The next cursor. + + + + Gets or sets the previous cursor. + + The previous cursor. + + + + The retweeted by command class. + + http://dev.twitter.com/doc/get/statuses/:id/retweeted_by + + + + Inits this instance. + + + + + The optional parameters for the class. + + + + + Specifies the number of records to retrieve. Must be less than or equal to 100. + + The count. + + + + Specifies the page of results to retrieve. + + The page. + + + + When set to true each tweet returned in a timeline will include a user object including only the status authors numerical ID. Omit this parameter to receive the complete user object. + + true if [trim user]; otherwise, false. + + + + Gets or sets a value indicating whether entities should be included in the results. + + true if entities should be included; otherwise, false. + + + + The retweeted by ids command class. + + http://dev.twitter.com/doc/get/statuses/:id/retweeted_by/ids + + + + Inits this instance. + + + + + Specifies the number of records to retrieve. Must be less than or equal to 100. + + The count. + + + + Specifies the page of results to retrieve. + + The page. + + + + When set to true each tweet returned in a timeline will include a user object including only the status authors numerical ID. Omit this parameter to receive the complete user object. + + true if [trim user]; otherwise, false. + + + + Gets or sets a value indicating whether entities should be included in the results. + + true if entities should be included; otherwise, false. + + + + The suggested users categories command + + http://dev.twitter.com/doc/get/users/suggestions + + + + Initializes a new instance of the class. + + The tokens. + The options. + + + + Inits this instance. + + + + + The suggested users command class + + http://dev.twitter.com/doc/get/users/suggestions/:slug + + + + Initializes a new instance of the class. + + The tokens. + The category slug. + The options. + + + + Inits this instance. + + + + + Gets or sets the slug. + + The slug. + + + + Represents a suggested user category + + + + + Access to Twitter's suggested user list. This returns the list of suggested user categories. The category can be used in the users/suggestions/category endpoint to get the users in that category. + + The tokens. + The options. + A collection of categories without user data. + + + + Access to Twitter's suggested user list. This returns the list of suggested user categories. The category can be used in the users/suggestions/category endpoint to get the users in that category. + + The tokens. + + A collection of categories without user data. + + + + + Access the users in a given category of the Twitter suggested user list. + + The tokens. + The category slug. + The options. + + It is recommended that end clients cache this data for no more than one hour. + + + + Access the users in a given category of the Twitter suggested user list. + + The tokens. + The category slug. + + It is recommended that end clients cache this data for no more than one hour. + + + + Gets or sets the name. + + The name. + + + + Gets or sets the slug. + + The slug. + + + + Gets or sets the number of users. + Only available in list of categories. + + The number of users. + + + + Gets or sets the users. + Users are only returned for a single category. + + The users. + + + + Represents a suggested category + + + + + The notification follow command class. + + + + + Initializes a new instance of the class. + + The tokens. + The user id. + Name of the screen. + The options. + + + + Inits this instance. + + + + + Gets or sets the user id. + + The user id. + + + + Gets or sets the name of the screen. + + The name of the screen. + + + + Provides methods to update a user's preferences on notifications. For example, whether a user will be notified on mention via SMS. + + + + + Enables device notifications for updates from the specified user. Returns the specified user when successful. + + The tokens. + The user id. + The options. + + + + + Enables device notifications for updates from the specified user. Returns the specified user when successful. + + The tokens. + The user id. + + + + + Enables device notifications for updates from the specified user. Returns the specified user when successful. + + The tokens. + The user's screen name. + The options. + + + + + Enables device notifications for updates from the specified user. Returns the specified user when successful. + + The tokens. + The user's screen name. + + + + + Disables notifications for updates from the specified user to the authenticating user. Returns the specified user when successful. + + The tokens. + The user id. + The options. + + + + + Disables notifications for updates from the specified user to the authenticating user. Returns the specified user when successful. + + The tokens. + The user id. + + + + + Disables notifications for updates from the specified user to the authenticating user. Returns the specified user when successful. + + The tokens. + The user's screen name. + The options. + + + + + Disables notifications for updates from the specified user to the authenticating user. Returns the specified user when successful. + + The tokens. + The user's screen name. + + + + + The notification leave command class. + + + + + Initializes a new instance of the class. + + The tokens. + The user id. + Name of the screen. + The options. + + + + Inits this instance. + + + + + Gets or sets the user id. + + The user id. + + + + Gets or sets the name of the screen. + + The name of the screen. + + + + Initializes a new instance of the class. + + The tokens. + The list id. + The options. + + + + Inits this instance. + + + + + The Get Lists Options class + + + + + Gets or sets the cursor. + + The cursor. + + + + The optional parameters for the class. + + + + + Gets or sets the cursor. + + The cursor. + + + + The optional parameters for the class + + + + + Gets or sets the cursor. + + The cursor. + + + + Initializes a new instance of the class. + + The tokens. + The options. + + + + Inits this instance. + + + + + The optional properties for the class. + + + + + Gets or sets the cursor. + + The cursor. + + + + The optional properties for the class. + + + + + Gets or sets the cursor. + + The cursor. + + + + Returns an array of numeric IDs for every user who has a pending request to follow the authenticating user. + + + + + Initializes a new instance of the class. + + The tokens. + The options. + + + + Inits this instance. + + + + + The blocking command class. + + + + + Initializes a new instance of the class. + + The tokens. + The options. + + + + Inits this instance. + + + + + Provides methods for interacting with user blocks. + + + + + Blocks the user specified as the authenticating user. Destroys a friendship to the blocked user if it exists. + + The tokens. + The user id. + The options. + + The blocked user in the requested format when successful. + + + + + Blocks the user specified as the authenticating user. Destroys a friendship to the blocked user if it exists. + + The tokens. + The user id. + + The blocked user in the requested format when successful. + + + + + Blocks the user specified as the authenticating user. Destroys a friendship to the blocked user if it exists. + + The tokens. + The user's screen name. + The options. + + The blocked user in the requested format when successful. + + + + + Blocks the user specified as the authenticating user. Destroys a friendship to the blocked user if it exists. + + The tokens. + The user's screen name. + + The blocked user in the requested format when successful. + + + + + Unblocks the user specified as the authenticating user. + + The tokens. + The user id. + The options. + + The unblocked user in the requested format when successful. + + + + + Unblocks the user specified as the authenticating user. + + The tokens. + The user id. + + The unblocked user in the requested format when successful. + + + + + Unblocks the user specified as the authenticating user. + + The tokens. + The user's screen name. + The options. + + The unblocked user in the requested format when successful. + + + + + Unblocks the user specified as the authenticating user. + + The tokens. + The user's screen name. + + The unblocked user in the requested format when successful. + + + + + Checks for a block against the the user specified as the authenticating user. + + The tokens. + The user id. + The options. + + The blocked user in the requested format when successful. + + + + + Checks for a block against the the user specified as the authenticating user. + + The tokens. + The user id. + + The blocked user in the requested format when successful. + + + + + Checks for a block against the the user specified as the authenticating user. + + The tokens. + The user's screen name. + The options. + + The blocked user in the requested format when successful. + + + + + Checks for a block against the the user specified as the authenticating user. + + The tokens. + The user's screen name. + + The blocked user in the requested format when successful. + + + + + Returns a collection of user objects that the authenticating user is blocking. + + The tokens. + The options. + + + + + Returns a collection of user objects that the authenticating user is blocking. + + The tokens. + The options. + + + + + Returns an collection of user ids the authenticating user is blocking. + + The tokens. + The options. + A collection of user ids. + + + + Returns an collection of user ids the authenticating user is blocking. + + The tokens. + A collection of user ids. + + + + The blocking ids command class + + + + + Initializes a new instance of the class. + + The tokens. + The options. + + + + Inits this instance. + + + + + The optional parameters for the class. + + + + + Gets or sets the page. + + The page. + + + + The create block command class. + + http://dev.twitter.com/doc/post/blocks/create + + + + Initializes a new instance of the class. + + The tokens. + Name of the screen. + The user id. + The options. + + + + Inits this instance. + + + + + Gets or sets the name of the screen. + + The name of the screen. + + + + Gets or sets the user id. + + The user id. + + + + The destroy block command class. + + http://dev.twitter.com/doc/post/blocks/destroy + + + + Initializes a new instance of the class. + + The tokens. + Name of the screen. + The user id. + The options. + + + + Inits this instance. + + + + + Gets or sets the name of the screen. + + The name of the screen. + + + + Gets or sets the user id. + + The user id. + + + + The exists block command class. + + http://dev.twitter.com/doc/post/blocks/exists + + + + Initializes a new instance of the class. + + The tokens. + Name of the screen. + The user id. + The options. + + + + Inits this instance. + + + + + Gets or sets the name of the screen. + + The name of the screen. + + + + Gets or sets the user id. + + The user id. + + + + The update profile command class. + + + + + Initializes a new instance of the class. + + The tokens. + The options. + + + + Inits this instance. + + + + + Optional properties for the class. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the URL. + + The URL. + + + + Gets or sets the location. + + The location. + + + + Gets or sets the description. + + The description. + + + + Represents a pre-parsed media entity located within the body of a . + + + + + Initializes a new instance of the class. + + + + diff --git a/packages/twitterizer.2.3.3/lib/35/Twitterizer2.dll b/packages/twitterizer.2.3.3/lib/35/Twitterizer2.dll new file mode 100644 index 000000000..417bddae7 Binary files /dev/null and b/packages/twitterizer.2.3.3/lib/35/Twitterizer2.dll differ diff --git a/packages/twitterizer.2.3.3/lib/35/Twitterizer2.license.txt b/packages/twitterizer.2.3.3/lib/35/Twitterizer2.license.txt new file mode 100644 index 000000000..9548bfdb0 --- /dev/null +++ b/packages/twitterizer.2.3.3/lib/35/Twitterizer2.license.txt @@ -0,0 +1,19 @@ +Copyright (c) 2010, Patrick "Ricky" Smith +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + - Neither the name Twitterizer nor the names of its contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/packages/twitterizer.2.3.3/lib/35/Twitterizer2.pdb b/packages/twitterizer.2.3.3/lib/35/Twitterizer2.pdb new file mode 100644 index 000000000..81d6943a7 Binary files /dev/null and b/packages/twitterizer.2.3.3/lib/35/Twitterizer2.pdb differ diff --git a/packages/twitterizer.2.3.3/twitterizer.2.3.3.nupkg b/packages/twitterizer.2.3.3/twitterizer.2.3.3.nupkg new file mode 100644 index 000000000..988160b54 Binary files /dev/null and b/packages/twitterizer.2.3.3/twitterizer.2.3.3.nupkg differ