private void MessagesWatcher_NewMessages(object sender, TeamRoomMessages e)
        {
            if (e.Messages == null || !e.Messages.Any() ||
                (teamRoom != null && e.RoomId != teamRoom.Id) ||
                e.ConnectionUri != projectCollectionUri)
            {
                return;
            }

            int messagesAdded = 0;

            foreach (var item in e.Messages)
            {
                if (!Messages.Select(x => x.Id).Contains(item.Id))
                {
                    Messages.Add(item);
                    messagesAdded++;
                }
            }

            svMessages.ScrollToEnd();
            if (messagesAdded > 0)
            {
                SetStatusMessage(messagesAdded);
            }
        }
Ejemplo n.º 2
0
        private async void GetTeamRoomMessages()
        {
            if (IsBusy)
            {
                return;
            }

            IsBusy = true;

            try
            {
                TeamRoomMessages.Clear();

                string uriString    = String.Format("/DefaultCollection/_apis/Chat/rooms/{0}/messages", room.id);
                var    responseBody = await HttpClientHelper.RequestVSO(uriString);

                var teamroommessagebaselist = JsonConvert.DeserializeObject <TeamRoomMessages>(responseBody, new Helpers.TeamRoomMessageCreator());
                if (teamroommessagebaselist.count == 0)
                {
                    MessageToShow     = true;
                    MessageToShowText = "No activity in the teamroom.";
                }
                IEnumerable <TeamRoomMessage> messages = teamroommessagebaselist.value;
                var BuildCompletedEventImage           = new Image {
                    Source = new FileImageSource {
                        File = "buildcompletedevent.png"
                    }
                };
                var BuildCompletedEventImageBig = new Image {
                    Source = new FileImageSource {
                        File = "buildcompletedevent1.png"
                    }
                };
                var workitemchangedeventImage = new Image {
                    Source = new FileImageSource {
                        File = "workitemchangedevent.png"
                    }
                };
                var workitemchangedeventImageBig = new Image {
                    Source = new FileImageSource {
                        File = "workitemchangedevent1.png"
                    }
                };
                var checkineventImage = new Image {
                    Source = new FileImageSource {
                        File = "checkinevent.png"
                    }
                };
                var checkineventImageBig = new Image {
                    Source = new FileImageSource {
                        File = "checkinevent1.png"
                    }
                };

                foreach (var item in messages)
                {
                    SimpleRoomMessage sm = new SimpleRoomMessage();
                    sm.message = item;
                    sm.Content = item.content.ToString();

                    sm.PostedByDisplayName = item.postedBy.displayName;
                    sm.PostedByImageUrl    = item.postedBy.imageUrl;

                    if (item.content is TeamRoomMessage.Content.System)
                    {
                        //enter leave messages, don't show them
                    }

                    if (item.content is TeamRoomMessage.Content.Normal)
                    {
#if __ANDROID__
                        ImageSource imgResult = new FileImageSource {
                            File = "Badge.png"
                        };
#else
                        ImageSource imgResult = await VSOTeams.Helpers.FileHelper.DownloadImage(new Uri(sm.PostedByImageUrl), item.postedBy.id + ".png");
#endif
                        sm.PostedByImageSource = imgResult;
                        sm.MessageTypeURI      = imgResult;
                        sm.MessageTypeURIBig   = imgResult;
                        TeamRoomMessages.Add(sm);
                    }
                    if (item.content is TeamRoomMessage.Content.Notification.BuildCompletedEvent)
                    {
                        var content = (TeamRoomMessage.Content.Notification.BuildCompletedEvent)item.content;
                        sm.MessageTypeURI    = BuildCompletedEventImage.Source;
                        sm.MessageTypeURIBig = BuildCompletedEventImageBig.Source;
                        sm.Url = content.url;
                        TeamRoomMessages.Add(sm);
                    }

                    if (item.content is TeamRoomMessage.Content.Notification.WorkItemChangedEvent)
                    {
                        var content = (TeamRoomMessage.Content.Notification.WorkItemChangedEvent)item.content;
                        sm.MessageTypeURI    = workitemchangedeventImage.Source;
                        sm.MessageTypeURIBig = workitemchangedeventImageBig.Source;
                        sm.Url = content.url;
                        TeamRoomMessages.Add(sm);
                    }

                    if (item.content is TeamRoomMessage.Content.Notification.CheckinEvent)
                    {
                        var content = (TeamRoomMessage.Content.Notification.CheckinEvent)item.content;
                        sm.MessageTypeURI    = checkineventImage.Source;
                        sm.MessageTypeURIBig = checkineventImageBig.Source;
                        sm.Url = content.url;
                        TeamRoomMessages.Add(sm);
                    }
                }
            }
            catch (Exception ex)
            {
                var page   = new ContentPage();
                var result = page.DisplayAlert("Error", "Unable to load Visual Studio Online projects.", "OK", null);
            }

            IsBusy = false;
        }