public void isReplyToItem(ApnItem item)
        {
            if (item == null)
            {
                return;
            }
            autoCompeteTextbox_post.Text = "@" + item.apnItem.user.username + " ";
            inReplyToId            = item.Id;
            labelInReplyTo.Content = "In reply to @" + item.AuthorName;
            labelInReplyTo.ToolTip = item.Text;
            buttonSendPost.Content = "Send reply";

            labelInReplyTo.Visibility = Visibility.Visible;
            List <string> alreadyShownUser  = new List <string>();
            int           positionOfCursor  = autoCompeteTextbox_post.Text.Length;
            int           lengthOfSelection = 0;

            if (item.accountId != 0)
            {
                try
                {
                    alreadyShownUser.Add("@" + item.receivingAccount.username);
                }
                catch { }
            }
            alreadyShownUser.Add("@" + item.apnItem.user.username.ToLower());

            comboBoxAccount.comboBoxAccounts.SelectedItem = item.receivingAccount;

            autoCompeteTextbox_post.textBoxContent.Select(positionOfCursor, lengthOfSelection);
            autoCompeteTextbox_post.textBoxContent.Focus();
        }
Exemplo n.º 2
0
        private void buttonPrivateMessage_Click_1(object sender, RoutedEventArgs e)
        {
            Button button = sender as Button;

            if (button != null)
            {
                ApnItem item = button.CommandParameter as ApnItem;
                if (item != null)
                {
                    UserInterface.ComposeNewApnPost composeWindow = new ComposeNewApnPost();
                    string username = "";
                    if (item.isPrivateMessage)
                    {
                        username = item.apnMessage.user.username;
                    }
                    else
                    {
                        if (item.isReposted)
                        {
                            username = item.apnItem.repost_of.user.username;
                        }
                        else
                        {
                            username = item.apnItem.user.username;
                        }
                    }
                    composeWindow.isPrivateMessage(username);
                    composeWindow.Show();
                }
            }
        }
Exemplo n.º 3
0
        public ShowConversationWindow(ApnItem item)
        {
            InitializeComponent();
            if (item == null)
            {
                return;
            }
            conversationItems = new ObservableCollection <ApnItem>();
            startItem         = item;
            listBoxItems.listView_Tweets.ItemsSource = conversationItems;
            listBoxItems.listView_Tweets.Items.SortDescriptions.Add(new SortDescription("CreatedAt", ListSortDirection.Descending));

            backgroundWorkerBuildConversation = new System.ComponentModel.BackgroundWorker();
            backgroundWorkerBuildConversation.WorkerSupportsCancellation = true;
            backgroundWorkerBuildConversation.WorkerReportsProgress      = true;
            backgroundWorkerBuildConversation.ProgressChanged           += new ProgressChangedEventHandler(backgroundWorkerBuildConversation_ProgressChanged);
            backgroundWorkerBuildConversation.DoWork             += new System.ComponentModel.DoWorkEventHandler(backgroundWorkerBuildConversation_DoWork);
            backgroundWorkerBuildConversation.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(backgroundWorkerBuildConversation_RunWorkerCompleted);
            backgroundWorkerBuildConversation.RunWorkerAsync();
            if (AppController.Current.mainWindow != null)
            {
                this.Top = AppController.Current.mainWindow.Top;
                if (AppController.Current.mainWindow.Left > this.Width + 5)
                {
                    this.Left = AppController.Current.mainWindow.Left - this.Width - 5;
                }
                else
                {
                    this.Left = AppController.Current.mainWindow.Left + AppController.Current.mainWindow.Width + 5;
                }
            }

            Show();
        }
Exemplo n.º 4
0
        void backgroundWorkerBuildConversation_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
        {
            ApnItem item = (ApnItem)e.UserState;

            item.accountId = startItem.accountId;
            conversationItems.Add(item);
        }
