PageRenderTime 51ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/DotNetAge2/DNA.Mvc.UI/Extensions/ShareLinks.cs

#
C# | 226 lines | 177 code | 19 blank | 30 comment | 19 complexity | 8186d476b428ce1772b5803a27b1527d MD5 | raw file
Possible License(s): GPL-2.0
  1. // Copyright (c) 2011 Ray Liang (http://www.dotnetage.com)
  2. // Dual licensed under the MIT and GPL licenses:
  3. // http://www.opensource.org/licenses/mit-license.php
  4. // http://www.gnu.org/licenses/gpl.html
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Web.WebPages;
  10. using System.IO;
  11. using System.Web;
  12. using System.Web.WebPages.Scope;
  13. using System.Web.Helpers;
  14. using System.Net;
  15. namespace DNA.Mvc.UI
  16. {
  17. public class ShareLinks : HelperPage
  18. {
  19. static ShareLinks()
  20. {
  21. _bitlyApiKey = new object();
  22. _bitlyLogin = new object();
  23. //_allSites = new Lazy<IEnumerable<LinkShareSite>>(() => from site in (LinkShareSite[]) Enum.GetValues(typeof(LinkShareSite))
  24. // where site != LinkShareSite.All
  25. // select site);
  26. }
  27. public ShareLinks() { }
  28. public static HelperResult GetHtml(string pageTitle, string pageLinkBack = null, string twitterUserName = null, string additionalTweetText = null)
  29. {
  30. return new HelperResult(delegate(TextWriter __razor_helper_writer)
  31. {
  32. var Url = UrlUtility.CreateUrlHelper();
  33. string str;
  34. if (pageTitle.IsEmpty())
  35. throw new ArgumentNullException("pageTitle");
  36. ConstructPageLinkBack(ref pageLinkBack, out str);
  37. pageLinkBack = HttpUtility.UrlEncode(pageLinkBack);
  38. str = HttpUtility.UrlEncode(str);
  39. pageTitle = HttpUtility.UrlEncode(pageTitle);
  40. //using (IEnumerator<LinkShareSite> enumerator = GetSitesInOrder(linkSites).GetEnumerator())
  41. //{
  42. // while (enumerator.MoveNext())
  43. // {
  44. // switch (enumerator.Current)
  45. // {
  46. // case LinkShareSite.Delicious:
  47. HelperPage.WriteLiteralTo(__razor_helper_writer, "<a href=\"http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url=");
  48. HelperPage.WriteTo(__razor_helper_writer, str);
  49. HelperPage.WriteLiteralTo(__razor_helper_writer, "&amp;title=");
  50. HelperPage.WriteTo(__razor_helper_writer, pageTitle);
  51. HelperPage.WriteLiteralTo(__razor_helper_writer, "\" target=\"_blank\" title=\"Add to del.icio.us\">\r\n <img alt=\"Add to del.icio.us\" src=\"" + Url.Content("~/content/images/icon_delicious_16.png") + "\" style=\"border:0; height:16px; width:16px; margin:0 1px;\" title=\"Add to del.icio.us\" />\r\n </a>\r\n");
  52. // break;
  53. // case LinkShareSite.Digg:
  54. HelperPage.WriteLiteralTo(__razor_helper_writer, "<a href=\"http://digg.com/submit?url=");
  55. HelperPage.WriteTo(__razor_helper_writer, pageLinkBack);
  56. HelperPage.WriteLiteralTo(__razor_helper_writer, "&amp;title=");
  57. HelperPage.WriteTo(__razor_helper_writer, pageTitle);
  58. HelperPage.WriteLiteralTo(__razor_helper_writer, "\" target=\"_blank\" title=\"Digg!\">\r\n <img alt=\"Digg!\" src=\"" + Url.Content("~/content/images/icon_digg_16.gif") + "\" style=\"border:0; height:16px; width:16px; margin:0 1px;\" title=\"Digg!\" />\r\n </a>\r\n");
  59. // break;
  60. // case LinkShareSite.GoogleBuzz:
  61. HelperPage.WriteLiteralTo(__razor_helper_writer, " <a href=\"http://www.google.com/reader/link?url=");
  62. HelperPage.WriteTo(__razor_helper_writer, str);
  63. HelperPage.WriteLiteralTo(__razor_helper_writer, "&amp;title=");
  64. HelperPage.WriteTo(__razor_helper_writer, pageTitle);
  65. HelperPage.WriteLiteralTo(__razor_helper_writer, "\" target=\"_blank\" title=\"Share on Google Buzz\">\r\n <img alt=\"Share on Google Buzz\" src=\"" + Url.Content("~/content/images/icon_google_buzz_16.jpg") + "\" style=\"border:0; height:16px; width:16px; margin:0 1px;\" title=\"Share on Google Buzz\" />\r\n </a>\r\n");
  66. // break;
  67. // case LinkShareSite.Facebook:
  68. HelperPage.WriteLiteralTo(__razor_helper_writer, "<a href=\"http://www.facebook.com/sharer.php?u=");
  69. HelperPage.WriteTo(__razor_helper_writer, str);
  70. HelperPage.WriteLiteralTo(__razor_helper_writer, "&amp;t=");
  71. HelperPage.WriteTo(__razor_helper_writer, pageTitle);
  72. HelperPage.WriteLiteralTo(__razor_helper_writer, "\" target=\"_blank\" title=\"Share on Facebook\">\r\n <img alt=\"Share on Facebook\" src=\"" + Url.Content("~/content/images/ico_facebook_16.ico") + "\" style=\"border:0; height:16px; width:16px; margin:0 1px;\" title=\"Share on Facebook\" />\r\n </a>\r\n");
  73. // break;
  74. // case LinkShareSite.Reddit:
  75. HelperPage.WriteLiteralTo(__razor_helper_writer, "<a href=\"http://reddit.com/submit?url=");
  76. HelperPage.WriteTo(__razor_helper_writer, pageLinkBack);
  77. HelperPage.WriteLiteralTo(__razor_helper_writer, "&amp;title=");
  78. HelperPage.WriteTo(__razor_helper_writer, pageTitle);
  79. HelperPage.WriteLiteralTo(__razor_helper_writer, "\" target=\"_blank\" title=\"Reddit!\">\r\n <img alt=\"Reddit!\" src=\"" + Url.Content("~/content/images/ico_reddit.ico") + "\" style=\"border:0; height:16px; width:16px; margin:0 1px;\" title=\"Reddit!\" />\r\n </a>\r\n");
  80. // break;
  81. // case LinkShareSite.StumbleUpon:
  82. HelperPage.WriteLiteralTo(__razor_helper_writer, "<a href=\"http://www.stumbleupon.com/submit?url=");
  83. HelperPage.WriteTo(__razor_helper_writer, pageLinkBack);
  84. HelperPage.WriteLiteralTo(__razor_helper_writer, "&amp;title=");
  85. HelperPage.WriteTo(__razor_helper_writer, pageTitle);
  86. HelperPage.WriteLiteralTo(__razor_helper_writer, "\" target=\"_blank\" title=\"Stumble it!\">\r\n <img alt=\"Stumble it!\" src=\"" + Url.Content("~/content/images/icon_su_round_16.gif") + "\" style=\"border:0; height:16px; width:16px; margin:0 1px;\" title=\"Stumble it!\" />\r\n </a>\r\n");
  87. // break;
  88. // case LinkShareSite.Twitter:
  89. string str2 = string.Empty;
  90. if (!twitterUserName.IsEmpty())
  91. {
  92. str2 = str2 + ", (via @@" + twitterUserName + ")";
  93. }
  94. if (!additionalTweetText.IsEmpty())
  95. {
  96. str2 = str2 + ' ' + additionalTweetText;
  97. }
  98. str2 = HttpUtility.UrlEncode(str2);
  99. HelperPage.WriteLiteralTo(__razor_helper_writer, " <a href=\"http://twitter.com/home/?status=");
  100. HelperPage.WriteTo(__razor_helper_writer, pageTitle);
  101. HelperPage.WriteLiteralTo(__razor_helper_writer, "%3a+");
  102. HelperPage.WriteTo(__razor_helper_writer, str);
  103. HelperPage.WriteTo(__razor_helper_writer, str2);
  104. HelperPage.WriteLiteralTo(__razor_helper_writer, "\" target=\"_blank\" title=\"Share on Twitter\">\r\n <img alt=\"Share on Twitter\" src=\"" + Url.Content("~/content/images/ico_twitter_16.ico") + "\" style=\"border:0; height:16px; width:16px; margin:0 1px;\" title=\"Share on Twitter\" />\r\n </a>\r\n");
  105. // break;
  106. // }
  107. //}
  108. //}
  109. });
  110. }
  111. private static string GetShortenedUrl(string pageLinkBack)
  112. {
  113. if (!BitlyLogin.IsEmpty() && !BitlyApiKey.IsEmpty())
  114. {
  115. string str = HttpUtility.UrlEncode(pageLinkBack);
  116. string key = "Bitly_pageLinkBack_" + BitlyApiKey + "_" + str;
  117. string webResponse = WebCache.Get(key) as string;
  118. if (webResponse != null)
  119. {
  120. return webResponse;
  121. }
  122. string address = "http://api.bit.ly/v3/shorten?format=txt&longUrl=" + str + "&login=" + BitlyLogin + "&apiKey=" + BitlyApiKey;
  123. try
  124. {
  125. webResponse = GetWebResponse(address);
  126. }
  127. catch (WebException)
  128. {
  129. return pageLinkBack;
  130. }
  131. if (webResponse != null)
  132. {
  133. WebCache.Set(key, webResponse, 20, true);
  134. return webResponse;
  135. }
  136. }
  137. return pageLinkBack;
  138. }
  139. internal static readonly object _bitlyApiKey;
  140. internal static readonly object _bitlyLogin;
  141. public static string BitlyApiKey
  142. {
  143. get
  144. {
  145. return (ScopeStorage.CurrentScope[_bitlyApiKey] as string);
  146. }
  147. set
  148. {
  149. if (value == null)
  150. {
  151. throw new ArgumentNullException("value");
  152. }
  153. ScopeStorage.CurrentScope[_bitlyApiKey] = value;
  154. }
  155. }
  156. public static string BitlyLogin
  157. {
  158. get
  159. {
  160. return (ScopeStorage.CurrentScope[_bitlyLogin] as string);
  161. }
  162. set
  163. {
  164. if (value == null)
  165. {
  166. throw new ArgumentNullException("value");
  167. }
  168. ScopeStorage.CurrentScope[_bitlyLogin] = value;
  169. }
  170. }
  171. private static string GetWebResponse(string address)
  172. {
  173. string str;
  174. WebRequest request = WebRequest.Create(address);
  175. request.Method = "GET";
  176. request.Timeout = 0x1388;
  177. using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
  178. {
  179. if (response.StatusCode != HttpStatusCode.OK)
  180. {
  181. str = null;
  182. }
  183. else
  184. {
  185. using (Stream stream = response.GetResponseStream())
  186. {
  187. using (MemoryStream stream2 = new MemoryStream())
  188. {
  189. stream.CopyTo(stream2);
  190. str = Encoding.UTF8.GetString(stream2.ToArray());
  191. }
  192. }
  193. }
  194. }
  195. return str;
  196. }
  197. private static void ConstructPageLinkBack(ref string pageLinkBack, out string shortenedUrl)
  198. {
  199. HttpContext current = HttpContext.Current;
  200. if ((pageLinkBack == null) && (current != null))
  201. {
  202. pageLinkBack = current.Request.Url.GetComponents(UriComponents.Path | UriComponents.SchemeAndServer, UriFormat.Unescaped);
  203. }
  204. shortenedUrl = GetShortenedUrl(pageLinkBack);
  205. }
  206. }
  207. }