示例#1
0
        /// <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);
                    }

                }
            }
        }
示例#2
0
        /// <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);
            }
        }
示例#3
0
        /// <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;
        }
示例#4
0
        /// <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);
            }
        }