Exemplo n.º 5
0
        void backgroundWorkerRecentPosts_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            ApnItem item = e.UserState as ApnItem;

            if (item != null)
            {
                recentPosts.Add(item);
            }
        }
 public void setToBeEditedItem(ApnItem item)
 {
     toBeEditedItem = item;
     if (item != null)
     {
         autoCompeteTextbox_post.textBoxContent.Text = item.Text;
         labelInReplyTo.Content    = "Editing post - old version will be deleted";
         labelInReplyTo.Visibility = Visibility.Visible;
     }
 }
Exemplo n.º 7
0
        private void ButtonConversation_Click_1(object sender, RoutedEventArgs e)
        {
            Button button = sender as Button;

            if (button != null)
            {
                ApnItem item = button.CommandParameter as ApnItem;
                if (item != null)
                {
                    UserInterface.Apn.ShowConversationWindow window = new UserInterface.Apn.ShowConversationWindow(item);
                }
            }
        }
Exemplo n.º 8
0
        static void twitterUser_Click(object sender, RoutedEventArgs e)
        {
            Hyperlink link  = sender as Hyperlink;
            IItem     iitem = link.DataContext as IItem;

            if (iitem.GetType() == typeof(TwitterItem))
            {
                try
                {
                    Person person = API.TweetSharpConverter.getPersonFromLogin(link.TargetName, link.DataContext as AccountTwitter);
                    UserInterface.ShowUser showUser = new UserInterface.ShowUser();
                    showUser.setPerson(person, link.DataContext as AccountTwitter);
                    showUser.Show();
                }
                catch
                {
                    try
                    {
                        System.Diagnostics.Process.Start("http://www.twitter.com/" + link.TargetName);
                    }
                    catch (Exception exp)
                    {
                        AppController.Current.sendNotification("Error", "Opening link failed", "While tryping to open the link Windows failed with following message: " + exp.Message, null, null);
                        AppController.Current.Logger.writeToLogfile(exp);
                    }
                }
            }
            else if (iitem.GetType() == typeof(ApnItem))
            {
                try
                {
                    ApnItem item = iitem as ApnItem;
                    UserInterface.Apn.UserInfo userInfo = new UserInterface.Apn.UserInfo(item.receivingAccount, link.TargetName);
                    userInfo.Show();
                }
                catch
                {
                    try
                    {
                        System.Diagnostics.Process.Start("http://alpha.app.net/" + link.TargetName);
                    }
                    catch (Exception exp)
                    {
                        AppController.Current.sendNotification("Error", "Opening link failed", "While tryping to open the link Windows failed with following message: " + exp.Message, null, null);
                        AppController.Current.Logger.writeToLogfile(exp);
                    }
                }
            }
        }
Exemplo n.º 9
0
        private void contextMenuShowClientHomepage_Click_1(object sender, RoutedEventArgs e)
        {
            ApnItem item = this.DataContext as ApnItem;

            if (item != null)
            {
                if (!string.IsNullOrEmpty(item.clientUrl))
                {
                    try
                    {
                        System.Diagnostics.Process.Start(item.clientUrl);
                    }
                    catch { }
                }
            }
        }
Exemplo n.º 10
0
        void menuItemCopyTweet_Click(object sender, RoutedEventArgs e)
        {
            ApnItem item = this.DataContext as ApnItem;

            if (item != null)
            {
                if (item.isReposted && item.apnItem != null)
                {
                    Clipboard.SetText(item.apnItem.repost_of.text);
                }
                else
                {
                    Clipboard.SetText(item.Text);
                }
            }
        }
Exemplo n.º 11
0
        private void buttonReply_Click_1(object sender, RoutedEventArgs e)
        {
            ApnItem item = this.DataContext as ApnItem;

            if (item != null)
            {
                if (item.isPrivateMessage)
                {
                    buttonPrivateMessage_Click_1(sender, e);
                }
                else
                {
                    UserInterface.ComposeNewApnPost composeWindow = new ComposeNewApnPost();
                    composeWindow.isReplyToItem(item);
                    composeWindow.Show();
                }
            }
        }
