/// <summary> /// Retweets a specified tweet /// </summary> private void Retweet(string command) { if (User.IsMissingArgs(command) == false) /* It's just an exception catching method, don't mind it */ { if (command.Split(' ')[1].Length != 2) { ScreenDraw.ShowMessage("Wrong syntax. Use /rt [id]"); } else { SendTweetOptions replyOpts = TweetIdentification.GetTweetID(command.Split(' ')[1]); RetweetOptions retweetOpts = new RetweetOptions(); long tweetID = Convert.ToInt64(replyOpts.InReplyToStatusId); retweetOpts.Id = tweetID; InteractiveTweet tweet = new InteractiveTweet(); try { tweet = TweetIdentification.FindTweet(tweetID); } catch (KeyNotFoundException exceptionInfo) { ScreenDraw.ShowMessage(exceptionInfo.Message); return; } if (tweet.IsDirectMessage) { ScreenDraw.ShowMessage("You can't retweet DMs, silly"); return; } User.Account.Retweet(retweetOpts); if (User.Account.Response.Error == null) { ScreenDraw.ShowMessage("Retweeted"); ScreenDraw redraw = new ScreenDraw(); redraw.ShowTimeline(); } else { ScreenDraw.ShowMessage(User.Account.Response.Error.Code + ": " + User.Account.Response.Error.Message); } } } }
/// <summary> /// Updates the list of tweets one has /// </summary> public void GetTweets() { CleanTweets(); ListTweetsOnHomeTimelineOptions updateOpts = new ListTweetsOnHomeTimelineOptions(); updateOpts.Count = 25; var numUpdates = User.Account.ListTweetsOnHomeTimeline(updateOpts); List<TwitterStatus> unformattedTweets = new List<TwitterStatus>(); try { unformattedTweets = numUpdates.ToList(); } catch (ArgumentNullException) { TwitterResponse resp = User.Account.Response; if (resp.RateLimitStatus.RemainingHits == 0) { ScreenDraw.ShowMessage("You have hit the API Limit. Please try again in a few minutes"); } else if (resp.RateLimitStatus.RemainingHits < 0) { /* This shouldn't happen ever anymore, but keeping it here JUUUST in case */ ScreenDraw.ShowMessage("An error occured when retrieving tweets from Twitter. Please restart ClutterFeed"); System.Threading.Thread.Sleep(1000); ScreenDraw.Tweets.Dispose(); ScreenDraw.HeadLine.Dispose(); Curses.EndWin(); Environment.Exit(1); } return; } localTweetList = new List<InteractiveTweet>(); /* Resets the full list */ for (int index = 0; index < unformattedTweets.Count; index++) { InteractiveTweet formattedTweet = new InteractiveTweet(); formattedTweet = ConvertTweet(unformattedTweets[index]); localTweetList.Add(formattedTweet); } }
/// <summary> /// Converts a raw DM into an InteractiveTweet object /// </summary> private InteractiveTweet ConvertDM(TwitterDirectMessage message) { TweetIdentification create = new TweetIdentification(); if (message.Author.ScreenName != GetUpdates.userScreenName) { try { SoundPlayer notification = new SoundPlayer(); notification.SoundLocation = Environment.CurrentDirectory + "/notification.wav"; notification.Play(); } catch (Exception) { } } InteractiveTweet dm = new InteractiveTweet(); dm.AuthorScreenName = message.Author.ScreenName; dm.Contents = message.Text; dm.ID = message.Id; dm.IsDirectMessage = true; dm.TimePosted = message.CreatedDate; dm.TweetIdentification = create.GenerateIdentification(); return dm; }
/// <summary> /// Override for mentions only /// </summary> public InteractiveTweet ConvertTweet(TwitterStatus tweet, bool isMention) { if (isMention) { InteractiveTweet formedTweet = new InteractiveTweet(); /* Big block of filling the InteractiveTweet properties */ formedTweet.AuthorScreenName = "@" + tweet.Author.ScreenName; formedTweet.AuthorDisplayName = tweet.User.Name; formedTweet.AuthorDisplayName = tweet.User.Name; if (Settings.ShortLinks) { formedTweet.Contents = EscapeChars(tweet.Text); } else { formedTweet.Contents = tweet.Text; if (tweet.Entities.Urls.Count != 0) { foreach (var link in tweet.Entities.Urls) { if (link.ExpandedValue.Replace("http://", "").Replace("https://", "").Length <= ScreenInfo.WindowWidth - 8) { formedTweet.Contents = formedTweet.Contents.Replace(link.Value, link.ExpandedValue); formedTweet.Contents = formedTweet.Contents.Replace("http://", "").Replace("https://", ""); } } } if (tweet.Entities.Media.Count != 0) { foreach (var image in tweet.Entities.Media) { formedTweet.Contents = formedTweet.Contents.Replace(image.Url, image.DisplayUrl); } } formedTweet.Contents = EscapeChars(formedTweet.Contents); } formedTweet.ID = tweet.Id; TweetIdentification generateID = new TweetIdentification(); formedTweet.TweetIdentification = generateID.GenerateIdentification(); formedTweet.IsFavorited = tweet.IsFavorited; formedTweet.IsMention = true; formedTweet.LinkToTweet = @"https://twitter.com/" + tweet.Author.ScreenName + @"/status/" + tweet.Id; formedTweet.FavoriteCount = tweet.FavoriteCount; formedTweet.RetweetCount = tweet.RetweetCount; formedTweet.TimePosted = tweet.CreatedDate; if (formedTweet.Contents.Contains("@" + userScreenName) && formedTweet.IsMention == false) { try { SoundPlayer notification = new SoundPlayer(); notification.SoundLocation = Environment.CurrentDirectory + "/notification.wav"; notification.Play(); } catch (Exception) { } } return formedTweet; } else { return ConvertTweet(tweet); } }