Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 void FormGroupMessages(IList <Message> messages)
 {
     foreach (var msg in messages)
     {
         addMessage(msg);
     }
     GroupedMessages = new ObservableCollection <GroupedMessage>(GroupedMessages.OrderBy(x => x.DateTime).ToList());
 }
Exemplo n.º 4
0
        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;
                });
            }
        }
Exemplo n.º 5
0
        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);
            //}
        }
Exemplo n.º 6
0
        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);
        }