Exemplo n.º 12
0
        private void ButtonRepostedAuthor_Click_1(object sender, RoutedEventArgs e)
        {
            Button button = sender as Button;

            if (button != null)
            {
                ApnItem item = button.CommandParameter as ApnItem;
                if (item != null)
                {
                    AppNetDotNet.Model.Post repostedPost = item.apnItem.repost_of;
                    if (repostedPost != null)
                    {
                        UserInterface.Apn.UserInfo userInfo = new UserInterface.Apn.UserInfo(item.receivingAccount, repostedPost.user);
                        userInfo.Show();
                    }
                }
            }
        }
Exemplo n.º 13
0
        void backgroundWorkerUpdateUser_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            ApnItem item = e.UserState as ApnItem;

            if (e.ProgressPercentage == 25)
            {
                // followings
                Tuple <List <User>, ApiCallResponse> followingsOfUser = e.UserState as Tuple <List <User>, ApiCallResponse>;
                if (followingsOfUser != null)
                {
                    followings = followingsOfUser;
                }
                else
                {
                    followings.Item1.AddRange(followingsOfUser.Item1);
                }
            }
            else if (e.ProgressPercentage == 50)
            {
                // followers
                Tuple <List <User>, ApiCallResponse> followersOfUser = e.UserState as Tuple <List <User>, ApiCallResponse>;
                if (followersOfUser != null)
                {
                    followers = followersOfUser;
                }
                else
                {
                    followers.Item1.AddRange(followersOfUser.Item1);
                }
                createFriendshipOverview(user.username);
            }
            else if (e.ProgressPercentage == 75)
            {
                // stars
            }
            else if (e.ProgressPercentage == 100)
            {
                User updatedUser = e.UserState as User;
                if (updatedUser != null)
                {
                    this.user = updatedUser;
                }
            }
        }
Exemplo n.º 14
0
        private void ButtonAuthor_Click(object sender, RoutedEventArgs e)
        {
            ApnItem item = this.DataContext as ApnItem;

            if (item != null)
            {
                AppNetDotNet.Model.User user;
                if (item.isPrivateMessage)
                {
                    user = item.apnMessage.user;
                }
                else
                {
                    user = item.apnItem.user;
                }
                UserInterface.Apn.UserInfo userInfo = new UserInterface.Apn.UserInfo(item.receivingAccount, user);
                userInfo.Show();
            }
        }
Exemplo n.º 15
0
        private void buttonRepost_Click_1(object sender, RoutedEventArgs e)
        {
            ApnItem item = this.DataContext as ApnItem;

            if (item != null)
            {
                if (item.receivingAccount != null)
                {
                    string itemId          = item.apnItem.id;
                    bool   isRepostedByYou = item.apnItem.you_reposted;
                    if (item.apnItem.repost_of != null)
                    {
                        itemId          = item.apnItem.repost_of.id;
                        isRepostedByYou = item.apnItem.repost_of.you_reposted;
                    }
                    if (!isRepostedByYou)
                    {
                        Tuple <AppNetDotNet.Model.Post, AppNetDotNet.ApiCalls.ApiCallResponse> response = AppNetDotNet.ApiCalls.Posts.repost(item.receivingAccount.accessToken, itemId);
                        if (response.Item2.success)
                        {
                            item.apnItem.you_reposted = true;
                        }
                        else
                        {
                            MessageBox.Show(response.Item2.errorDescription, response.Item2.errorMessage);
                        }
                    }
                    else
                    {
                        Tuple <AppNetDotNet.Model.Post, AppNetDotNet.ApiCalls.ApiCallResponse> response = AppNetDotNet.ApiCalls.Posts.unrepost(item.receivingAccount.accessToken, itemId);
                        if (response.Item2.success)
                        {
                            item.apnItem.you_reposted = false;
                        }
                        else
                        {
                            MessageBox.Show(response.Item2.errorDescription, response.Item2.errorMessage);
                        }
                    }
                }
            }
        }
