void addMessage(Message msg) { var date = msg.SubmittedDate.Date; GroupedMessage targetMessageGroup = null; targetMessageGroup = GroupedMessages.Where(x => x.DateTime == date).FirstOrDefault(); if (targetMessageGroup == null) { targetMessageGroup = new GroupedMessage() { DateTime = date }; if (GroupedMessages.Count == 0) { GroupedMessages.Add(targetMessageGroup); } else { for (int i = GroupedMessages.Count - 1; i >= 0; i--) { if (date > GroupedMessages[i].DateTime) { GroupedMessages.Insert(i + 1, targetMessageGroup); break; } if (i == 0)//Last { GroupedMessages.Insert(i, targetMessageGroup); } } } } targetMessageGroup.Add(msg); targetMessageGroup = new GroupedMessage(targetMessageGroup.OrderBy(x => x.SubmittedDate).ToList()); }
async Task <List <Message> > RefreshData() { await Task.Delay(1500); //Each time get n old messages.. List <Message> oldMessages = new List <Message>(); if (refreshCount < 3) { for (int i = 0; i < LOAD_MESSAGE_COUNT; i++) { oldMessages.Add(GenRandomMessage()); } var oldestDateTime = GroupedMessages.Where(x => x.DateTime == GroupedMessages.Min(y => y.DateTime)).First().Min(x => x.SubmittedDate); var index = 1; foreach (var msg in oldMessages) { msg.SubmittedDate = oldestDateTime.AddDays(index * -1).AddHours(index * -1); index++; } oldMessages = new List <Message>(oldMessages.OrderByDescending(x => x.SubmittedDate.ToBinary())); } refreshCount++; return(oldMessages); }
void FormGroupMessages(IList <Message> messages) { foreach (var msg in messages) { addMessage(msg); } GroupedMessages = new ObservableCollection <GroupedMessage>(GroupedMessages.OrderBy(x => x.DateTime).ToList()); }
void OnMessageDisappearing(Message message) { var idx = GroupedMessages.SelectMany(x => x).ToList().IndexOf(message); if (idx <= GroupedMessages.SelectMany(x => x).ToList().Count - 6) { Device.BeginInvokeOnMainThread(() => { ShowScrollTap = true; LastMessageVisible = false; }); } }
void OnMessageAppearing(Message msg) { //TODO this is slow omg~ var idx = GroupedMessages.SelectMany(x => x).ToList().IndexOf(msg); if (idx >= GroupedMessages.SelectMany(x => x).ToList().Count - 6) { Device.BeginInvokeOnMainThread(() => { ShowScrollTap = false; LastMessageVisible = true; PendingMessageCount = 0; }); } //TODO fix this //if(Messages.IndexOf(msg)==0) //{ // this.RefreshCommand.Execute(null); //} }
private FrameworkElement GetPhoto(KeyValuePair <TLMessage, GroupedMessagePosition> position, GroupedMessages groupedMessages, double left, double top) { var margin = 1; var width = 320d; var height = 420d; var element = new ContentControl { Content = position.Key, ContentTemplateSelector = App.Current.Resources["MediaTemplateSelector"] as DataTemplateSelector, HorizontalContentAlignment = HorizontalAlignment.Stretch, VerticalContentAlignment = VerticalAlignment.Stretch }; element.DataContext = position.Key; element.Width = position.Value.Width / 800d * width - margin * 2; element.Height = height * position.Value.Height - margin * 2; element.Margin = new Thickness(left + margin, top + margin, margin, margin); element.HorizontalAlignment = HorizontalAlignment.Left; element.VerticalAlignment = VerticalAlignment.Top; return(element); var photo = position.Key.GetPhoto(); var transferBinding = new Binding(); transferBinding.Path = new PropertyPath("IsTransferring"); transferBinding.Source = photo; var progressBinding = new Binding(); progressBinding.Path = new PropertyPath("Progress"); progressBinding.Source = photo; var child = new ImageView(); child.DataContext = position.Key; child.Source = (ImageSource)DefaultPhotoConverter.Convert(photo, true); child.Click += Click; child.Stretch = Stretch.UniformToFill; child.HorizontalContentAlignment = HorizontalAlignment.Center; child.VerticalContentAlignment = VerticalAlignment.Center; var transfer = new TransferButton(); transfer.DataContext = position.Key; transfer.Completed += Completed; transfer.Transferable = photo; transfer.Style = Application.Current.Resources["MediaTransferButtonStyle"] as Style; transfer.SetBinding(TransferButton.IsTransferringProperty, transferBinding); transfer.SetBinding(TransferButton.ProgressProperty, progressBinding); var grid = new Grid(); grid.Name = "Media"; grid.DataContext = position.Key; grid.Width = position.Value.Width / 800d * width - margin * 2; grid.Height = height * position.Value.Height - margin * 2; grid.Margin = new Thickness(left + margin, top + margin, margin, margin); grid.HorizontalAlignment = HorizontalAlignment.Left; grid.VerticalAlignment = VerticalAlignment.Top; grid.Children.Add(child); grid.Children.Add(transfer); return(grid); }