public string GetEntityAidedText(EntityDisplayMode displayMode = EntityDisplayMode.DisplayText) { try { var builder = new StringBuilder(); var status = this; if (status.RetweetedOriginal != null) { // change target status = status.RetweetedOriginal; } foreach (var description in TextEntityResolver.ParseText(status)) { if (!description.IsEntityAvailable) { builder.Append(description.Text); } else { var entity = description.Entity; switch (entity.EntityType) { case EntityType.Hashtags: builder.Append("#" + entity.DisplayText); break; case EntityType.Urls: // url entity: // display_url: example.com/CUTTED OFF... // original_url => expanded_url: example.com/full_original_url builder.Append(displayMode == EntityDisplayMode.DisplayText ? ParsingExtension.ResolveEntity(entity.DisplayText) : ParsingExtension.ResolveEntity(entity.OriginalUrl)); break; case EntityType.Media: // media entity: // display_url: pic.twitter.com/IMAGE_ID // media_url: pbs.twimg.com/media/ACTUAL_IMAGE_RESOURCE_ID // url: t.co/IMAGE_ID builder.Append( displayMode == EntityDisplayMode.DisplayText ? ParsingExtension.ResolveEntity(entity.DisplayText) : displayMode == EntityDisplayMode.LinkUri ? ParsingExtension.ResolveEntity(entity.DisplayText) : ParsingExtension.ResolveEntity(entity.MediaUrl)); break; case EntityType.UserMentions: builder.Append("@" + entity.DisplayText); break; } } } return builder.ToString(); } catch (ArgumentOutOfRangeException ex) { var sb = new StringBuilder(); sb.AppendLine("Parse Error! : " + Text); if (Entities == null) { sb.AppendLine("Entities: null"); } else { sb.Append("Entities: "); Entities.OrderBy(e => e.StartIndex) .Select(e => e.StartIndex + "- " + e.EndIndex + " : " + e.DisplayText) .ForEach(s => sb.AppendLine(" " + s)); } throw new ArgumentOutOfRangeException(sb.ToString(), ex); } }
static void Instance_OnMentionReceived(TwitterStatus obj) { Show(new NormalNotificatorViewModel(MetroColors.Orange, obj.User, "mention from @" + obj.User.ScreenName, obj.GetEntityAidedText())); }