Exemplo n.º 16
0
        void backgroundWorkerRecentPosts_DoWork(object sender, DoWorkEventArgs e)
        {
            Tuple <List <Post>, ApiCallResponse> items;
            ParametersMyStream parameter = new ParametersMyStream();

            parameter.count = 20;
            items           = Posts.getByUsernameOrId(account.accessToken, user.id, parameter);
            if (items.Item2.success)
            {
                foreach (Post post in items.Item1)
                {
                    ApnItem item = new ApnItem(post, account);
                    if (item != null)
                    {
                        item.receivingAccount = account;
                        backgroundWorkerRecentPosts.ReportProgress(100, item);
                    }
                }
            }
        }
Exemplo n.º 17
0
        private void contextMenuFilterClient_Click_1(object sender, RoutedEventArgs e)
        {
            ApnItem item = this.DataContext as ApnItem;

            if (item != null)
            {
                if (!string.IsNullOrEmpty(item.ClientName))
                {
                    try
                    {
                        if (AppController.Current.AllFilters.Where(f => f.FilterString.ToLower() == item.ClientName.ToLower() && f.FilterClient).Count() > 0)
                        {
                            Filter existingFilter = AppController.Current.AllFilters.Where(f => f.FilterString.ToLower() == item.ClientName.ToString().ToLower() && f.FilterClient).First();
                            if (existingFilter != null)
                            {
                                if (!AppController.Current.CurrentView.subscribedFilter.Contains(existingFilter))
                                {
                                    AppController.Current.CurrentView.subscribeToFilter(existingFilter.Id);
                                }
                            }
                        }
                        else
                        {
                            Filter filter = new Filter();
                            filter.Name            = "Mute client " + item.ClientName;
                            filter.FilterString    = item.ClientName;
                            filter.FilterAuthor    = false;
                            filter.FilterClient    = true;
                            filter.FilterText      = false;
                            filter.IsExcludeFilter = true;
                            filter.FilterRetweeter = false;
                            AppController.Current.AllFilters.Add(filter);
                            AppController.Current.CurrentView.subscribeToFilter(filter.Id);
                        }
                    }
                    catch { }
                }
            }
        }
