public void BufferNachricht(Angebot angebot, ChatNachricht nachricht, string nachrichtenAccess, bool isNew) { ChatInfo newChat = null; string gegenseiteAnbieterID; if (_loginService.AnbieterId == nachricht.SenderAnbieterID) { gegenseiteAnbieterID = nachricht.EmpfaengerAnbieterID; } else { gegenseiteAnbieterID = nachricht.SenderAnbieterID; } var bufferedEntry = _buffer.Where(b => b.AngebotID == angebot.Id && b.GegenseiteAnbieterID == gegenseiteAnbieterID).FirstOrDefault(); if (bufferedEntry != null) { if (string.IsNullOrEmpty(bufferedEntry.NachrichtenAccess) && !string.IsNullOrEmpty(nachrichtenAccess)) { bufferedEntry.NachrichtenAccess = nachrichtenAccess; } if (bufferedEntry.Nachrichten.Where(n => n.Id == nachricht.Id).Count() == 0) { bufferedEntry.Nachrichten.Add(nachricht); } if (isNew) { bufferedEntry.Ungelesen = true; } } else { newChat = new ChatInfo(); newChat.AngebotID = angebot.Id; newChat.AnbieterID = angebot.AnbieterId; newChat.NachrichtenAccess = nachrichtenAccess; newChat.Nachrichten.Add(nachricht); newChat.GegenseiteAnbieterID = gegenseiteAnbieterID; newChat.Ungelesen = true; _buffer.Add(newChat); } PersistBuffer(); if (newChat != null) { NewChatCreated?.Invoke(newChat); } }
private async void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) { var deferral = args.GetDeferral(); var pruefFehler = await _reservierungService.CheckReservierungAsync(_vm.Reservierung); if (!string.IsNullOrEmpty(pruefFehler)) { args.Cancel = true; MessageDialog error = new MessageDialog(pruefFehler, "Fehler"); await error.ShowAsync(); deferral.Complete(); return; } var saved = await _reservierungService.SaveReservierungAsync(_vm.Reservierung); if (!saved) { args.Cancel = true; MessageDialog error = new MessageDialog("Fehler beim Speichern der Reservierung - bitte später noch einmal versuchen.", "Fehler"); await error.ShowAsync(); deferral.Complete(); return; } await _reservierungService.ReservierungBestaetigenAsync(_vm.Reservierung); BefehlsNachricht = new ChatNachricht(); BefehlsNachricht.AngebotID = _angebot.Id; BefehlsNachricht.EmpfaengerAnbieterID = _vm.Reservierung.AusleiherID; BefehlsNachricht.TechnischerNachrichtenTyp = "Reservierung"; BefehlsNachricht.SenderAnbieterID = _angebot.AnbieterId; BefehlsNachricht.Nachricht = Newtonsoft.Json.JsonConvert.SerializeObject(_vm.Reservierung); BefehlsNachricht.SendeDatum = DateTime.Now; await _chatService.SendNachrichtAsync(_angebot, BefehlsNachricht, _chatInfo.NachrichtenAccess, false); try { deferral.Complete(); }catch { } }
private async void _chatPollingService_NachrichtErhalten(Angebot angebot, ChatNachricht nachricht) { if (angebot.Id != AngebotViewModel.Angebot.Id || nachricht.SenderAnbieterID == _loginService.AnbieterId) { return; } await _coreDispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { var neueNachricht = new ChatNachrichtViewModel(nachricht) { IchBinEmpfaenger = true }; Nachrichten.Add(neueNachricht); ScrollToChatNachricht?.Invoke(neueNachricht); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Ungelesen))); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(NeuesteNachricht))); }); }
public async Task SendNachrichtAsync(Angebot angebot, ChatNachricht nachricht, string accessGrant, bool includeForeignAccess = false) { string accessGrantToUse; //Idee: wenn accessGrant leer, dann aus foreign nachlesen if (string.IsNullOrEmpty(accessGrant)) { await InitReadConnectionAsync(); var accessDownload = await _readConnection.ObjectService.DownloadObjectAsync(_readConnection.Bucket, "Nachrichten/" + nachricht.SenderAnbieterID + "/" + nachricht.AngebotID + "/" + nachricht.EmpfaengerAnbieterID + "/Token", new DownloadOptions(), false); await accessDownload.StartDownloadAsync(); accessGrantToUse = Encoding.UTF8.GetString(accessDownload.DownloadedBytes); } else { accessGrantToUse = accessGrant; } var foreignConnection = await InitForeignConnectionAsync(accessGrantToUse); if (includeForeignAccess) { var token = _identityService.CreatePartialWriteAccess("Nachrichten/" + nachricht.SenderAnbieterID + "/" + nachricht.AngebotID + "/" + nachricht.EmpfaengerAnbieterID + "/"); var foreignAccessUpload = await foreignConnection.ObjectService.UploadObjectAsync(foreignConnection.Bucket, "Nachrichten/" + nachricht.EmpfaengerAnbieterID + "/" + nachricht.AngebotID + "/" + nachricht.SenderAnbieterID + "/Token", new UploadOptions(), Encoding.UTF8.GetBytes(token), false); await foreignAccessUpload.StartUploadAsync(); } var nachrichtJson = Newtonsoft.Json.JsonConvert.SerializeObject(nachricht); var nachrichtUpload = await foreignConnection.ObjectService.UploadObjectAsync(foreignConnection.Bucket, "Nachrichten/" + nachricht.EmpfaengerAnbieterID + "/" + nachricht.AngebotID + "/" + nachricht.SenderAnbieterID + "/" + nachricht.Id, new UploadOptions() { Expires = DateTime.Now.AddDays(7) }, Encoding.UTF8.GetBytes(nachrichtJson), false); await nachrichtUpload.StartUploadAsync(); _chatBufferService.BufferNachricht(angebot, nachricht, accessGrantToUse, false); }
public async Task SendNachricht() { var includeForeignAccess = Nachrichten.Count == 0; ChatNachricht nachricht = new ChatNachricht(); nachricht.AngebotID = AngebotViewModel.Angebot.Id; nachricht.Nachricht = NachrichtComposer; nachricht.SendeDatum = DateTime.Now; nachricht.SenderAnbieterID = _loginService.AnbieterId; nachricht.EmpfaengerAnbieterID = _chatInfo.GegenseiteAnbieterID; await _chatService.SendNachrichtAsync(AngebotViewModel.Angebot, nachricht, _chatInfo.NachrichtenAccess, includeForeignAccess); var neueNachricht = new ChatNachrichtViewModel(nachricht) { IchWarSender = true }; Nachrichten.Add(neueNachricht); NachrichtComposer = ""; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(NachrichtComposer))); ScrollToChatNachricht?.Invoke(neueNachricht); }
public ChatNachrichtViewModel(ChatNachricht nachricht) { Nachricht = nachricht; }
private void ContentDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) { //Nothing to do BefehlsNachricht = null; }