PageRenderTime 52ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/Code/Channels/Twitter/TwitterClientChannel.cs

http://github.com/waseems/inbox2_desktop
C# | 299 lines | 254 code | 45 blank | 0 comment | 1 complexity | a075b29704097947aa9ed864f4d35f0d MD5 | raw file
Possible License(s): BSD-3-Clause
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Net;
  7. using System.Web;
  8. using System.Xml.Linq;
  9. using Inbox2.Platform.Channels.Entities;
  10. using Inbox2.Platform.Channels.Interfaces;
  11. using Inbox2.Platform.Framework.Extensions;
  12. using Inbox2.Platform.Framework.OAuth;
  13. using TweetSharp;
  14. namespace Inbox2.Channels.Twitter
  15. {
  16. public class TwitterClientChannel : IClientInputChannel, IClientOutputChannel, IClientContactsChannel, IClientStatusUpdatesChannel
  17. {
  18. #region Properties
  19. public IChannelCredentialsProvider CredentialsProvider { get; set; }
  20. public string Hostname
  21. {
  22. get { return "http://twitter.com"; }
  23. set { }
  24. }
  25. public int Port
  26. {
  27. get { return 80; }
  28. set { }
  29. }
  30. public bool IsSecured
  31. {
  32. get { return false; }
  33. set { }
  34. }
  35. public int MaxConcurrentConnections
  36. {
  37. get { return 2; }
  38. set { }
  39. }
  40. public bool IsEnabled { get; set; }
  41. public string Protocol
  42. {
  43. get { return "Twitter API"; }
  44. }
  45. public string SourceAdress
  46. {
  47. get { return CredentialsProvider.GetCredentials().Claim; }
  48. }
  49. public string AuthMessage { get; private set; }
  50. #endregion
  51. public ConnectResult Connect()
  52. {
  53. return ConnectResult.Success;
  54. }
  55. public IEnumerable<ChannelFolder> GetFolders()
  56. {
  57. yield return new ChannelFolder("inbox", "inbox", ChannelFolderType.Inbox);
  58. }
  59. public void SelectFolder(ChannelFolder folder)
  60. {
  61. }
  62. public IEnumerable<ChannelMessageHeader> GetHeaders()
  63. {
  64. return GetDirectMessages();
  65. }
  66. public IEnumerable<ChannelMessage> GetMessage(ChannelMessageHeader header)
  67. {
  68. ChannelMessage message = new ChannelMessage();
  69. message.MessageNumber = header.MessageNumber;
  70. message.MessageIdentifier = header.MessageIdentifier;
  71. message.From = header.From;
  72. message.Context = header.Context;
  73. message.BodyText = header.Body.ToStream();
  74. message.DateReceived = header.DateReceived;
  75. message.IsRead = true;
  76. yield return message;
  77. }
  78. public IEnumerable<ChannelMessageHeader> GetDirectMessages()
  79. {
  80. var service = new TwitterService(ChannelHelper.ConsumerKey, ChannelHelper.ConsumerSecret, ChannelHelper.Token, ChannelHelper.TokenSecret);
  81. var result = service.ListDirectMessagesReceived().Union(service.ListDirectMessagesSent());
  82. foreach (var dm in result)
  83. {
  84. yield return new ChannelMessageHeader
  85. {
  86. MessageIdentifier = dm.Id.ToString(),
  87. MessageNumber = dm.Id.ToString(),
  88. Context = String.Format("DM from {0}", dm.Sender.Name),
  89. From = new SourceAddress(dm.Sender.Id.ToString(), dm.Sender.Name),
  90. Body = dm.TextAsHtml,
  91. DateReceived = dm.CreatedDate.ToLocalTime()
  92. };
  93. }
  94. }
  95. public ChannelSocialProfile GetProfile()
  96. {
  97. var service = new TwitterService(ChannelHelper.ConsumerKey, ChannelHelper.ConsumerSecret, ChannelHelper.Token, ChannelHelper.TokenSecret);
  98. var result = service.GetUserProfile();
  99. return new ChannelSocialProfile
  100. {
  101. Id = result.Id.ToString(),
  102. FullName = result.Name,
  103. AvatarUrl = result.ProfileImageUrl
  104. };
  105. }
  106. public IEnumerable<ChannelContact> GetContacts()
  107. {
  108. var service = new TwitterService(ChannelHelper.ConsumerKey, ChannelHelper.ConsumerSecret, ChannelHelper.Token, ChannelHelper.TokenSecret);
  109. var result = service.ListFriends();
  110. foreach (var user in result)
  111. {
  112. var contact = new ChannelContact { IsSoft = true };
  113. contact.Profile.ChannelProfileKey = user.Id.ToString();
  114. contact.Person.Name = user.Name;
  115. contact.Profile.ScreenName = user.ScreenName;
  116. contact.Profile.SourceAddress = new SourceAddress(user.Id.ToString(), user.Name);
  117. contact.Profile.ProfileType = ProfileType.Social;
  118. contact.Profile.Url = user.Url;
  119. contact.Profile.Title = user.Description;
  120. contact.Profile.Location = user.Location;
  121. contact.Profile.ChannelAvatar = new ChannelAvatar();
  122. contact.Profile.ChannelAvatar.Url = user.ProfileImageUrl;
  123. yield return contact;
  124. }
  125. }
  126. IClientContactsChannel IClientContactsChannel.Clone()
  127. {
  128. return new TwitterClientChannel
  129. {
  130. Hostname = Hostname,
  131. Port = Port,
  132. IsSecured = IsSecured,
  133. MaxConcurrentConnections = MaxConcurrentConnections,
  134. CredentialsProvider = CredentialsProvider
  135. };
  136. }
  137. public void Send(ChannelMessage message)
  138. {
  139. var service = new TwitterService(ChannelHelper.ConsumerKey, ChannelHelper.ConsumerSecret, ChannelHelper.Token, ChannelHelper.TokenSecret);
  140. foreach (var singleToName in message.To)
  141. {
  142. service.SendDirectMessage(Int32.Parse(singleToName.Address), message.BodyText.ReadString());
  143. }
  144. }
  145. public IEnumerable<ChannelStatusUpdate> GetMentions(int pageSize)
  146. {
  147. var service = new TwitterService(ChannelHelper.ConsumerKey, ChannelHelper.ConsumerSecret, ChannelHelper.Token, ChannelHelper.TokenSecret);
  148. var result = service.ListTweetsMentioningMe();
  149. foreach (var tweet in result)
  150. {
  151. yield return new ChannelStatusUpdate
  152. {
  153. ChannelStatusKey = tweet.Id.ToString(),
  154. Status = tweet.Text,
  155. From = new SourceAddress(
  156. tweet.User.ScreenName,
  157. tweet.User.Name,
  158. tweet.User.ProfileImageUrl.Replace("_normal.jpg", "_mini.jpg")),
  159. DatePosted = tweet.CreatedDate
  160. };
  161. }
  162. }
  163. public IEnumerable<ChannelStatusUpdate> GetUpdates(int pageSize)
  164. {
  165. var service = new TwitterService(ChannelHelper.ConsumerKey, ChannelHelper.ConsumerSecret, ChannelHelper.Token, ChannelHelper.TokenSecret);
  166. var result = service.ListTweetsOnFriendsTimeline();
  167. foreach (var tweet in result)
  168. {
  169. yield return new ChannelStatusUpdate
  170. {
  171. ChannelStatusKey = tweet.Id.ToString(),
  172. Status = tweet.Text,
  173. From = new SourceAddress(
  174. tweet.User.ScreenName,
  175. tweet.User.Name,
  176. tweet.User.ProfileImageUrl.Replace("_normal.jpg", "_mini.jpg")),
  177. DatePosted = tweet.CreatedDate
  178. };
  179. }
  180. }
  181. public IEnumerable<ChannelStatusUpdate> GetUserUpdates(string username, int count)
  182. {
  183. var service = new TwitterService(ChannelHelper.ConsumerKey, ChannelHelper.ConsumerSecret, ChannelHelper.Token, ChannelHelper.TokenSecret);
  184. var result = service.ListTweetsOnSpecifiedUserTimeline(Int32.Parse(username));
  185. foreach (var tweet in result)
  186. {
  187. yield return new ChannelStatusUpdate
  188. {
  189. ChannelStatusKey = tweet.Id.ToString(),
  190. Status = tweet.Text,
  191. From = new SourceAddress(
  192. tweet.User.ScreenName,
  193. tweet.User.Name,
  194. tweet.User.ProfileImageUrl.Replace("_normal.jpg", "_mini.jpg")),
  195. DatePosted = tweet.CreatedDate
  196. };
  197. }
  198. }
  199. public IEnumerable<ChannelStatusUpdate> GetUpdates(string keyword, int pageSize)
  200. {
  201. var service = new TwitterService(ChannelHelper.ConsumerKey, ChannelHelper.ConsumerSecret, ChannelHelper.Token, ChannelHelper.TokenSecret);
  202. var result = service.Search(keyword, pageSize);
  203. foreach (var tweet in result.Statuses)
  204. {
  205. yield return new ChannelStatusUpdate
  206. {
  207. ChannelStatusKey = tweet.Id.ToString(),
  208. Status = tweet.Text,
  209. From = new SourceAddress(
  210. tweet.Author.ScreenName,
  211. tweet.Author.ScreenName,
  212. tweet.Author.ProfileImageUrl.Replace("_normal.jpg", "_mini.jpg")),
  213. DatePosted = tweet.CreatedDate
  214. };
  215. }
  216. }
  217. public void UpdateMyStatus(ChannelStatusUpdate update)
  218. {
  219. var service = new TwitterService(ChannelHelper.ConsumerKey, ChannelHelper.ConsumerSecret, ChannelHelper.Token, ChannelHelper.TokenSecret);
  220. if (!String.IsNullOrEmpty(update.InReplyTo))
  221. service.SendTweet(update.Status, Int64.Parse(update.InReplyTo));
  222. else
  223. service.SendTweet(update.Status);
  224. }
  225. IClientStatusUpdatesChannel IClientStatusUpdatesChannel.Clone()
  226. {
  227. return new TwitterClientChannel
  228. {
  229. Hostname = Hostname,
  230. Port = Port,
  231. IsSecured = IsSecured,
  232. MaxConcurrentConnections = MaxConcurrentConnections,
  233. CredentialsProvider = CredentialsProvider
  234. };
  235. }
  236. public bool Disconnect()
  237. {
  238. return true;
  239. }
  240. public IClientInputChannel Clone()
  241. {
  242. TwitterClientChannel channel = new TwitterClientChannel();
  243. channel.Hostname = Hostname;
  244. channel.Port = Port;
  245. channel.IsSecured = IsSecured;
  246. channel.MaxConcurrentConnections = MaxConcurrentConnections;
  247. channel.CredentialsProvider = CredentialsProvider;
  248. return channel;
  249. }
  250. public void Dispose()
  251. {
  252. }
  253. }
  254. }