Exemplo n.º 18
0
        private void filter_update()
        {
            ListOfItems.listView_Tweets.Items.Filter = delegate(object obj)
            {
                IItem item = obj as IItem;
                if (item != null)
                {
                    bool show_text = true;
                    bool show_type = true;

                    if (string.IsNullOrEmpty(filter_text))
                    {
                        show_text = true;
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(item.Text) && !string.IsNullOrEmpty(item.AuthorName))
                        {
                            if (item.Text.ToLower().Contains(filter_text.ToLower()) || item.AuthorName.ToLower().Contains(filter_text.ToLower()))
                            {
                                AppController.Current.Logger.addDebugMessage("Item has been decided to be shown in text search", filter_text.ToLower(), type: DebugMessage.DebugMessageTypes.Display, item: item);
                                show_text = true;
                            }
                            else
                            {
                                AppController.Current.Logger.addDebugMessage("Item has been decided to be NOT shown in text search", filter_text.ToLower(), type: DebugMessage.DebugMessageTypes.Display, item: item);
                                show_text = false;
                            }
                        }
                        else
                        {
                            AppController.Current.Logger.addDebugMessage("Item has been decided to be NOT shown in filter", "Item text or AuthorName is null", type: DebugMessage.DebugMessageTypes.Display, item: item);
                            show_text = false;
                        }
                    }

                    if (!string.IsNullOrEmpty(filter_type))
                    {
                        if (filter_type.StartsWith("twitter"))
                        {
                            TwitterItem twitterItem = item as TwitterItem;
                            if (twitterItem == null)
                            {
                                show_type = false;
                            }
                            else
                            {
                                switch (filter_type)
                                {
                                case "twitterAll":
                                    show_type = true;
                                    break;

                                case "twitterTimeline":
                                    show_type = (!twitterItem.isDirectMessage && !twitterItem.isMention && !twitterItem.isRetweeted && !twitterItem.isSearchResult && !twitterItem.isList);
                                    break;

                                case "twitterMentions":
                                    show_type = twitterItem.isMention;
                                    break;

                                case "twitterDM":
                                    show_type = twitterItem.isDirectMessage;
                                    break;

                                case "twitterRetweets":
                                    show_type = twitterItem.isRetweeted;
                                    break;

                                case "twitterFavs":
                                    show_type = twitterItem.isFavorited;
                                    break;

                                case "twitterSearchResults":
                                    show_type = twitterItem.isSearchResult;
                                    break;

                                case "twitterListEntries":
                                    show_type = twitterItem.isList;
                                    break;

                                default:
                                    show_type = false;
                                    break;
                                }
                            }
                        }
                        else if (filter_type.StartsWith("apn"))
                        {
                            ApnItem apnItem = item as ApnItem;
                            if (apnItem == null)
                            {
                                show_type = false;
                            }
                            else
                            {
                                switch (filter_type)
                                {
                                case "apnAll":
                                    show_type = true;
                                    break;

                                case "apnPersonalStream":

                                    break;

                                case "apnMentions":
                                    show_type = apnItem.isMention;
                                    break;

                                case "apnPM":
                                    show_type = apnItem.isPrivateMessage;
                                    break;

                                case "apnReposts":
                                    show_type = apnItem.isReposted;
                                    break;

                                case "apnFavs":
                                    throw new NotImplementedException();
                                    break;

                                case "apnPhotos":
                                    show_type = apnItem.hasEmbeddedImages;
                                    break;

                                default:
                                    show_type = false;
                                    break;
                                }
                            }
                        }
                        else if (filter_type.StartsWith("fb"))
                        {
                            FacebookItem fbItem = item as FacebookItem;
                            if (fbItem == null)
                            {
                                show_type = false;
                            }
                            else
                            {
                                switch (filter_type)
                                {
                                case "fbAll":
                                    show_type = true;
                                    break;

                                case "fbStatusMessages":
                                    show_type = fbItem.MessageType == FacebookItem.MessageTypes.StatusMessage;
                                    break;

                                case "fbLinks":
                                    show_type = fbItem.MessageType == FacebookItem.MessageTypes.Link;
                                    break;

                                case "fbPhotos":
                                    show_type = fbItem.MessageType == FacebookItem.MessageTypes.Photo;
                                    break;

                                case "fbVideos":
                                    show_type = fbItem.MessageType == FacebookItem.MessageTypes.Video;
                                    break;

                                case "fbEvents":
                                    show_type = fbItem.MessageType == FacebookItem.MessageTypes.Event;
                                    break;

                                case "fbNotes":
                                    show_type = fbItem.MessageType == FacebookItem.MessageTypes.Note;
                                    break;

                                case "fbCheckIns":
                                    show_type = fbItem.MessageType == FacebookItem.MessageTypes.CheckIn;
                                    break;

                                default:
                                    show_type = false;
                                    break;
                                }
                            }
                        }
                        else
                        {
                            show_type = false;
                        }
                    }
                    else
                    {
                        show_type = true;
                    }

                    return(show_text && show_type);
                }
                else
                {
                    AppController.Current.Logger.addDebugMessage("Item has been decided to be NOT shown in filter", "It is null", type: DebugMessage.DebugMessageTypes.Display, item: item);
                    return(false);
                }
            };
        }
