async void LoadAdvertMessage(AdvertShort advertShort, bool dbLoad = false) { if (advertShort == null) { throw new NullReferenceException("LoadAdvertMessage => advertShort == null !"); } if (advertShort.AdverIDinRzeszowiak == 0) { throw new ArgumentException("LoadAdvertMessage => advertShort.AdverIDinRzeszowiak == 0"); } _lastAdvertShort = advertShort; ErrorMessage = String.Empty; Activity = true; CopyAdverToViewModel(new Advert()); Advert _advert; if (!dbLoad) { _advert = await _rzeszowiakRepository.GetAdvertAsync(advertShort); } else { _advert = await _setting.GetFavoriteAdvertDBAsync(advertShort); } if (_advert == null) { if (!dbLoad) { ErrorMessage = "Błąd podczas ładowania strony.\nSprawdź połączenie internetowe i spróbuj ponownie."; } else { ErrorMessage = "Błąd podczas wczytywania ogłoszenia z bazy danych.\nSkontaktuj się z deweloperem aplikacji."; } MailStatus = MailStatusEnum.email_default; } else { CopyAdverToViewModel(_advert); LastSendMailDate = await _setting.LastMailSendDateAsync(_advert); IsFavorite = await _setting.IsAdvertInDBAsync(_advert); if (LastSendMailDate.IsSend()) { MailStatus = MailStatusEnum.email_send; } else { MailStatus = MailStatusEnum.email_default; } } Activity = false; }
public PreviewViewModel(INavigationService navigationService, IRzeszowiak RzeszowiakRepository, IRzeszowiakImageContainer rzeszowiakImageContainer, IPageDialogService pageDialog, ISetting setting, IDependencyService dependencyService, IEventAggregator eventAggregator) { _rzeszowiakRepository = RzeszowiakRepository ?? throw new NullReferenceException("IRzeszowiakRepository RzeszowiakRepository == null !"); _navigationService = navigationService ?? throw new NullReferenceException("INavigationService navigationService == null !"); _pageDialog = pageDialog ?? throw new NullReferenceException("IPageDialogService pageDialog == null !"); _imageContainer = rzeszowiakImageContainer ?? throw new NullReferenceException("IRzeszowiakImageContainer rzeszowiakImageContainer == null !"); _setting = setting ?? throw new NullReferenceException("ISetting setting == null !"); _dependencyService = dependencyService ?? throw new NullReferenceException("IDependencyService dependencyService == null !"); _eventAggregator = eventAggregator ?? throw new NullReferenceException("IEventAggregator eventAggregator == null !"); _imageContainer.OnDownloadFinish += ImageDownloadFinish; ImageURLsList.CollectionChanged += (s, e) => { OnPropertyChanged("ImageVisible"); }; AdditionalData.CollectionChanged += (s, e) => { OnPropertyChanged("AdditionalData"); }; OpenAdvertPage = new Command(() => { if (_lastAdvert?.URL?.Length > 0) { _dependencyService.Get <IToast>().Show("Otwieram strone ogłoszenia"); Device.OpenUri(new Uri(_lastAdvert?.URL)); } }); RefreshAdvert = new Command(() => { if (_lastAdvertShort != null) { _dependencyService.Get <IToast>().Show("Odświeżam ogłoszenie"); LoadAdvertMessage(_lastAdvertShort); } }); MailAdvert = new Command(async() => { Debug.Write("MailAdvert"); if (MailStatus == MailStatusEnum.email_creating) { if (LastSendMailDate.IsSend()) { MailStatus = MailStatusEnum.email_send; } else { MailStatus = MailStatusEnum.email_default; } return; } if (!_setting.IsUserMailCorrect) { await _pageDialog.DisplayAlertAsync(_setting.GetAppNameAndVersion, "Nie można wysłać wiadomości.\nUzupełnij w ustawieniach aplikacji swój adres email.", "OK"); return; } if (!CanSendMail()) { await _pageDialog.DisplayAlertAsync(_setting.GetAppNameAndVersion, "Nie można narazie wysłać wiadomości.", "OK"); return; } if (_lastAdvert?.EmailToken.Length != 10) { await _pageDialog.DisplayAlertAsync(_setting.GetAppNameAndVersion, "Problem z wysłaniem wiadomości. Odśwież ogłoszenie.", "OK"); return; } MailStatus = MailStatusEnum.email_creating; ScrollToButtom?.Invoke(); }); FavoriteAdvert = new Command(async() => { if (_lastAdvert == null) { return; } if (IsFavorite) { if (await _setting.DeleteAdvertDBAsync(_lastAdvert)) { _dependencyService.Get <IToast>().Show("Usunięto ogłoszenie z ulubionych"); _eventAggregator.GetEvent <AdvertDeleteFavEvent>().Publish(_lastAdvertShort); IsFavorite = !IsFavorite; } else { _dependencyService.Get <IToast>().Show("Wystąpił błąd podczas usuwania ogłoszenia z ulubionych"); } } else { if (await _setting.InsertOrUpdateAdvertDBAsync(_lastAdvert)) { _eventAggregator.GetEvent <AdvertAddFavEvent>().Publish(_lastAdvert); _dependencyService.Get <IToast>().Show("Dodano ogłoszenie do ulubionych"); IsFavorite = !IsFavorite; } else { _dependencyService.Get <IToast>().Show("Wystąpił błąd podczas dodawania ogłoszenia do ulubionych"); } } }); ImageTapped = new Command <int>(async(selecteIndex) => { if (ImageURLsList.Count == 0) { return; } var navigationParams = new NavigationParameters(); navigationParams.Add("ImageSelectedIndex", selecteIndex); navigationParams.Add("ImageList", ImageURLsList); await _navigationService.NavigateAsync("PreviewImagePage", navigationParams, useModalNavigation: false, animated: false); }); BackButtonTapped = new Command(async() => { await _navigationService.GoBackAsync(null, false, false); }); MailSendButtonTapped = new Command <string>(async(message) => { Debug.Write("MailSendButtonTapped"); if (!_setting.IsUserMailCorrect) { await _pageDialog.DisplayAlertAsync(_setting.GetAppNameAndVersion, "Nie można wysłać wiadomości.\nUzupełnij w ustawieniach aplikacji swój adres email.", "OK"); return; } if ((message?.Length ?? 0) == 0) { await _pageDialog.DisplayAlertAsync(_setting.GetAppNameAndVersion, "Nie można wysłać pustej wiadomości. Weź coś napisz.", "OK"); return; } if (!CanSendMail()) { await _pageDialog.DisplayAlertAsync(_setting.GetAppNameAndVersion, "Nie można narazie wysłać wiadomości.", "OK"); return; } if (_lastAdvert?.EmailToken.Length != 10) { await _pageDialog.DisplayAlertAsync(_setting.GetAppNameAndVersion, "Problem z wysłaniem wiadomości. Odśwież ogłoszenie.", "OK"); return; } MailStatus = MailStatusEnum.email_sending; var status = await _rzeszowiakRepository.SendUserMessage(_lastAdvert, message, _setting.UserEmail); if (status) { await _setting.UpdateSendMailNoticeAsync(_lastAdvert); LastSendMailDate = DateTime.Now; MailStatus = MailStatusEnum.email_send; await _pageDialog.DisplayAlertAsync(_setting.GetAppNameAndVersion, "Twoja wiadomość została wysłana.", "OK"); } else { MailStatus = MailStatusEnum.email_default; await _pageDialog.DisplayAlertAsync(_setting.GetAppNameAndVersion, "Twoja wiadomość nie została wysłana. Wystąpił nieoczekiwany błąd.", "OK"); } }); }