TwitterViewModel.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using LinqToTwitter;
  2. using TwitterSearch.Portable.Models;
  3. using Refractored.Xam.TTS;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Collections.ObjectModel;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace TwitterSearch.Portable.ViewModels
  11. {
  12. public class TwitterViewModel
  13. {
  14. public ObservableCollection<Tweet> Tweets { get; set; }
  15. public bool IsBusy { get; set; }
  16. public TwitterViewModel()
  17. {
  18. Tweets = new ObservableCollection<Tweet>();
  19. }
  20. public async Task LoadTweetsCommand(string search)
  21. {
  22. if (IsBusy)
  23. return;
  24. IsBusy = true;
  25. try
  26. {
  27. Tweets.Clear();
  28. var auth = new ApplicationOnlyAuthorizer()
  29. {
  30. CredentialStore = new InMemoryCredentialStore
  31. {
  32. ConsumerKey = "ZTmEODUCChOhLXO4lnUCEbH2I",
  33. ConsumerSecret = "Y8z2Wouc5ckFb1a0wjUDT9KAI6DUat5tFNdmIkPLl8T4Nyaa2J",
  34. },
  35. };
  36. await auth.AuthorizeAsync();
  37. var twitterContext = new TwitterContext(auth);
  38. var queryResponse = await
  39. (from tweet in twitterContext.Search
  40. where tweet.Type == SearchType.Search &&
  41. tweet.Query == search &&
  42. tweet.Count == 100
  43. select tweet).SingleOrDefaultAsync();
  44. if (queryResponse == null || queryResponse.Statuses == null)
  45. return;
  46. var tweets =
  47. (from tweet in queryResponse.Statuses
  48. select new Tweet
  49. {
  50. StatusID = tweet.StatusID,
  51. ScreenName = tweet.User.ScreenNameResponse,
  52. Text = tweet.Text,
  53. CurrentUserRetweet = tweet.CurrentUserRetweet,
  54. CreatedAt = tweet.CreatedAt,
  55. Url = string.Format("https://m.twitter.com/{0}/status/{1}", tweet.User.ScreenNameResponse, tweet.StatusID),
  56. Image = (tweet.RetweetedStatus != null && tweet.RetweetedStatus.User != null ?
  57. tweet.RetweetedStatus.User.ProfileImageUrl.Replace("http://", "https://") : tweet.User.ProfileImageUrl.Replace("http://", "https://"))
  58. }).ToList();
  59. foreach (var tweet in tweets)
  60. {
  61. Tweets.Add(tweet);
  62. }
  63. }
  64. catch
  65. {
  66. }
  67. IsBusy = false;
  68. }
  69. public void Speak(int index)
  70. {
  71. var tweet = Tweets[index];
  72. CrossTextToSpeech.Current.Speak(tweet.Text);
  73. }
  74. }
  75. }