Exemplo n.º 19
0
        void generateElementsTextblock(Entities inlines)
        {
            this.Inlines.Clear();
            try
            {
                ApnItem item = this.DataContext as ApnItem;


                string text = "";

                if (item != null)
                {
                    text = item.displayText;
                }



                this.Foreground = Brushes.Black;

                if (inlines.allEntities == null)
                {
                    this.Inlines.Add(text);
                }
                else
                {
                    if (inlines.allEntities.Count == 0)
                    {
                        this.Inlines.Add(text);
                    }
                    else
                    {
                        int startPosition = 0;
                        foreach (Entities.IEntity entity in inlines.allEntities)
                        {
                            if (typeof(Entities.Link) == entity.GetType())
                            {
                                Entities.Link innerLink = entity as Entities.Link;
                                this.Inlines.Add(text.Substring(Math.Min(startPosition, text.Length - 1), Math.Max(0, innerLink.pos - startPosition)));
                                startPosition = innerLink.pos + innerLink.len + 1;

                                Hyperlink link = new Hyperlink();
                                link.TextDecorations = null;
                                link.Foreground      = Brushes.Purple;
                                Uri target;
                                Uri.TryCreate(innerLink.url, UriKind.Absolute, out target);
                                link.NavigateUri = target;
                                link.Inlines.Add(innerLink.text);
                                link.ToolTip = innerLink.url;
                                link.Cursor  = Cursors.Hand;
                                link.Click  += new RoutedEventHandler(link_Click);
                                ContextMenu contextMenuLink = new ContextMenu();

                                MenuItem menuItemCopyToClipboard = new MenuItem();
                                menuItemCopyToClipboard.Header           = "Copy link";
                                menuItemCopyToClipboard.CommandParameter = innerLink.url;
                                menuItemCopyToClipboard.Click           += new RoutedEventHandler(menuItemCopyToClipboard_Click);
                                contextMenuLink.Items.Add(menuItemCopyToClipboard);

                                MenuItem menuItemOpenInBrowser = new MenuItem();
                                menuItemOpenInBrowser.Header           = "Open in webbrowser";
                                menuItemOpenInBrowser.CommandParameter = innerLink.url;
                                menuItemOpenInBrowser.Click           += new RoutedEventHandler(menuItemOpenInBrowser_Click);
                                contextMenuLink.Items.Add(menuItemOpenInBrowser);


                                link.ContextMenu = contextMenuLink;
                                this.Inlines.Add(link);
                                this.Inlines.Add(" ");
                            }
                            else if (typeof(Entities.Hashtag) == entity.GetType())
                            {
                                Entities.Hashtag innerHash = entity as Entities.Hashtag;
                                this.Inlines.Add(text.Substring(Math.Min(startPosition, text.Length - 1), Math.Max(0, innerHash.pos - startPosition)));
                                startPosition = innerHash.pos + innerHash.len + 1;

                                Hyperlink link = new Hyperlink();
                                link.TextDecorations = null;
                                link.Foreground      = Brushes.Red;
                                link.TargetName      = innerHash.name;
                                link.Inlines.Add("#" + innerHash.name);
                                link.ToolTip = "Open hashtag #" + innerHash.name;
                                link.Cursor  = Cursors.Hand;
                                link.Click  += new RoutedEventHandler(hashtag_Click);
                                this.Inlines.Add(link);
                                this.Inlines.Add(" ");
                            }
                            else if (typeof(Entities.Mention) == entity.GetType())
                            {
                                Entities.Mention innerMention = entity as Entities.Mention;
                                this.Inlines.Add(text.Substring(Math.Min(startPosition, text.Length - 1), Math.Max(0, innerMention.pos - startPosition)));
                                startPosition = innerMention.pos + innerMention.len + 1;

                                Hyperlink link = new Hyperlink();
                                link.TextDecorations = null;
                                link.Foreground      = Brushes.DarkGreen;
                                link.TargetName      = innerMention.name;
                                link.Inlines.Add("@" + innerMention.name);
                                link.ToolTip = "Open user info of @" + innerMention.name;
                                link.Cursor  = Cursors.Hand;
                                link.Click  += new RoutedEventHandler(username_Click);
                                this.Inlines.Add(link);
                                this.Inlines.Add(" ");
                            }
                        }
                        if (startPosition < text.Length)
                        {
                            this.Inlines.Add(text.Substring(startPosition - 1));
                        }
                    }
                }
            }
            catch (Exception exp)
            {
                Console.WriteLine(exp.Message);
            }
        }
