Exemplo n.º 1
0
        public MainWindowViewModel(
            INavigationManager navigationManager,
            IMailKitApiManager mailKitApiManager,
            ISelectedMessageManager selectedMessageManager,
            IDeleteMessageManager deleteMessageManager)
            : base("MainWindowViewModel")
        {
            Pages = new List <BaseViewModel>
            {
                new AuthorizationViewModel(navigationManager, mailKitApiManager),
                new MainPageViewModel(navigationManager, mailKitApiManager, selectedMessageManager, deleteMessageManager),
                new ErrorAuthViewModel(navigationManager),
                new NewMessageViewModel(navigationManager, mailKitApiManager),
                new ExtendedMessageViewModel(UniqueId.Invalid, navigationManager, mailKitApiManager),
                new CustomAuthorizationViewModel(navigationManager, mailKitApiManager)
            };

            navigationManager.CurrentPage()
            .Select(type => Pages.First(x => x.GetType() == type))
            .Subscribe(viewModel =>
            {
                if (viewModel.Name == "ExtendedMessageViewModel")
                {
                    Pages.RemoveAt(Pages.Count - 1);

                    Pages.Add(new ExtendedMessageViewModel(selectedMessageManager.SelectedMessage,
                                                           navigationManager, mailKitApiManager));

                    CurrentPage = Pages.Last();
                    return;
                }

                CurrentPage = viewModel;
            });
        }
Exemplo n.º 2
0
        public ExtendedMessageViewModel(
            UniqueId selectedMessage,
            INavigationManager navigationManager,
            IMailKitApiManager mailKitApiManager)
            : base("ExtendedMessageViewModel")
        {
            _back          = ReactiveCommand.Create(() => navigationManager.Navigate(typeof(MainPageViewModel)));
            _downloadFiles = ReactiveCommand.CreateFromTask(DownloadFilesHandlerAsync);

            Initialize(mailKitApiManager, selectedMessage);
        }
        public NewMessageViewModel(
            INavigationManager navigationManager,
            IMailKitApiManager mailKitApiManager)
            : base("NewMessageViewModel")
        {
            _attachmentsPaths = new List <string>();
            _back             = ReactiveCommand.Create(() => navigationManager.Navigate(typeof(MainPageViewModel)));

            _sendMessage = ReactiveCommand.CreateFromTask(() => SendMessageAsync(mailKitApiManager, navigationManager));
            _attach      = ReactiveCommand.CreateFromTask(AttachHandler);
        }
Exemplo n.º 4
0
        private void Initialize(IMailKitApiManager mailKitApiManager, UniqueId selectedMessage)
        {
            Task.Run(async() =>
            {
                _message = await mailKitApiManager.GetMessageAsync(selectedMessage);

                From     = _message.From.ToString();
                To       = _message.To.ToString();
                Message  = _message.TextBody;
                HasFiles = _message.Attachments.Any();
            });
        }
Exemplo n.º 5
0
        public CustomAuthorizationViewModel(
            INavigationManager navigationManager,
            IMailKitApiManager mailKitApiManager)
            : base("AuthorizationViewModel")
        {
            _authenticate = ReactiveCommand.CreateFromTask(() => mailKitApiManager.AuthorizeCustomAsync(UserName, Password, ImapHost, ImapPort, SmtpHost, SmtpPort));
            _default      = ReactiveCommand.Create(() => navigationManager.Navigate(typeof(AuthorizationViewModel)));

            _authenticate.Select(unit => typeof(MainPageViewModel))
            .Subscribe(navigationManager.Navigate);

            _authenticate.ThrownExceptions
            .Select(exception => typeof(ErrorAuthViewModel))
            .Subscribe(navigationManager.Navigate);

            //todo check email correctness by subscribing on it
            //todo add support for other email services
        }
        public AuthorizationViewModel(
            INavigationManager navigationManager,
            IMailKitApiManager mailKitApiManager)
            : base("AuthorizationViewModel")
        {
            _authenticate = ReactiveCommand.CreateFromTask(() => mailKitApiManager.AuthorizeAsync(UserName, Password, GetEmailService()));
            _custom       = ReactiveCommand.Create(() =>
            {
                navigationManager.Navigate(typeof(CustomAuthorizationViewModel));
            });

            _authenticate.Select(unit => typeof(MainPageViewModel))
            .Subscribe(navigationManager.Navigate);

            _authenticate.ThrownExceptions
            .Select(exception => typeof(ErrorAuthViewModel))
            .Subscribe(navigationManager.Navigate);

            //todo check email correctness by subscribing on it
            //todo add support for other email services

            SelectedEmailService = 0;
        }
Exemplo n.º 7
0
        public MainPageViewModel(
            INavigationManager navigationManager,
            IMailKitApiManager mailKitApiManager,
            ISelectedMessageManager selectedMessageManager,
            IDeleteMessageManager deleteMessageManager)
            : base("MainPageViewModel")
        {
            _navigationManager      = navigationManager;
            _mailKitApiManager      = mailKitApiManager;
            _selectedMessageManager = selectedMessageManager;
            _deleteMessageManager   = deleteMessageManager;

            _writeMessage = ReactiveCommand.Create(() => {});

            _writeMessage.Select(unit => typeof(NewMessageViewModel))
            .Subscribe(navigationManager.Navigate);

            navigationManager.CurrentPage()
            .Subscribe(async vm => await LoadMessages(vm));

            _deleteMessageManager.MessageDeletedObservable.Subscribe(id =>
            {
                var message = Messages.Items.FirstOrDefault(model => model.Id == id);

                if (message == null)
                {
                    return;
                }

                Messages.Edit(list => list.Remove(message));
            });

            Messages.Connect()
            .ObserveOn(RxApp.MainThreadScheduler)
            .Bind(out _messageCollection)
            .Subscribe();
        }
        private async Task SendMessageAsync(IMailKitApiManager mailKitApiManager, INavigationManager navigationManager)
        {
            if (string.IsNullOrWhiteSpace(From))
            {
                ErrorMessage = "no sender specified";
                return;
            }

            if (string.IsNullOrWhiteSpace(To))
            {
                ErrorMessage = "no recipient specified";
                return;
            }

            await mailKitApiManager.SendMessageAsync(From, To, Message ?? "", _attachmentsPaths);

            From    = string.Empty;
            To      = string.Empty;
            Message = string.Empty;
            _attachmentsPaths.Clear();
            ErrorMessage = string.Empty;

            navigationManager.Navigate(typeof(MainPageViewModel));
        }
 public DeleteMessageManager(IMailKitApiManager mailKitApiManager)
 {
     _mailKitApiManager     = mailKitApiManager;
     _messageDeletedSubject = new BehaviorSubject <UniqueId>(UniqueId.Invalid);
 }