示例#1
0
        protected void StarCore()
        {
            var previousSelection = new List <Message>(SelectedMessages);

            // Contains instance copies of messages, this will be the old data
            // before the do is applied.
            var messagesCopy = SelectedMessages
                               .Select(m => m.DuckCopy <Message>())
                               .ToList();

            #region Do action

            Action doAction = delegate
            {
                foreach (var message in SelectedMessages.ToList())
                {
                    if (SelectedMessage.IsStarred)
                    {
                        SelectedMessage.SetUnstarred();
                    }
                    else
                    {
                        SelectedMessage.SetStarred();
                    }
                }

                viewFilter.UpdateCurrentViewAsync();

                flipper.Delay();
            };

            #endregion

            #region Undo action

            Action undoAction = delegate
            {
                foreach (var message in previousSelection)
                {
                    // Get old message from copied data
                    Message message1 = message;

                    var oldMessage = messagesCopy.Single(m => m.MessageId == message1.MessageId);

                    // Reverts the previous action
                    message.IsStarred          = oldMessage.IsStarred;
                    message.TargetMessageState = oldMessage.TargetMessageState;

                    AsyncUpdateQueue.Enqueue(message);
                }

                // We cannot use the IEditableObject appraoch here because the conversation in question
                // probably might not be in view anymore. So instead we will refresh the whole view.
                viewFilter.RebuildCurrentViewAsync();
            };

            #endregion

            ClientState.Current.UndoManager.Execute(new HistoryAction(doAction, undoAction));
        }
示例#2
0
        public void Delete(bool deleteConversations)
        {
            // Contains the same references as in SelectedMessages,
            // these references can change when un-doing so keep a snapshot around
            var previousSelection = deleteConversations ?
                                    SelectedMessages.SelectMany(m => m.Conversation.Messages)
                                    .Distinct()             // Select all messages from selected conversations
                                    .ToList()
                                : new List <Message>(SelectedMessages);

            // Contains instance copies of messages, this will be the old data
            // before the do is applied.
            var messagesCopy = previousSelection
                               .Select(m => m.DuckCopy <Message>())
                               .ToList();

            #region Do action

            Action doAction = delegate
            {
                foreach (var message in previousSelection)
                {
                    message.MarkDeleted();
                }

                viewFilter.UpdateCurrentViewAsync();

                flipper.Delay();
            };

            #endregion

            #region Undo action

            Action undoAction = delegate
            {
                foreach (var message in previousSelection)
                {
                    // Get old message from copied data
                    Message message1 = message;

                    var oldMessage = messagesCopy.Single(m => m.MessageId == message1.MessageId);

                    message.IsRead             = oldMessage.IsRead;
                    message.TargetMessageState = oldMessage.TargetMessageState;
                    message.MessageFolder      = oldMessage.MessageFolder;

                    AsyncUpdateQueue.Enqueue(message);
                }

                // We cannot use the IEditableObject appraoch here because the conversation in question
                // probably might not be in view anymore. So instead we will refresh the whole view.
                viewFilter.RebuildCurrentViewAsync();
            };

            #endregion

            ClientState.Current.UndoManager.Execute(new HistoryAction(doAction, undoAction));
        }
示例#3
0
        public void RemoveLabel(Label label)
        {
            var previousSelection = new List <Message>(
                SelectedMessages.SelectMany(m => m.Conversation.Messages)
                .Distinct());

            // Contains instance copies of messages, this will be the old data
            // before the do is applied.
            var messagesCopy = previousSelection
                               .Select(m => m.DuckCopy <Message>())
                               .ToList();

            #region Do action

            Action doAction = delegate
            {
                foreach (var message in SelectedMessages.ToList())
                {
                    message.RemoveLabel(label);
                }

                viewFilter.UpdateCurrentViewAsync();

                flipper.Delay();
            };

            #endregion

            #region Undo action

            Action undoAction = delegate
            {
                foreach (var message in previousSelection)
                {
                    // Get old message from copied data
                    Message message1 = message;

                    var oldMessage = messagesCopy.Single(m => m.MessageId == message1.MessageId);

                    // Reverts the previous action
                    message.Labels = oldMessage.Labels;
                    message.LabelsList.Replace(oldMessage.LabelsList);
                    message.SendLabels = oldMessage.SendLabels;

                    AsyncUpdateQueue.Enqueue(message);
                }

                // We cannot use the IEditableObject appraoch here because the conversation in question
                // probably might not be in view anymore. So instead we will refresh the whole view.
                viewFilter.RebuildCurrentViewAsync();
            };

            #endregion

            ClientState.Current.UndoManager.Execute(new HistoryAction(doAction, undoAction));

            EventBroker.Publish(AppEvents.MessageLabelsUpdated, this);
        }
示例#4
0
        private void MessagesForwardExecute()
        {
            var messages = SelectedMessages.OfType <TLMessage>().Where(x => x.Id != 0).OrderBy(x => x.Id).ToList();

            if (messages.Count > 0)
            {
                SelectionMode = ListViewSelectionMode.None;

                App.InMemoryState.ForwardMessages = new List <TLMessage>(messages);
                NavigationService.GoBackAt(0);
            }
        }
示例#5
0
 public void Handle(DialogRemovedEventArgs args)
 {
     if (With == args.Dialog.With)
     {
         Execute.BeginOnUIThread(() =>
         {
             Messages.Clear();
             SelectedMessages.Clear();
             SelectionMode = Windows.UI.Xaml.Controls.ListViewSelectionMode.None;
         });
     }
 }
