//package com.lgq.rssreader.share;
//
//public class TwitterShare {
// private const string twitterApiUrl = "https://api.twitter.com/oauth/authorize";
// private const string twitterRequestTokenUrl = "https://api.twitter.com/oauth/request_token";
// private const string twitterAccessTokenUrl = "https://api.twitter.com/oauth/access_token/";
// private const string twitterPostUrl = "https://api.twitter.com/1/statuses/update.json";
//
// #region IBlogShare ��Ա
//
// public void BeginLogin(PhoneApplicationPage page, string apiKey, string secretKey)
// {
// WebClient client = new WebClient();
//
// IDictionary<string, string> param = new Dictionary<string, string>();
//
// param.Add("oauth_callback", "www.twitter.com");
// param.Add("oauth_consumer_key", HttpUtility.UrlEncode(Constants.TwitterApiKey));
// param.Add("oauth_nonce", HttpUtility.UrlEncode(Helper.ConvertDateTimeToStamp(DateTime.Now).ToString()));
// param.Add("oauth_signature_method",HttpUtility.UrlEncode("HMAC-SHA1"));
// param.Add("oauth_timestamp", HttpUtility.UrlEncode(Helper.ConvertDateTimeToStamp(DateTime.Now).ToString()));
// param.Add("oauth_version", HttpUtility.UrlEncode("1.0"));
//
// param.Add("oauth_signature", HttpUtility.UrlEncode(SignTwitter("POST", twitterRequestTokenUrl, param.OrderBy(p => p.Key), Constants.TwitterApiSecret + "&")));
//
// //oauth_consumer_key="cChZNFj6T5R0TigYB9yd1w",
// //oauth_nonce="ea9ec8429b68d6b77cd5600adbbb0456",
// //oauth_signature="F1Li3tvehgcraF8DMJ7OyxO4w9Y%3D",
// //oauth_signature_method="HMAC-SHA1",
// //oauth_timestamp="1318467427",
// //oauth_version="1.0"
//
// StringBuilder sb = new StringBuilder();
// foreach (KeyValuePair<string, string> pair in param)
// {
// sb.Append(pair.Key + "=" + pair.Value + "&");
// }
//
// sb.Remove(sb.Length - 1, 1);
//
// //Common.Helper.BuildLoginPage(page, AccountType.Twitter);
//
// //Helper.browserControl.Navigate(new Uri(twitterRequestTokenUrl + "?" + sb.ToString()));
//
// client.UploadStringAsync(new Uri(twitterRequestTokenUrl),"POST", sb.ToString());
//
// client.UploadStringCompleted += (sender, args) =>
// {
// if(args.Error == null)
// {
// //oauth_token=opknaEaCfXb3QYn4RPDHYT5QmMyDXSHj7iCrqNl5Q&
// //oauth_token_secret=ejocIHGBLfhev5lclZHZTk8v2FF1UNPyVYH3SPuclyw&
// //oauth_callback_confirmed=true
// string[] tokens = args.Result.Split('&');
// string oauth_token = tokens[0].Split('=')[1];
// string oauth_token_secret = tokens[1].Split('=')[1];
//
// Common.Helper.BuildLoginPage(page, AccountType.Twitter);
//
// Helper.browserControl.Navigate(new Uri(twitterApiUrl + "?oauth_token=" + oauth_token));
//
// Helper.browserControl.Navigating += (o, eventArgs) =>
// {
// string returnBackUri = eventArgs.Uri.ToString();
// int index = returnBackUri.IndexOf("www.twitter.com");
// if(index != -1)
// {
// Deployment.Current.Dispatcher.BeginInvoke(() =>
// {
// Common.Helper.RemoveBrowser();
// });
//
// string tokenString = returnBackUri.Substring(index);
//
// int questionMark = tokenString.IndexOf('?');
//
// string query = tokenString.Substring(questionMark);
//
// if(!query.Contains("denied"))
// {
// string token = query.Split('&')[0].Split('=')[1];
// string oauth_verifier = query.Split('&')[1].Split('=')[1];
//
// WebClient accessTokenClient = new WebClient();
//
// IDictionary<string, string> accessTokenParam = new Dictionary<string, string>();
//
// accessTokenParam.Add("oauth_consumer_key", HttpUtility.UrlEncode(Constants.TwitterApiKey));
// accessTokenParam.Add("oauth_nonce", HttpUtility.UrlEncode(Helper.ConvertDateTimeToStamp(DateTime.Now).ToString()));
// accessTokenParam.Add("oauth_signature_method", HttpUtility.UrlEncode("HMAC-SHA1"));
// accessTokenParam.Add("oauth_timestamp", HttpUtility.UrlEncode(Helper.ConvertDateTimeToStamp(DateTime.Now).ToString()));
// accessTokenParam.Add("oauth_token", HttpUtility.UrlEncode(token));
// accessTokenParam.Add("oauth_version", HttpUtility.UrlEncode("1.0"));
//
// accessTokenParam.Add("oauth_signature", HttpUtility.UrlEncode(SignTwitter("POST", twitterAccessTokenUrl, accessTokenParam.OrderBy(p => p.Key), Constants.TwitterApiSecret + "&" + oauth_token_secret)));
//
// StringBuilder accessTokenBuilder = new StringBuilder();
// foreach (KeyValuePair<string, string> pair in accessTokenParam)
// {
// accessTokenBuilder.Append(pair.Key + "=" + pair.Value + "&");
// }
//
// accessTokenBuilder.Remove(accessTokenBuilder.Length - 1, 1);
//
// accessTokenClient.UploadStringAsync(new Uri(twitterAccessTokenUrl), "POST", accessTokenBuilder.ToString());
//
// accessTokenClient.UploadStringCompleted += (sender1, completedEventArgs) =>
// {
// if (completedEventArgs.Error == null)
// {
// string result = completedEventArgs.Result;
// //oauth_token=280556231-lTJadMPvNPeOBZGuIhzOGyDDJ449XcqL6o7BPhuc&
// // oauth_token_secret=mKH9gRNq8sx3uEGaaQ1OSo8GYRD0ZKXdChycsKwA&
// // user_id=280556231&
// // screen_name=luguoqing
//
// string accessToken = result.Split('&')[0].Split('=')[1];
// string oauth_accesstoken_secret = result.Split('&')[1].Split('=')[1];
// string user_id = result.Split('&')[2].Split('=')[1];
// string screen_name = result.Split('&')[3].Split('=')[1];
//
// TwitterAccount account = new TwitterAccount();
// account.Save("AccessToken", accessToken);
// account.Save("oauth_token_secret", oauth_accesstoken_secret);
// account.Save("user_id", user_id);
// account.Save("screen_name", screen_name);
//
// if (LoginCallBack != null)
// {
// LoginCallBack(this, new ShareEventArgs<TwitterAccount>(true, account));
// }
// }
// else
// {
// if (LoginCallBack != null)
// {
// LoginCallBack(this, new ShareEventArgs<TwitterAccount>(new Exception(Resources.StringResources.FailedToLoginPleaseKeepConnection)));
// }
// }
// };
// }
// else
// {
// if (LoginCallBack != null)
// {
// LoginCallBack(this, new ShareEventArgs<TwitterAccount>(new Exception(Resources.StringResources.PleaseAuthorizedToAccessTwitter)));
// }
// }
// }
// //else
// //{
// // if (LoginCallBack != null && eventArgs.Uri.Host == "")
// // {
// // LoginCallBack(this, new ShareEventArgs<TwitterAccount>(false, null));
// // }
// //}
// };
// }
// else
// {
// if(LoginCallBack != null)
// {
// LoginCallBack(this, new ShareEventArgs<TwitterAccount>(new Exception(Resources.StringResources.FailedToLoginPleaseKeepConnection)));
// }
// }
// };
// }
//
// private string SignTwitter(string httpMethod, string url, IOrderedEnumerable<KeyValuePair<string, string>> param, string secretKey)
// {
// StringBuilder sb = new StringBuilder();
// sb.Append(httpMethod.ToUpper() + "&");
// sb.Append(UrlEncode(url) + "&");
// foreach (KeyValuePair<string, string> pair in param)
// {
// sb.Append(UrlEncode(pair.Key + "=" + pair.Value + "&"));
// }
// sb.Remove(sb.Length - 3, 3);
//
// System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
//
// byte[] keyByte = encoding.GetBytes(secretKey);
//
// HMACSHA1 method = new HMACSHA1(keyByte);
//
// byte[] message = encoding.GetBytes((sb.ToString()));
//
// return Convert.ToBase64String(method.ComputeHash(message), 0, method.ComputeHash(message).Length);
//
// //return encoding.GetString(method.ComputeHash(message));
// }
//
// protected string unreservedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~";
//
// /// <summary>
// /// This is a different Url Encode implementation since the default .NET one outputs the percent encoding in lower case.
// /// While this is not a problem with the percent encoding spec, it is used in upper case throughout OAuth
// /// </summary>
// /// <param name="value">The value to Url encode</param>
// /// <returns>Returns a Url encoded string</returns>
// protected string UrlEncode(string value)
// {
// StringBuilder result = new StringBuilder();
//
// foreach (char symbol in value)
// {
// if (unreservedChars.IndexOf(symbol) != -1)
// {
// result.Append(symbol);
// }
// else
// {
// result.Append('%' + String.Format("{0:X2}", (int)symbol));
// }
// }
//
// return result.ToString();
// }
//
// public event LoginCompletedHandler<TwitterAccount> LoginCallBack;
//
// public void BeginShare(Blog blog, TwitterAccount account)
// {
// WebClient client = new WebClient();
//
// IDictionary<string, string> param = new Dictionary<string, string>();
//
// param.Add("status", HttpUtility.UrlEncode(blog.Title).ToUpper());
// //param.Add("include_entities", "true");
// param.Add("oauth_consumer_key", HttpUtility.UrlEncode(Constants.TwitterApiKey));
// param.Add("oauth_nonce", HttpUtility.UrlEncode(Helper.ConvertDateTimeToStamp(DateTime.Now).ToString()));
// param.Add("oauth_signature_method",HttpUtility.UrlEncode("HMAC-SHA1"));
// param.Add("oauth_timestamp", HttpUtility.UrlEncode(Helper.ConvertDateTimeToStamp(DateTime.Now).ToString()));
// param.Add("oauth_version", HttpUtility.UrlEncode("1.0"));
// param.Add("oauth_token", HttpUtility.UrlEncode(account.Load("AccessToken")));
//
// param.Add("oauth_signature", HttpUtility.UrlEncode(SignTwitter("POST", twitterPostUrl, param.OrderBy(p => p.Key), Constants.TwitterApiSecret + "&" + account.Load("oauth_token_secret"))));
//
// StringBuilder sb = new StringBuilder();
// foreach (KeyValuePair<string, string> pair in param)
// {
// sb.Append(pair.Key + "=" + pair.Value + "&");
// }
//
// sb.Remove(sb.Length - 1, 1);
//
// client.UploadStringAsync(new Uri(twitterPostUrl),"POST", sb.ToString());
//
// client.UploadStringCompleted += (sender, args) =>
// {
// if(args.Error == null)
// {
// if (ShareCallBack != null)
// {
// ShareCallBack(this, new ShareEventArgs<TwitterAccount>(true, account));
// }
// }
// else
// {
// if(ShareCallBack != null)
// {
// ShareCallBack(this, new ShareEventArgs<TwitterAccount>(new Exception(args.Error.Message)));
// }
// }
// };
// }
//
// public event ShareCompletedHandler<TwitterAccount> ShareCallBack;
//}