Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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
            {
            }
        }
Esempio n. 3
0
        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)));
            });
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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;
 }
Esempio n. 7
0
 private void ContentDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
 {
     //Nothing to do
     BefehlsNachricht = null;
 }