public static TweetCollection GetTimeline(string userName, int num, Hashtable properties) { //recommended properties: include_rts=true string rUrl = "https://api.twitter.com/1/statuses/user_timeline.xml?screen_name=" + userName + "&count=" + num; foreach (DictionaryEntry property in properties) { rUrl += "&" + property.Key + "=" + property.Value; } XmlDocument rDoc = new XmlDocument(); rDoc.LoadXml(Twitter.ExecuteRequest(rUrl)); XmlNode root = rDoc.DocumentElement; XmlNodeList nodeList = root.SelectNodes("status"); TweetCollection twColl = new TweetCollection(); foreach (XmlNode node in nodeList) { try { if (node.SelectSingleNode("retweeted_status") == null) { twColl.Add(new Tweet(node.SelectSingleNode("user/screen_name").InnerText, node.SelectSingleNode("user/id").InnerText, node.SelectSingleNode("user/profile_image_url").InnerText, node.SelectSingleNode("text").InnerText)); } else if (node.SelectSingleNode("retweeted_status") != null) { twColl.Add(new Tweet(node.SelectSingleNode("retweeted_status/user/screen_name").InnerText, node.SelectSingleNode("retweeted_status/user/id").InnerText, node.SelectSingleNode("retweeted_status/user/profile_image_url").InnerText, node.SelectSingleNode("retweeted_status/text").InnerText)); } } catch (Exception e) { throw new Exception("Failed to retrieve timeline.", e); } } return twColl; }
private void ProcessTweetMessages(object obj, DownloadStringCompletedEventArgs args) { try { System.Diagnostics.Debug.WriteLine(args.Result); StockTwits_Stream_Symbol s = JsonConvert.DeserializeObject <StockTwits_Stream_Symbol>(args.Result); Cursor = s.cursor; foreach (StockTwits_Message m in s.messages) { TweetCollection.Add(new TweetItemViewModel() { Author = m.user.name + " (" + m.user.username + ")", Content = m.body, PubDate = m.created_at }); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); System.Diagnostics.Debug.WriteLine(ex.Source); System.Diagnostics.Debug.WriteLine(ex.StackTrace); } if (ProgressBar != null) { ProgressBar.IsVisible = false; } this.IsDataLoaded = true; }
public TweetsPanelViewModel(AppInfo appInfo, TwitterClient client, Func<string, UserViewModel> userViewModelFactory) { AppInfo = appInfo; Tweets = new TweetCollection(); _client = client; _userViewModelFactory = userViewModelFactory; }
public TweetsPanelViewModel(AppInfo appInfo, TwitterClient client, Func <string, UserViewModel> userViewModelFactory) { AppInfo = appInfo; Tweets = new TweetCollection(); _client = client; _userViewModelFactory = userViewModelFactory; }
public TweetCollection GetSearchResults(string searchText, IWebProxy webProxy) { TweetCollection tweets = new TweetCollection(); string tweetscanUrl = "http://tweetscan.com/trss.php?s=" + searchText; HttpWebRequest request = WebRequest.Create(tweetscanUrl) as HttpWebRequest; // Add configured web proxy request.Proxy = webProxy; //try //{ // Get the Web Response using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { // Get the response stream StreamReader reader = new StreamReader(response.GetResponseStream()); // Load the response data into a XmlDocument XmlDocument doc = new XmlDocument(); doc.Load(reader); // Get statuses with XPath XmlNodeList nodes = doc.SelectNodes("/rss/channel/item"); foreach (XmlNode node in nodes) { Tweet tweet = new Tweet(); tweet.Id = double.Parse(node.SelectSingleNode("tweetid").InnerText); tweet.Text = HttpUtility.HtmlDecode(node.SelectSingleNode("text").InnerText); string dateString = node.SelectSingleNode("pubdate").InnerText; if (!string.IsNullOrEmpty(dateString)) { tweet.DateCreated = DateTime.Parse(dateString); } User user = new User(); user.Name = node.SelectSingleNode("username").InnerText; user.ScreenName = node.SelectSingleNode("screenname").InnerText; user.ImageUrl = node.SelectSingleNode("image").InnerText; tweet.User = user; tweets.Add(tweet); } tweets.SaveToDisk(); } //} //catch { ////TODO: not sure what kind of errors are thrown by tweetcan // // eat it. //} return tweets; }
public TweetCollection GetSearchResults(string searchText, IWebProxy webProxy) { TweetCollection tweets = new TweetCollection(); string tweetscanUrl = "http://tweetscan.com/trss.php?s=" + searchText; HttpWebRequest request = WebRequest.Create(tweetscanUrl) as HttpWebRequest; // Add configured web proxy request.Proxy = webProxy; //try //{ // Get the Web Response using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { // Get the response stream StreamReader reader = new StreamReader(response.GetResponseStream()); // Load the response data into a XmlDocument XmlDocument doc = new XmlDocument(); doc.Load(reader); // Get statuses with XPath XmlNodeList nodes = doc.SelectNodes("/rss/channel/item"); foreach (XmlNode node in nodes) { Tweet tweet = new Tweet(); tweet.Id = double.Parse(node.SelectSingleNode("tweetid").InnerText); tweet.Text = HttpUtility.HtmlDecode(node.SelectSingleNode("text").InnerText); string dateString = node.SelectSingleNode("pubdate").InnerText; if (!string.IsNullOrEmpty(dateString)) { tweet.DateCreated = DateTime.Parse(dateString); } User user = new User(); user.Name = node.SelectSingleNode("username").InnerText; user.ScreenName = node.SelectSingleNode("screenname").InnerText; user.ImageUrl = node.SelectSingleNode("image").InnerText; tweet.User = user; tweets.Add(tweet); } tweets.SaveToDisk(); } //} //catch { ////TODO: not sure what kind of errors are thrown by tweetcan // // eat it. //} return(tweets); }
public void Tweet_added_to_empty_collection_succeeds() { TweetCollection tweets = new TweetCollection(); Tweet tweet = new Tweet() { DateCreated = DateTime.Now, Id = 1 }; tweets.Add(tweet); Assert.That(tweets.Contains(tweet)); Assert.That(tweets.Count == 1); }
private void Button_Click(object sender, RoutedEventArgs e) { TweetScanHelper ts = new TweetScanHelper(); TweetCollection searchREsults = ts.GetSearchResults(SearchTextBox.Text); foreach (Tweet t in searchREsults) { tweets.Add(t); } }
public SingleOneAllTweets(IServiceApi net, User relatedUser) { InitializeComponent(); this.saNet = net; this.saUser = relatedUser; this.Title = saUser.ScreenName + "的微博"; UserTitleBar.DataContext = saUser; singleAllTweets = new TweetCollection(); AllTweetsListBox.DataContext = singleAllTweets; DispatchAllTweetsList(); }
protected override void Context() { _tweets = new TweetCollection(); _totalTweets = 20; _keepCount = 5; for (int i = 1; i <= _totalTweets; i++) { var tweet = new Tweet { Id = i }; _tweets.Insert(0, tweet); _tweets.Insert(0, tweet); } }
public TweetCollection GetTweets() { TweetCollection tweets = new TweetCollection(); Tweet tweet = new Tweet(); if (twitter == null) { tweet.Text = "Please setup your user/password and url in the connection settings."; tweets.Add(tweet); return(tweets); } try { //if (_lastId == null) tweets = twitter.GetFriendsTimeline(); /*else * tweets = twitter.GetFriendsTimeline(_lastId.ToString()); * if (tweets != null && tweets.Count > 0) * { * _lastId = String.Format("{0:0}", tweets[0].Id); * } * else * { * tweet.Text = "sent " + _lastId; * tweets.Add(tweet); * }*/ return(tweets); } catch (System.Net.WebException we) { twitter.TwitterServerUrl = twitter.TwitterServerUrl.Replace("https://", "http://"); try { return(twitter.GetFriendsTimeline()); } catch (Exception err) { tweet.Text = err.Message; tweets.Add(tweet); return(tweets); } } catch (Exception err) { tweet.Text = err.Message; tweets.Add(tweet); return(tweets); } }
public void Tweet_added_to_collection_unsorted() { TweetCollection tweets = new TweetCollection(SortOrder.None); Tweet tweet1 = new Tweet() { DateCreated = DateTime.Now, Id = 1 }; Tweet tweet2 = new Tweet() { DateCreated = tweet1.DateCreated.Value.Subtract(TimeSpan.FromMinutes(5)), Id = 2 }; Tweet tweet3 = new Tweet() { DateCreated = tweet1.DateCreated.Value.Subtract(TimeSpan.FromMinutes(2)), Id = 2 }; tweets.Add(tweet1); tweets.Add(tweet2); tweets.Add(tweet3); Assert.That(tweets[0], Is.EqualTo(tweet1)); Assert.That(tweets[1], Is.EqualTo(tweet2)); Assert.That(tweets[2], Is.EqualTo(tweet3)); }
public TweetCollection GetTweets() { TweetCollection tweets = new TweetCollection(); Tweet tweet = new Tweet(); if (twitter == null) { tweet.Text = "Please setup your user/password and url in the connection settings."; tweets.Add(tweet); return tweets; } try { //if (_lastId == null) tweets = twitter.GetFriendsTimeline(); /*else tweets = twitter.GetFriendsTimeline(_lastId.ToString()); if (tweets != null && tweets.Count > 0) { _lastId = String.Format("{0:0}", tweets[0].Id); } else { tweet.Text = "sent " + _lastId; tweets.Add(tweet); }*/ return tweets; } catch (System.Net.WebException we) { twitter.TwitterServerUrl = twitter.TwitterServerUrl.Replace("https://","http://"); try { return twitter.GetFriendsTimeline(); } catch (Exception err) { tweet.Text = err.Message; tweets.Add(tweet); return tweets; } } catch (Exception err) { tweet.Text = err.Message; tweets.Add(tweet); return tweets; } }
public MainWindow() { InitializeComponent(); DateFormat = "ddd MMM dd HH:mm:ss zzzz yyyy"; twitterAuth = Resources["TwitterAuthKey"] as TwitterAuth; collection = Resources["TweetCollectionKey"] as TweetCollection; retweetCollection = Resources["RetweetStatusCollectionKey"] as RetweetStatusCollection; this.Loaded += async (sender, e) => await twitterAuth.Init(this); TweetListView.SelectionChanged += (s, e) => RetweetCountBlock.Text = SelectedItemRetweetCountString; }
public MainWindow() { InitializeComponent(); DateFormat = "ddd MMM dd HH:mm:ss zzzz yyyy"; twitterAuth = Resources["TwitterAuthKey"] as TwitterAuth; collection = Resources["TweetCollectionKey"] as TweetCollection; retweetCollection = Resources["RetweetStatusCollectionKey"] as RetweetStatusCollection; this.Loaded += async(sender, e) => await twitterAuth.Init(this); TweetListView.SelectionChanged += (s, e) => RetweetCountBlock.Text = SelectedItemRetweetCountString; }
public void Setup() { Initialise(); _query = "some text"; _twitterAuthorisation = TwitterAuthenticationBuilder.Build.AnInstance(); TwitterApiAdapter .Setup(x => x.Login()) .Returns(Task.FromResult(_twitterAuthorisation)); _tweetCollection = TweetCollectionBuilder.Build.AnInstance(); TwitterApiAdapter .Setup(x => x.Search(_query, _twitterAuthorisation)) .Returns(Task.FromResult(_tweetCollection)); _result = Controller.SearchTweets(_query).Result; }
private void StoreAttachments(TweetCollection tc) { SPSite mySite = SPContext.Current.Site; SPWeb myWeb = SPContext.Current.Web; SPList _myList = CreateList(mySite, myWeb); foreach (Tweet tweet in tc) { if (tweet.Assets != null) { foreach (Attachment att in tweet.Assets) { SPQuery oQuery = new SPQuery(); oQuery.Query = "<Where>" + "<And>" + "<Eq><FieldRef Name='DocumentId'/>" + "<Value Type='Number'>" + att.Id + "</Value></Eq>" + "<Eq><FieldRef Name='PresentlyUrl'/>" + "<Value Type='Text'>" + this.Url + "</Value></Eq>" + "</And>" + "</Where>"; SPListItemCollection collListItems = _myList.GetItems(oQuery); if (collListItems.Count == 0) { SPListItem myListItem = _myList.Items.Add(); myListItem["DocumentId"] = att.Id; myListItem["Title"] = att.FileName; myListItem["URL"] = att.Url; myListItem["Size"] = att.Size; myListItem["MediaType"] = att.ContentType; myListItem["PresentlyUrl"] = this.Url; if (att.ContentType.StartsWith("image")) { myListItem["Preview"] = att.Url.Replace("/original/", "/stream_multi_thumb/"); } myListItem["DateCreated"] = att.DateCreated; myWeb.AllowUnsafeUpdates = true; myListItem.Update(); myWeb.AllowUnsafeUpdates = false; } } } } }
public void Truncate() { int count = 10; TweetCollection tweets = new TweetCollection(); for (int i = 0; i < 20; i++) { Tweet tweet = new Tweet(); tweet.Id = i; tweets.Insert(0, tweet); } tweets.TruncateAfter(count); Assert.AreEqual(count, tweets.Count); Assert.AreEqual(tweets[0].Id, 19); }
public String GetTweets() { lock (typeof(PresentlyWebPart)) { try { TweetCollection tweets = _twitterService.GetTweets(); StoreAttachments(tweets); return(TweetBuilder.buildTweets(tweets)); } catch (Exception err) { StringBuilder sb = new StringBuilder(); sb.Append("<div>" + err.Message + "</div>" + "<div>" + err.StackTrace + "</div>"); return(sb.ToString()); } } }
/// <summary> /// A simple function that takes a string and does a ToUpper /// </summary> /// <param name="context">Lambda context.</param> /// <returns></returns> public async void FunctionHandler(ILambdaContext context) { var consumerKey = Environment.GetEnvironmentVariable("ConsumerKey"); var consumerSecret = Environment.GetEnvironmentVariable("ConsumerSecret"); var accessToken = Environment.GetEnvironmentVariable("AccessToken"); var accessTokenSecret = Environment.GetEnvironmentVariable("AccessTokenSecret"); Auth.SetUserCredentials(consumerKey, consumerSecret, accessToken, accessTokenSecret); var timelines = new TweetCollection(); var followed = new List <string> { "FoxNews", "CNN", "MSNBC" }; foreach (var screename in followed) { var recentTweets = Timeline.GetUserTimeline(screename, 15); var slimTweets = recentTweets.Select( tweet => new SlimTweets { Id = tweet.Id, Text = tweet.Text, CreatedDate = tweet.CreatedAt, CreatedByScreenName = tweet.CreatedBy.ScreenName }).ToList(); timelines.LatestTweets.Add( new TweetCollection.TweetsByScreenName { ScreenName = screename, Tweets = slimTweets }); } var client = new AmazonDynamoDBClient(); var dynamoDb = new DynamoDBContext(client); await dynamoDb.SaveAsync(timelines); }
public void Tweet_added_to_collection_in_sorted_order_with_ascending_sort() { TweetCollection tweets = new TweetCollection(SortOrder.Ascending); Tweet tweet1 = new Tweet() { DateCreated = DateTime.Now, Id = 1 }; Tweet tweet2 = new Tweet() { DateCreated = tweet1.DateCreated.Value.Subtract(TimeSpan.FromMinutes(5)), Id = 2 }; Tweet tweet3 = new Tweet() { DateCreated = tweet1.DateCreated.Value.Subtract(TimeSpan.FromMinutes(2)), Id = 2 }; tweets.Add(tweet1); tweets.Add(tweet2); tweets.Add(tweet3); Assert.That(tweets[0], Is.EqualTo(tweet2)); Assert.That(tweets[1], Is.EqualTo(tweet3)); Assert.That(tweets[2], Is.EqualTo(tweet1)); }
public void Setup() { Initialise(); _query = "Search criteria"; _authToken = TwitterAuthenticationBuilder.Build.AnInstance(); _webRequest = new Mock <HttpWebRequest>(); TwitterApiRequestFactory .Setup(x => x.CreateSearchTweetRequest(_query, _authToken)) .Returns(_webRequest.Object); _webResponse = new Mock <HttpWebResponse>(); HttpWebRequestHelper .Setup(x => x.GetResponse(_webRequest.Object)) .Returns(Task.FromResult(_webResponse.Object)); _tweetCollection = TweetCollectionBuilder.Build.AnInstance(); ObjectSerializer .Setup(x => x.DeserializeJson <TweetCollection>(_webResponse.Object)) .Returns(_tweetCollection); _result = TwitterApiAdapter.Search(_query, _authToken).Result; }
public TweetCollection FetchByScreenName(string screenName, int max) { Logger.Log("FetchByScreenName: " + screenName, System.Diagnostics.TraceEventType.Information); var collection = new TweetCollection(); collection.Add(new Tweet() { TweetID = 1, LocationText = "Milwaukee, WI", ProfileImageUrl = String.Empty, ScreenName = screenName, TweetText = "First tweet!", TweetCreated = DateTime.Now.AddMinutes(-10) }); collection.Add(new Tweet() { TweetID = 1, LocationText = "Milwaukee, WI", ProfileImageUrl = String.Empty, ScreenName = screenName, TweetText = "Second tweet!", TweetCreated = DateTime.Now.AddMinutes(-5) }); return collection; }
public void EmptyData() { Cursor = null; TweetCollection.Clear(); }
public TweetCollection SearchByLocation(string keyword, int max, int kilometers, double latitude, double longitude) { var collection = new TweetCollection(); return collection; }
private void UpdateUsersTimelineInterface(TweetCollection newTweets) { StatusTextBlock.Text = displayUser + "'s Timeline Updated: " + repliesLastUpdated.ToLongTimeString(); User u = null; for (int i = newTweets.Count - 1; i >= 0; i--) { Tweet tweet = newTweets[i]; u = tweet.User; if (!userTweets.Contains(tweet)) { userTweets.Insert(0, tweet); tweet.IsNew = true; } else { // update the relativetime for existing tweets userTweets[i].UpdateRelativeTime(); } } if (userTweets.Count > 0) UserTimelineListBox.SelectedIndex = 0; // JMF: There's an issue with binding where the wrong user's header is sometimes // being displayed. I think it is related to the fact that these header elements // are bound to a property found in each list item, and are probably picking up // the object from a previous list before the current list is updated (i.e., a // binding race condition?). // Manually setting header here as a workaround.... if (u != null) { UserImage.Source = new ImageSourceConverter().ConvertFromString(u.ImageUrl) as ImageSource; FullName.Text = u.FullName; Description.Text = u.Description; SiteUrl.Text = u.SiteUrl; Location.Text = u.Location; } StopStoryboard("Fetching"); }
protected override void Because() { _tweets = _directMessages.ToTweetCollection(); }
private void ScheduleUpdateFunctionInUIThread(TweetCollection addedTweets) { LayoutRoot.Dispatcher.BeginInvoke( DispatcherPriority.Background, new AddTweetsUpdateDelegate(UpdatePostUserInterface), addedTweets); }
private void PopUpNotify(TweetCollection newTweets) { TweetCollection popUpTweets = new TweetCollection(); foreach (var tweet in newTweets) { if (ShouldPopUp(tweet)) popUpTweets.Add(tweet); } if (popUpTweets.Count > Double.Parse(AppSettings.MaximumIndividualAlerts)) { Popup p = new Popup("New Tweets", BuiltNewTweetMessage(popUpTweets), twitter.CurrentlyLoggedInUser.ImageUrl, 0); SetupPopupProps(p); p.Show(); } else { int index = 0; foreach (Tweet tweet in popUpTweets) { Popup p = new Popup(tweet, index++); SetupPopupProps(p); p.Show(); } } }
private static void UpdateExistingTweets(TweetCollection oldTweets) { // Update existing tweets foreach (Tweet tweet in oldTweets) { tweet.IsNew = false; tweet.UpdateRelativeTime(); } }
public static String buildTweets(TweetCollection tc) { try { if (tc.Count == 0) return "no tweets"; StringBuilder allSb = new StringBuilder(); int i = 0; foreach (Tweet tweet in tc) { StringBuilder sb = new StringBuilder(); int insertion_index = 0; String style = (i % 2 == 0) ? "even_color" : "odd_color"; if (tweet.User != null) { sb.Append("<div class='tweet " + style + "'>"); insertion_index = sb.Length; sb.Append("<div class='tweetUserName'><a class='user_link' rel='@" + tweet.User.ScreenName + "'>" + "<img src='" + tweet.User.ImageUrl + "'/>" + "</a></div>"); } String replyTo = ""; string strTweet = parseTweet(tweet.Text, out replyTo); sb.Append("<div id='"+tweet.Id+"' class='tweetText'>" + strTweet); if (tweet.Paste != null ) { sb.Append("<a class='more_text_link'> More..</a>"); sb.Append("<div class='more_text'>"); sb.Append(parseTweet(tweet.Paste.Text, out replyTo)); sb.Append("</div>"); } if (tweet.Assets != null && tweet.Assets.Count > 0) { sb.Append("<div class='tweetAttachment'><span>Attachments:</span>"); foreach (Attachment attachment in tweet.Assets) { String url = attachment.Url.Replace("/original/", "/stream_multi_thumb/"); if (attachment.ContentType.StartsWith("image")) sb.Append("<a rel='lightbox' href='" + attachment.Url + "'><img src='" + url + "'/></a>"); else sb.Append("<a href='" + attachment.Url + "'>" + attachment.FileName + "</a>"); } sb.Append("</div>"); } sb.Append("</div>"); if (tweet.User != null) { if (replyTo != null) sb.Insert(insertion_index, "<div class=\"tweetNote\">" + tweet.User.FullName + " To " + replyTo + "</div>"); else if (tweet.User != null) sb.Insert(insertion_index, "<div class=\"tweetNote\">" + tweet.User.FullName + "</div>"); } if (tweet.RelativeTime != null) sb.Append("<div class=\"tweetRelativeTime\">" + tweet.RelativeTime + " " + tweet.Source + "</div>"); i++; sb.Append("<div style='clear:both'></div></div>"); allSb.Append(sb.ToString()); } return allSb.ToString(); } catch (Exception err) { StringBuilder sb = new StringBuilder(); sb.Append("<div>" + err.Message + "</div>" + "<div>" + err.StackTrace + "</div>"); return sb.ToString(); } }
private void HighlightTweets(TweetCollection tweets) { if (string.IsNullOrEmpty(AppSettings.HighlightRegex)) return; foreach (Tweet tweet in tweets) { if (Regex.IsMatch(tweet.Text, AppSettings.HighlightRegex, RegexOptions.IgnoreCase) || Regex.IsMatch(tweet.User.ScreenName, AppSettings.HighlightRegex, RegexOptions.IgnoreCase)) { tweet.IsInteresting = true; } } }
private void NotifyOnNewTweets(TweetCollection newTweets, string type) { if (GrowlCommunicator.IsRunning()) { GrowlNotify(newTweets, type); } else if (SnarlConnector.GetSnarlWindow().ToInt32() != 0) { SnarlNotify(newTweets, type); } else { PopUpNotify(newTweets); } }
/// <summary> /// The Main function for interfacing with the Twitter API /// </summary> /// <returns>Collection of Tweets. Twitter limits the max to 20.</returns> private TweetCollection RetrieveTimeline(Timeline timeline, string since, string userId) { if (!IsLoggedIn()) return null; var tweets = new TweetCollection(); ITwitterLeafNode request; switch (timeline) { case Timeline.Public: request = CreateRequest().Statuses().OnPublicTimeline(); break; case Timeline.Friends: request = CreateRequest().Statuses().OnFriendsTimeline(); break; case Timeline.User: request = CreateRequest().Statuses().OnUserTimeline().For(userId); break; case Timeline.Replies: request = CreateRequest().Statuses().Mentions(); break; default: request = CreateRequest().Statuses().OnPublicTimeline(); break; } if (!string.IsNullOrEmpty(since)) { DateTime sinceDate; DateTime.TryParse(since, out sinceDate); // Go back a minute to compensate for latency. sinceDate = sinceDate.AddMinutes(-1); //TODO: Need to make use of since information } foreach (TwitterStatus result in request.Request().AsStatuses()) { tweets.Add(GetTweetFromTwitterStatus(result)); } tweets.SaveToDisk(); return tweets; }
private void SnarlNotify(TweetCollection newTweets, string type) { string alertClass = ""; if (type == "reply") { alertClass = "New reply"; } else if (type == "directMessage") { alertClass = "New direct message"; } else { alertClass = "New tweet"; } if (newTweets.Count > Double.Parse(AppSettings.MaximumIndividualAlerts)) { string defaultImage = ""; string tempFile = System.IO.Path.GetTempFileName(); WebClient client = new WebClient(); try { client.DownloadFile(twitter.CurrentlyLoggedInUser.ImageUrl, tempFile); } catch (Exception ex) { Console.WriteLine(ex); tempFile = defaultImage; } WindowsMessage replyMsg = new WindowsMessage(); SnarlConnector.ShowMessageEx("New tweets summarized", "You have new tweets!", BuiltNewTweetMessage(newTweets), int.Parse(Properties.Settings.Default.NotificationDisplayTime), tempFile, this.SnarlConfighWnd, replyMsg, ""); if (tempFile != defaultImage) { System.IO.File.Delete(tempFile); } } else { foreach (Tweet tweet in newTweets) { string defaultImage = ""; string tempFile = System.IO.Path.GetTempFileName(); WebClient client = new WebClient(); try { client.DownloadFile(tweet.User.ImageUrl, tempFile); } catch (Exception ex) { Console.WriteLine(ex); tempFile = defaultImage; } WindowsMessage replyMsg = new WindowsMessage(); SnarlConnector.ShowMessageEx(alertClass, tweet.User.ScreenName, string.Format("{0}\n\n{1}", tweet.Text, tweet.RelativeTime), int.Parse(Properties.Settings.Default.NotificationDisplayTime), tempFile, this.SnarlConfighWnd, replyMsg, ""); if (tempFile != defaultImage) { System.IO.File.Delete(tempFile); } } } }
protected override void Context() { _tweets = new TweetCollection(); }
private static string BuiltNewTweetMessage(TweetCollection newTweets) { string message = string.Format("You have {0} new tweets!\n", newTweets.Count); foreach (Tweet tweet in newTweets) { message += " " + tweet.User.ScreenName; } if (message.Length > TwitterNet.CharacterLimit) { message = message.Substring(0, (TwitterNet.CharacterLimit - 5)); int lastSpace = message.LastIndexOf(' '); message = message.Substring(0, lastSpace) + "..."; } return TruncateMessage(message); }
private void StoreAttachments(TweetCollection tc) { SPSite mySite = SPContext.Current.Site; SPWeb myWeb = SPContext.Current.Web; SPList _myList = CreateList(mySite, myWeb); foreach (Tweet tweet in tc) if (tweet.Assets != null) { foreach (Attachment att in tweet.Assets) { SPQuery oQuery = new SPQuery(); oQuery.Query = "<Where>"+ "<And>"+ "<Eq><FieldRef Name='DocumentId'/>" + "<Value Type='Number'>"+att.Id+"</Value></Eq>" + "<Eq><FieldRef Name='PresentlyUrl'/>" + "<Value Type='Text'>" + this.Url + "</Value></Eq>"+ "</And>"+ "</Where>"; SPListItemCollection collListItems = _myList.GetItems(oQuery); if (collListItems.Count == 0) { SPListItem myListItem = _myList.Items.Add(); myListItem["DocumentId"] = att.Id; myListItem["Title"] = att.FileName; myListItem["URL"] = att.Url; myListItem["Size"] = att.Size; myListItem["MediaType"] = att.ContentType; myListItem["PresentlyUrl"] = this.Url; if (att.ContentType.StartsWith("image")) { myListItem["Preview"] = att.Url.Replace("/original/", "/stream_multi_thumb/"); } myListItem["DateCreated"] = att.DateCreated; myWeb.AllowUnsafeUpdates = true; myListItem.Update(); myWeb.AllowUnsafeUpdates = false; } } } }
private void FilterTweets(TweetCollection tweets, bool filterUsers) { bool usersToFilter = filterUsers && (ignoredUsers.Count > 0); if (string.IsNullOrEmpty(AppSettings.FilterRegex) && !usersToFilter) return; for (int i = tweets.Count - 1; i >= 0; i--) { Tweet tweet = tweets[i]; if (!string.IsNullOrEmpty(AppSettings.FilterRegex) && Regex.IsMatch(tweet.Text, AppSettings.FilterRegex, RegexOptions.IgnoreCase)) tweets.Remove(tweet); else if (ignoredUsers.ContainsKey(tweet.User.ScreenName) && ignoredUsers[tweet.User.ScreenName] > DateTime.Now) tweets.Remove(tweet); } }
private void UpdateUserInterface(TweetCollection newTweets) { DateTime lastUpdated = DateTime.Now; StatusTextBlock.Text = "Last Updated: " + lastUpdated.ToLongTimeString(); AppSettings.LastUpdated = lastUpdated.ToString(); AppSettings.Save(); FilterTweets(newTweets, true); HighlightTweets(newTweets); UpdateExistingTweets(); TweetCollection addedTweets = new TweetCollection(); //prevents huge number of notifications appearing on startup bool displayPopups = !(tweets.Count == 0); // Add the new tweets for (int i = newTweets.Count - 1; i >= 0; i--) { Tweet tweet = newTweets[i]; if (tweets.Contains(tweet) || HasBehavior(tweet, UserBehavior.Ignore) || IsTruncatedTweet(tweet)) continue; tweets.Add(tweet); tweet.Index = tweets.Count; tweet.IsNew = true; addedTweets.Add(tweet); } // tweets listbox ScrollViewer.CanContentScroll is set to "False", which means it scrolls more smooth, // However it disables Virtualization // Remove tweets pass 100 should improve performance reasons. if (AppSettings.KeepLatest != 0) { if (tweets.Count > AppSettings.KeepLatest) lastTruncatedTweetTime = tweets[AppSettings.KeepLatest - 1].DateCreated; tweets.TruncateAfter(AppSettings.KeepLatest); } if (addedTweets.Count > 0) { if (AppSettings.DisplayNotifications && !(bool)this.IsActive) NotifyOnNewTweets(addedTweets, "tweet"); if (AppSettings.PlaySounds) { // Author: Keith Elder // I wrapped a try catch around this and added logging. // I found that the Popup screen and this were causing // a threading issue. At least that is my theory. When // new items would come in, and play a sound as well as // pop a new message there was no need to recreate and load // the wave file. InitializeSoundPlayer() was added on load // to do that just once. try { // Play tweets found sound for new tweets _player.Play(); } catch (Exception ex) { App.Logger.Error("Error playing sound", ex); } } } StopStoryboard("Fetching"); }
private void AddTweet(string tweetText) { try { //bgriswold: Keeping check in place in case final character string is URL and it wasn't reformatted on the fly. if (tweetText.Length > TwitterNet.CharacterLimit) { ParseTextHereAndTinyUpAnyURLsFound(ref tweetText); } var addedTweets = new TweetCollection(); string[] statuses = TweetSplitter.SplitTweet(tweetText); foreach (string status in statuses) { if (isReplyMessage) { addedTweets.Add(twitter.AddTweet(status, SelectedTweet.Id)); } else { addedTweets.Add(twitter.AddTweet(status)); } } if (statuses.Length > 0) { ScheduleUpdateFunctionInUIThread(addedTweets); } } catch (WebException ex) { UpdateTextBlock.Text = "Update failed."; App.Logger.Debug(String.Format("There was a problem fetching new tweets from Twitter.com: {0}", ex.ToString())); } catch (ProxyAuthenticationRequiredException ex) { App.Logger.Error("Incorrect proxy configuration."); MessageBox.Show("Proxy server is configured incorrectly. Please correct the settings on the Options menu."); } catch (ProxyNotFoundException ex) { App.Logger.Error("Incorrect proxy configuration."); MessageBox.Show(ex.Message); } }
private void GrowlNotify(TweetCollection newTweets, string type) { Growl.Connector.NotificationType notificationType = null; if (type == "reply") { notificationType = GrowlCommunicator.NewReply; } else if (type == "directMessage") { notificationType = GrowlCommunicator.NewDirectMessage; } else if (newTweets.Count > Double.Parse(AppSettings.MaximumIndividualAlerts)) { notificationType = GrowlCommunicator.NewTweetsSummary; } else { notificationType = GrowlCommunicator.NewTweet; } if (newTweets.Count > Double.Parse(AppSettings.MaximumIndividualAlerts)) { GrowlCommunicator.Notify(notificationType, "You have new tweets!", BuiltNewTweetMessage(newTweets), twitter.CurrentlyLoggedInUser.ImageUrl); } else { foreach (Tweet tweet in newTweets) { GrowlCommunicator.Notify(notificationType, tweet.User.ScreenName, String.Format("{0}\n\n{1}", tweet.Text, tweet.RelativeTime), tweet.User.ImageUrl); } } }
private void UpdatePostUserInterface(TweetCollection addedTweets) { if (addedTweets != null) { UpdateTextBlock.Text = "Update"; StatusTextBlock.Text = "Status Updated!"; PlayStoryboard("CollapseUpdate"); isExpanded = false; isReplyMessage = false; TweetTextBox.Clear(); foreach (Tweet tweet in addedTweets) { if (tweet.IsDirectMessage) { string dmTarget = GetDMTarget(tweet); StatusTextBlock.Text = string.Format("Direct message to {0} sent", dmTarget); } else { tweets.Insert(0, tweet); } } } else { App.Logger.Error("There was a problem posting your tweet to Twitter.com."); MessageBox.Show("There was a problem posting your tweet to Twitter.com."); } }
public static String buildTweets(TweetCollection tc) { try { if (tc.Count == 0) { return("no tweets"); } StringBuilder allSb = new StringBuilder(); int i = 0; foreach (Tweet tweet in tc) { StringBuilder sb = new StringBuilder(); int insertion_index = 0; String style = (i % 2 == 0) ? "even_color" : "odd_color"; if (tweet.User != null) { sb.Append("<div class='tweet " + style + "'>"); insertion_index = sb.Length; sb.Append("<div class='tweetUserName'><a class='user_link' rel='@" + tweet.User.ScreenName + "'>" + "<img src='" + tweet.User.ImageUrl + "'/>" + "</a></div>"); } String replyTo = ""; string strTweet = parseTweet(tweet.Text, out replyTo); sb.Append("<div id='" + tweet.Id + "' class='tweetText'>" + strTweet); if (tweet.Paste != null) { sb.Append("<a class='more_text_link'> More..</a>"); sb.Append("<div class='more_text'>"); sb.Append(parseTweet(tweet.Paste.Text, out replyTo)); sb.Append("</div>"); } if (tweet.Assets != null && tweet.Assets.Count > 0) { sb.Append("<div class='tweetAttachment'><span>Attachments:</span>"); foreach (Attachment attachment in tweet.Assets) { String url = attachment.Url.Replace("/original/", "/stream_multi_thumb/"); if (attachment.ContentType.StartsWith("image")) { sb.Append("<a rel='lightbox' href='" + attachment.Url + "'><img src='" + url + "'/></a>"); } else { sb.Append("<a href='" + attachment.Url + "'>" + attachment.FileName + "</a>"); } } sb.Append("</div>"); } sb.Append("</div>"); if (tweet.User != null) { if (replyTo != null) { sb.Insert(insertion_index, "<div class=\"tweetNote\">" + tweet.User.FullName + " To " + replyTo + "</div>"); } else if (tweet.User != null) { sb.Insert(insertion_index, "<div class=\"tweetNote\">" + tweet.User.FullName + "</div>"); } } if (tweet.RelativeTime != null) { sb.Append("<div class=\"tweetRelativeTime\">" + tweet.RelativeTime + " " + tweet.Source + "</div>"); } i++; sb.Append("<div style='clear:both'></div></div>"); allSb.Append(sb.ToString()); } return(allSb.ToString()); } catch (Exception err) { StringBuilder sb = new StringBuilder(); sb.Append("<div>" + err.Message + "</div>" + "<div>" + err.StackTrace + "</div>"); return(sb.ToString()); } }