示例#6
0
        internal Task MarkSelectionAsNotSeenAsync()
        {
            var messages = SelectedMessages.ToArray();

            return(Task.Run(() => {
                var tasks = messages
                            .Where(x => x.IsSeen)
                            .GroupBy(x => x.Mailbox)
                            .Select(x => x.Key.MarkAsNotSeenAsync(x.ToArray()));

                Task.WhenAll(tasks);
            }));
        }
示例#7
0
        private void MessagesForwardExecute()
        {
            var messages = SelectedMessages.OfType <TLMessage>().Where(x => x.Id != 0).OrderBy(x => x.Id).ToList();

            if (messages.Count > 0)
            {
                SelectionMode = ListViewSelectionMode.None;

                App.InMemoryState.ForwardMessages = new List <TLMessage>(messages);
                NavigationService.GoBackAt(0);
            }

            //_stateService.ForwardMessages = Messages.Where(x => x.IsSelected).ToList();
            //_stateService.ForwardMessages.Reverse();

            //SelectionMode = Windows.UI.Xaml.Controls.ListViewSelectionMode.None;
            //NavigationService.GoBack();
        }
示例#8
0
        private async void OnMessageSelectionReceived(EventPattern <object> obj)
        {
            Application.Current.AssertUIThread();

            ClearPreviewArea();
            var message = SelectedMessages.FirstOrDefault();

            if (message == null)
            {
                return;
            }

            try {
                await RefreshMessageSelectionAsync(message);
            } catch (Exception ex) {
                Logger.Error(ex);
            }
        }
示例#9
0
        internal async Task RestoreSelectedMessagesAsync()
        {
            try {
                var messages      = SelectedMessages.ToArray();
                var accountGroups = messages.GroupBy(x => x.Mailbox.Account).ToArray();
                foreach (var accountGroup in accountGroups)
                {
                    var trash = accountGroup.Key.GetTrashMailbox();
                    if (trash == null)
                    {
                        throw new InvalidOperationException("Trash must not be null.");
                    }

                    var mailboxGroups = accountGroup.GroupBy(x => x.Mailbox).ToArray();
                    foreach (var mailboxGroup in mailboxGroups)
                    {
                        var groupedMessages = mailboxGroup.ToArray();
                        await mailboxGroup.Key.RestoreMessagesAsync(groupedMessages);
                    }
                }
            } catch (Exception ex) {
                Logger.Error(ex);
            }
        }
示例#10
0
        void MonitorTick(object sender, MonitorEventArgs e)
        {
            if (Usuario == null)
            {
                return;
            }

            try
            {
                Monitor.TimerInterval    = 20;
                Monitor.CallbackArgument = DateTime.UtcNow.ToString();

                var count = 0;

                if (SelectedEntidades.Count > 0)
                {
                    foreach (var entidad in SelectedEntidades)
                    {
                        var style = GetMarkerStyle(entidad);

                        AddMarker(entidad, style);
                        count++;
                        if (SelectedEntidades.Count == 1)
                        {
                            Monitor.SetCenter(entidad.ReferenciaGeografica.Latitude, entidad.ReferenciaGeografica.Longitude);
                        }
                    }

                    if (SelectedMessages.Count > 0)
                    {
                        var selectedDispositivos = SelectedEntidades.Select(entidad => entidad.Dispositivo).ToList();

                        var popups = SharedPositions.GetNewPopupsM2M(selectedDispositivos, DAOFactory)
                                     .Where(p => SelectedMessages.Contains(p.CodigoMensaje));

                        var sonidos   = new List <string>();
                        var lastMsg   = LastMessage;
                        var newPopups = 0;
                        foreach (var popup in popups)
                        {
                            if (popup.Id > lastMsg)
                            {
                                Monitor.AddCallbackScript("AddEvent('" + GetMessageM2M(popup) + "');");
                                if (!string.IsNullOrEmpty(popup.Sound) &&
                                    !sonidos.Contains(Config.Directory.SoundsDir + popup.Sound))
                                {
                                    sonidos.Add(Config.Directory.SoundsDir + popup.Sound);
                                }
                                LastMessage = Math.Max(popup.Id, LastMessage);
                                newPopups++;
                            }
                        }
                        if (sonidos.Count > 0)
                        {
                            Monitor.AddCallbackScript("enqueueSounds(['" + string.Join("','", sonidos.ToArray()) + "']);");
                        }

                        if (newPopups > 0)
                        {
                            Monitor.AddCallbackScript("if(!PopupPanelOpen)ShowEvents();");
                        }
                    }
                }

                // Inserto un script personalizado que muestra un mensaje en pantalla
                Monitor.AddCallbackScript(string.Format("$get('{0}').innerHTML = '{1}';",
                                                        lblInfo.ClientID,
                                                        string.Format(CultureManager.GetSystemMessage("ONLINE_UPDATED_POSITIONS"),
                                                                      count,
                                                                      DateTime.UtcNow.ToDisplayDateTime().ToString("HH:mm:ss"))));
            }
            catch (Exception ex)
            {
                // Inserto un script personalizado que muestra el error en pantalla
                Monitor.AddCallbackScript(string.Format("$get('{0}').innerHTML = '{1}';", lblInfo.ClientID, ex.Message));
            }

            Monitor.AddCallbackScript("lastUpdate = new Date();");
        }
 private void ExecutedRequestStoryCommand(object sender, ExecutedRoutedEventArgs e)
 {
     SelectedMessages.Where(n => n.Story.IsEmpty()).ForEach(m => NewsProvider.RequestNewsStory(m.ToNews()));
 }
 private void CanExecuteRequestStoryCommand(object sender, CanExecuteRoutedEventArgs e)
 {
     e.CanExecute = NewsProvider != null && SelectedMessages.Any(n => n.Story.IsEmpty());
 }