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(); }
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(); } } }
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(); }
void backgroundWorkerBuildConversation_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e) { ApnItem item = (ApnItem)e.UserState; item.accountId = startItem.accountId; conversationItems.Add(item); }
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; } }
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); } } }
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); } } } }
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 { } } } }
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); } } }
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(); } } }
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(); } } } }
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; } } }
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(); } }
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); } } } } }
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); } } } }
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 { } } } }
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); } }; }
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); } }
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 }