private async void PostTweet()
        {
            Messenger.Default.Send<GenericMessage<object>>(new GenericMessage<object>((object)false), (object)ViewModelMessages.EnableReplyOptions);
            this.sendingTweetInProgress = true;
            this.PostTweetEnabled = false;
            this.TweetEntryEnabled = false;
            this.ImageUploadButtonIsEnabled = false;
            this.PostTweetProgressVisibility = Visibility.Visible;
            bool error = false;
            int numberOfStatus = 0;
            if ((this.CharCount <= SettingsData.Instance.TweetCharLimit || Enumerable.Count<ITweetService>(Enumerable.Where<ITweetService>((IEnumerable<ITweetService>)CoreServices.Instance.TweetServices, (Func<ITweetService, bool>)(x => x.OverrideTweetCharLimit))) > 0) && this.CharCount > 0)
            {
                try
                {
                    this.TweetTextCounter();
                    if (this.CurrentlySelectedImage != null && !this.TwitterImageServiceIsEnabled)
                    {
                        this.uploadImageCountDownEvent = new CountdownEvent(1);
                        this.ProcessImageUpload(this.CurrentlySelectedImage.FilePath, (Action<string>)(s =>
                        {
                            TwitViewModel temp_978 = this;
                            string temp_982 = temp_978.ActualTweetText + " " + s;
                            temp_978.ActualTweetText = temp_982;
                            this.TweetTextCounter();
                        }));
                        await Task.Run((Action)(() => this.uploadImageCountDownEvent.Wait()));
                    }
                    if (this.imageUploadsFailed)
                    {
                        await System.Windows.Application.Current.Dispatcher.BeginInvoke((Action)(() =>
                        {
                            SimpleErrorPrompt local_0 = new SimpleErrorPrompt()
                            {
                                DataContext = (object)new
                                {
                                    ErrorHeading = "image upload failed",
                                    ErrorText = "Image failed to upload, please try again."
                                }
                            };
                            Messenger.Default.Send<PromptMessage>(new PromptMessage()
                            {
                                IsModal = true,
                                PromptView = (FrameworkElement)local_0,
                                IsCentered = false
                            }, (object)ViewModelMessages.ShowSlidePrompt);
                        }), new object[0]);
                        error = true;
                        this.sendingTweetInProgress = false;
                        this.PostTweetEnabled = true;
                        this.TweetEntryEnabled = true;
                        this.ImageUploadButtonIsEnabled = true;
                        this.PostTweetProgressVisibility = Visibility.Collapsed;
                        return;
                    }
                    else if (this.CharCount > SettingsData.Instance.TweetCharLimit && Enumerable.Count<ITweetService>(Enumerable.Where<ITweetService>((IEnumerable<ITweetService>)CoreServices.Instance.TweetServices, (Func<ITweetService, bool>)(x => x.OverrideTweetCharLimit))) == 0)
                    {
                        await System.Windows.Application.Current.Dispatcher.BeginInvoke((Action)(() => Messenger.Default.Send<DialogMessage>(new DialogMessage(string.Empty, (Action<MessageBoxResult>)(o => { })), (object)DialogType.TweetLength)), new object[0]);
                        error = true;
                        return;
                    }
                    else
                    {
                        TwitterResponse<Status> updateResponse = (TwitterResponse<Status>)null;
                        TwitterResponse<TwitterDirectMessage> directMessageResponse = (TwitterResponse<TwitterDirectMessage>)null;
                        Match dmMatch = (Match)null;
                        string userName = string.Empty;
                        string tweetpoststring = this.ActualTweetText;
                        if (this.newTweetType == TwitViewModel.NewTweetType.DirectMessage)
                        {
                            dmMatch = TwitViewModel.DM_EXPRESSION.Match(tweetpoststring);
                            userName = dmMatch.Groups[1].Value;
                            tweetpoststring = tweetpoststring.Replace(dmMatch.Groups[0].Value, "").Trim();
                        }
                        else
                        {
                            foreach (ITweetService tweetService in CoreServices.Instance.TweetServices)
                            {
                                if (tweetService.WantsPreCreation)
                                {
                                    PreTweetCreationResponse creationResponse = tweetService.PreTweetCreation(tweetpoststring, this.CharCount, this.ReplyToID.ToString(), this.UserName, this.newTweetType == TwitViewModel.NewTweetType.DirectMessage, App.AppState.Accounts[this.TwitterAccountID].TwitterAccountName);
                                    if (string.IsNullOrEmpty(creationResponse.Error) && !string.IsNullOrEmpty(creationResponse.TweetContent))
                                        tweetpoststring = creationResponse.TweetContent;
                                }
                            }
                        }
                        if (this.newTweetType == TwitViewModel.NewTweetType.DirectMessage)
                        {
                            if (dmMatch.Success && userName.Length > 0)
                            {
                                directMessageResponse = await DirectMessages.SendAsync(App.AppState.Accounts[this.TwitterAccountID].Tokens, userName, tweetpoststring, (OptionalProperties)null);
                                if (directMessageResponse != null && directMessageResponse.Result == RequestResult.Success)
                                {
                                    TwitterDirectMessage responseObject = directMessageResponse.ResponseObject;
                                    this.lastTweet = new UndoTweetState()
                                    {
                                        Id = responseObject.Id,
                                        LastTweetText = this.ActualTweetText,
                                        TweetType = TwitViewModel.NewTweetType.DirectMessage,
                                        UserName = this.UserName
                                    };
                                    this.CurrentTweetDocument = (FlowDocument)null;
                                    if (responseObject != null)
                                    {
                                        numberOfStatus = responseObject.Sender.NumberOfStatuses;
                                        App.AppState.Accounts[this.TwitterAccountID].Settings.TwitterUserImage = responseObject.Sender.ProfileImageSecureLocation;
                                    }
                                }
                                else
                                {
                                    this.StatusType = -2;
                                    this.StatusText = Enumerable.First<TwitterError>(directMessageResponse.Errors).Message;
                                }
                                this.StatusLabelVisibility = Visibility.Visible;
                            }
                        }
                        else
                        {
                            switch (this.newTweetType)
                            {
                                case TwitViewModel.NewTweetType.Reply:
                                    StatusUpdateOptions statusUpdateOptons = MetroTwitTwitterizer.StatusUpdateOptions;
                                    statusUpdateOptons.InReplyToStatusId = this.ReplyToID;
                                    if (this.CurrentlySelectedImage != null && this.TwitterImageServiceIsEnabled)
                                    {
                                        updateResponse = await Tweets.UpdateWithMediaAsync(App.AppState.Accounts[this.TwitterAccountID].Tokens, tweetpoststring, this.BufferFromImage(this.CurrentlySelectedImage.Image), statusUpdateOptons);
                                        this.DecrementPostTweetCounter();
                                        break;
                                    }
                                    else
                                    {
                                        updateResponse = await Tweets.UpdateAsync(App.AppState.Accounts[this.TwitterAccountID].Tokens, tweetpoststring, statusUpdateOptons);
                                        break;
                                    }
                                case TwitViewModel.NewTweetType.Retweet:
                                    if (this.CurrentlySelectedImage != null && this.TwitterImageServiceIsEnabled)
                                    {
                                        updateResponse = await Tweets.UpdateWithMediaAsync(App.AppState.Accounts[this.TwitterAccountID].Tokens, tweetpoststring, this.BufferFromImage(this.CurrentlySelectedImage.Image), MetroTwitTwitterizer.StatusUpdateOptions);
                                        this.DecrementPostTweetCounter();
                                        break;
                                    }
                                    else
                                    {
                                        updateResponse = await Tweets.UpdateAsync(App.AppState.Accounts[this.TwitterAccountID].Tokens, tweetpoststring, MetroTwitTwitterizer.StatusUpdateOptions);
                                        break;
                                    }
                                default:
                                    if (this.CurrentlySelectedImage != null && this.TwitterImageServiceIsEnabled)
                                    {
                                        updateResponse = await Tweets.UpdateWithMediaAsync(App.AppState.Accounts[this.TwitterAccountID].Tokens, tweetpoststring, this.BufferFromImage(this.CurrentlySelectedImage.Image), MetroTwitTwitterizer.StatusUpdateOptions);
                                        this.DecrementPostTweetCounter();
                                        break;
                                    }
                                    else
                                    {
                                        updateResponse = await Tweets.UpdateAsync(App.AppState.Accounts[this.TwitterAccountID].Tokens, tweetpoststring, MetroTwitTwitterizer.StatusUpdateOptions);
                                        break;
                                    }
                            }
                            if (updateResponse != null && updateResponse.Result == RequestResult.Success)
                            {
                                Status responseObject = updateResponse.ResponseObject;
                                this.lastTweet = new UndoTweetState()
                                {
                                    Id = responseObject.Id,
                                    LastTweetText = this.ActualTweetText,
                                    TweetType = this.newTweetType,
                                    UserName = this.UserName,
                                    ReplyToID = this.ReplyToID
                                };
                                this.CurrentTweetDocument = (FlowDocument)null;
                                if (responseObject != null)
                                {
                                    numberOfStatus = responseObject.User.NumberOfStatuses;
                                    App.AppState.Accounts[this.TwitterAccountID].Settings.TwitterUserImage = responseObject.User.ProfileImageSecureLocation;
                                    foreach (ITweetService tweetService in CoreServices.Instance.TweetServices)
                                    {
                                        if (tweetService.WantsPostCreation)
                                            tweetService.PostTweetCreation(responseObject.Text, this.CharCount, responseObject.InReplyToStatusId.ToString(), responseObject.InReplyToScreenName, false, App.AppState.Accounts[this.TwitterAccountID].TwitterAccountName, responseObject.Id);
                                    }

                                }
                            }
                            else
                            {
                                this.StatusType = -2;
                                this.StatusText = Enumerable.First<TwitterError>(updateResponse.Errors).Message;
                                if (this.StatusText == "Status is a duplicate.")
                                    this.StatusText = "Tweet error: tweet is a duplicate of a last tweet posted.";
                                this.StatusLabelVisibility = Visibility.Visible;
                            }
                        }
                    }
                }
                catch
                {
                    error = true;
                }
            }
            else
                error = true;
            if (!this.imageUploadsFailed && !error)
            {
                base.RaisePropertyChanged("SingleImageTypeEnabled");
                this.CurrentlySelectedImage = (SingleImageUploadRequest)null;
                this.EnableTweetArea();
                if (numberOfStatus > 0)
                {
                    this.PostTweetEnabled = false;
                    this.ResetNewTweet(true);
                    if (App.AppState.Accounts[this.TwitterAccountID].TwitterUserTweetCount != numberOfStatus.ToString() + " tweets")
                    {
                        App.AppState.Accounts[this.TwitterAccountID].TwitterUserTweetCount = numberOfStatus.ToString() + " tweets";
                        Messenger.Default.Send<GenericMessage<object>>(new GenericMessage<object>((object)null), (object)this.MultiAccountifyToken((System.Enum)ViewModelMessages.ProfileUpdated));
                    }
                }
            }
            else
                this.EnableTweetArea();
        }
 public void UndoTweet(UndoTweetState state, bool undoLastTweetTriggered = false)
 {
     ProgressPromptViewModel progressPromptViewModel = new ProgressPromptViewModel
     {
         ErrorMessage = "The DeLorean is not working! Please try again.",
         ProgressText = "back to the future!...",
         Title = "undoing the tweet"
     };
     string errorTitle = "tweet could not be undone";
     Action<RequestResult> UndoCallback = result => System.Windows.Application.Current.Dispatcher.Invoke(delegate
     {
         if (result == RequestResult.Success)
         {
             this.ActualTweetText = state.LastTweetText;
             this.UserName = state.UserName;
             this.newTweetType = state.TweetType;
             this.ReplyToID = state.ReplyToID;
             Messenger.Default.Send<GenericMessage<object>>(new GenericMessage<object>(string.Empty), this.MultiAccountifyToken(ViewModelMessages.NewTweetEditUpdateText));
             Messenger.Default.Send<GenericMessage<object>>(new GenericMessage<object>(null), ViewModelMessages.UndoTweetClose);
         }
         else
         {
             progressPromptViewModel.Title = errorTitle;
             progressPromptViewModel.ShowAnimation = false;
             progressPromptViewModel.ShowErrorMessage = true;
             if (undoLastTweetTriggered)
             {
                 this.lastTweet = null;
             }
         }
     });
     Messenger.Default.Send<DialogMessage>(new DialogMessage(string.Empty, delegate(MessageBoxResult answer)
     {
         if (answer == MessageBoxResult.Yes)
         {
             Messenger.Default.Send<GenericMessage<object>>(new GenericMessage<object>(progressPromptViewModel), DialogType.UndoTweet);
             if ((state.TweetType == NewTweetType.Normal) || (state.TweetType == NewTweetType.Reply))
             {
                 CommonCommands.DeleteTweet(state.Id, this.TwitterAccountID, UndoCallback, true);
             }
             else if (state.TweetType == NewTweetType.DirectMessage)
             {
                 CommonCommands.DeleteDirectMessage(state.Id, this.TwitterAccountID, UndoCallback, true);
             }
         }
     }), DialogType.UndoTweetConfirmation);
 }