Exemplo n.º 20
0
        void backgroundWorkerBuildConversation_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            AccountAppDotNet account = startItem.receivingAccount;


            if (!startItem.isPrivateMessage)
            {
                Tuple <List <Post>, ApiCallResponse> postsInFuture = Posts.getRepliesById(account.accessToken, startItem.apnItem.reply_to);
                if (postsInFuture.Item2.success)
                {
                    foreach (Post post in postsInFuture.Item1)
                    {
                        ApnItem item = new ApnItem(post, startItem.receivingAccount);
                        if (item != null)
                        {
                            item.receivingAccount = account;
                            backgroundWorkerBuildConversation.ReportProgress(100, item);
                        }
                    }
                }
            }

            else
            {
                Tuple <List <Message>, ApiCallResponse> messages = Messages.getMessagesInChannel(account.accessToken, startItem.channelId);
                if (messages.Item2.success)
                {
                    foreach (Message message in messages.Item1)
                    {
                        ApnItem item = new ApnItem(message, startItem.receivingAccount);
                        if (item != null)
                        {
                            item.receivingAccount = account;
                            backgroundWorkerBuildConversation.ReportProgress(100, item);
                        }
                    }
                }
            }
            return;

            // old approach not needed in App.net API!
            #region Mention conversation
            string currentStatusId = startItem.apnItem.reply_to;
            while (!string.IsNullOrEmpty(currentStatusId))
            {
                if (account.PersonalStream.Where(i => i.Id.ToString() == currentStatusId).Count() > 0)
                {
                    ApnItem knownMention = account.PersonalStream.Where(i => i.Id.ToString() == currentStatusId).First() as ApnItem;
                    if (knownMention != null)
                    {
                        currentStatusId = "";
                        currentStatusId = knownMention.apnItem.reply_to;
                        backgroundWorkerBuildConversation.ReportProgress(100, knownMention);
                    }
                }
                else if (account.PersonalStream.Where(i => i.Id.ToString() == currentStatusId).Count() > 0)
                {
                    ApnItem knownTimeline = account.PersonalStream.Where(i => i.Id.ToString() == currentStatusId).First() as ApnItem;
                    if (knownTimeline != null)
                    {
                        currentStatusId = "";
                        currentStatusId = knownTimeline.apnItem.reply_to;
                        backgroundWorkerBuildConversation.ReportProgress(100, knownTimeline);
                    }
                }
                else
                {
                    Tuple <Post, ApiCallResponse> newPost = Posts.getById(account.accessToken, currentStatusId);
                    currentStatusId = "";
                    if (newPost.Item2.success)
                    {
                        ApnItem newItem = new ApnItem(newPost.Item1, startItem.receivingAccount);
                        if (newItem != null)
                        {
                            backgroundWorkerBuildConversation.ReportProgress(100, newItem);
                            currentStatusId = newItem.apnItem.reply_to;
                        }
                    }
                }
            }

            // future entries
            currentStatusId = startItem.apnItem.id;

            List <ApnItem> allItems = new List <ApnItem>();
            foreach (ApnItem item in account.PersonalStream)
            {
                allItems.Add(item);
            }

            List <string> multipleQueue = new List <string>();

            while (!string.IsNullOrEmpty(currentStatusId))
            {
                if (allItems.Where(i => i.apnItem.reply_to == currentStatusId).Count() > 0)
                {
                    IEnumerable <ApnItem> knownItems = allItems.Where(i => i.apnItem.reply_to == currentStatusId);
                    currentStatusId = "";
                    foreach (ApnItem item in knownItems)
                    {
                        if (item != null)
                        {
                            backgroundWorkerBuildConversation.ReportProgress(100, item);
                            if (string.IsNullOrEmpty(currentStatusId))
                            {
                                currentStatusId = item.apnItem.id;
                            }
                            else
                            {
                                multipleQueue.Add(item.apnItem.reply_to);
                            }
                        }
                    }
                }
                else
                {
                    currentStatusId = "";
                }



                if (string.IsNullOrEmpty(currentStatusId) && multipleQueue.Count() > 0)
                {
                    currentStatusId = multipleQueue.First();
                    multipleQueue.RemoveAt(0);
                }
            }
            #endregion
        }