/* * Copyright (c) 2010-2020 Belledonne Communications SARL. * * This file is part of Linphone TutorialCS. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ using _05_FileTransfer.Service; using Linphone; using System; using System.Threading.Tasks; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; namespace _05_FileTransfer.Views { public sealed partial class ChatsPage : Page { private CoreService CoreService { get; } = CoreService.Instance; private NavigationService NavigationService { get; } = NavigationService.Instance; public ChatsPage() { this.InitializeComponent(); } protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); NavigationService.CurrentChatspage = this; UpdateChatRooms(); CoreService.AddOnOnMessageReceivedDelegate(OnMessageReceiveOrSent); CoreService.AddOnMessageSentDelegate(OnMessageReceiveOrSent); } protected override void OnNavigatedFrom(NavigationEventArgs e) { NavigationService.CurrentChatspage = null; CoreService.RemoveOnOnMessageReceivedDelegate(OnMessageReceiveOrSent); CoreService.RemoveOnMessageSentDelegate(OnMessageReceiveOrSent); base.OnNavigatedFrom(e); } private void OnMessageReceiveOrSent(Core core, ChatRoom chatRoom, ChatMessage message) => UpdateChatRooms(); public void UpdateChatRooms() { ChatRoom selectedChatRoom = (ChatRoom)ChatRoomsLV.SelectedItem; ChatRoomsLV.Items.Clear(); foreach (ChatRoom chatRoom in CoreService.Core.ChatRooms) { if (chatRoom.HistorySize > 0) { ChatRoomsLV.Items.Add(chatRoom); if (selectedChatRoom == chatRoom) { ChatRoomsLV.SelectedItem = chatRoom; } } } } private void ChatRoomsLV_ItemClick(object sender, ItemClickEventArgs e) { ChatRoomsLV.SelectedItem = e.ClickedItem; ChatRoomFrame.Navigate(typeof(ChatPage), e.ClickedItem); } private async void NewChatRoom_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) { string peerSipAddress = await InputTextDialogAsync("Enter peer sip address"); if (!String.IsNullOrWhiteSpace(peerSipAddress)) { ChatRoom newChatRoom = CoreService.CreateOrGetChatRoom(peerSipAddress); if (newChatRoom != null) { ChatRoomFrame.Navigate(typeof(ChatPage), newChatRoom); } else { ContentDialog noSettingsDialog = new ContentDialog { Title = "ChatRoom creation error", Content = "An error occurred during ChatRoom creation, check sip address validity and try again.", CloseButtonText = "OK" }; await noSettingsDialog.ShowAsync(); } } } private async Task InputTextDialogAsync(string title) { TextBox inputTextBox = new TextBox { AcceptsReturn = false, Height = 32 }; ContentDialog dialog = new ContentDialog { Content = inputTextBox, Title = title, IsSecondaryButtonEnabled = true, PrimaryButtonText = "OK", SecondaryButtonText = "Cancel" }; if (await dialog.ShowAsync() == ContentDialogResult.Primary) return inputTextBox.Text; else return ""; } } }