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; }); }
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); }
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(); }); }
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; }
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); }