Facebook
From Hope, 1 Month ago, written in C#.
Embed
Download Paste or View Raw
Hits: 138
  1. using FireChat.Database;
  2. using FireChat.Helpers;
  3. using FireChat.Models;
  4. using MahApps.Metro.Controls;
  5. using System;
  6. using System.ComponentModel;
  7. using System.Threading.Tasks;
  8. using System.Windows;
  9. using System.Windows.Input;
  10.  
  11. namespace FireChat.Windows
  12. {
  13.     /// <summary>
  14.     /// Interaction logic for ChatWindow.xaml
  15.     /// </summary>
  16.     public partial class ChatWindow : MetroWindow
  17.     {
  18.         private ChatDatabase _database;
  19.         private string _username;
  20.         private string _nickname;
  21.  
  22.         public ChatWindow(ChatDatabase database, string username, string nickname)
  23.         {
  24.             InitializeComponent();
  25.             _database = database;
  26.             _username = username;
  27.             _nickname = nickname;
  28.         }
  29.  
  30.         private void ChatWindow_Loaded(object sender, RoutedEventArgs e)
  31.         {
  32.             Title = Title.Replace("{username}", _username);
  33.             Title = Title.Replace("{nickname}", _nickname);
  34.             StartListening();
  35.         }
  36.  
  37.         private async void StartListening()
  38.         {
  39.             await _database.SetMessageAddedListener((messageModel) =>
  40.             {
  41.                 ChatMessageModel msg = new ChatMessageModel(messageModel);
  42.                 chatListView.Invoke(delegate
  43.                 {
  44.                     chatListView.Items.Add(msg);
  45.                     // We should check if we are not scrolled up for UX but whatever
  46.                     if (chatListView.Items.Count > 0)
  47.                     {
  48.                         chatListView.ScrollIntoView(chatListView.Items[chatListView.Items.Count - 1]);
  49.                     }
  50.                 });
  51.             });
  52.  
  53.         }
  54.  
  55.  
  56.         protected override void OnClosing(CancelEventArgs e)
  57.         {
  58.             _database.RemoveMessageAddedListener();
  59.             base.OnClosing(e);
  60.         }
  61.  
  62.         private void quitButton_Click(object sender, RoutedEventArgs e)
  63.         {
  64.             this.Close();
  65.         }
  66.  
  67.         private void logoutButton_Click(object sender, RoutedEventArgs e)
  68.         {
  69.             GoToLoginWindow();
  70.         }
  71.  
  72.         private void GoToLoginWindow()
  73.         {
  74.             var loginWindow = new LoginWindow(_database); ;
  75.             loginWindow.Left = this.Left;
  76.             loginWindow.Top = this.Top;
  77.             loginWindow.Show();
  78.             this.Close();
  79.         }
  80.  
  81.         private async void deleteAccountButton_Click(object sender, System.Windows.RoutedEventArgs e)
  82.         {
  83.             var answer = MessageBoxHelper.ShowQuestion("Are you sure you want to delete your account?nYour messages will not be deleted.");
  84.  
  85.             if (answer != MessageBoxResult.Yes)
  86.             {
  87.                 return;
  88.             }
  89.  
  90.             if (await _database.DeleteUserAsync(_username))
  91.             {
  92.                 MessageBoxHelper.ShowSuccess("Account deleted successfully.");
  93.                 GoToLoginWindow();
  94.             }
  95.             else
  96.             {
  97.                 MessageBoxHelper.ShowError("An error occurred while deleting your account.");
  98.             }
  99.         }
  100.  
  101.         private async void sendButton_Click(object sender, RoutedEventArgs e)
  102.         {
  103.             IsEnabled = false;
  104.             await SendCurrentMessageAsync();
  105.             IsEnabled = true;
  106.             messageBox.Focus();
  107.         }
  108.  
  109.         private async Task SendCurrentMessageAsync()
  110.         {
  111.             if (string.IsNullOrWhiteSpace(messageBox.Text))
  112.             {
  113.                 return;
  114.             }
  115.  
  116.             var messageModel = new ChatMessageModel(_username, _nickname, messageBox.Text, DateTime.Now);
  117.             messageModel.SenderNickname = anonymousCheckbox.IsChecked == true ? "Anonymous" : _nickname;
  118.  
  119.             if (!await _database.SendMessageAsync(messageModel))
  120.             {
  121.                 MessageBoxHelper.ShowError("An error occurred while sending the message.");
  122.                 return;
  123.             }
  124.  
  125.             messageBox.Text = string.Empty;
  126.         }
  127.  
  128.         protected override async void OnKeyDown(KeyEventArgs e)
  129.         {
  130.             if (e.Key == Key.Enter)
  131.             {
  132.                 IsEnabled = false;
  133.                 await SendCurrentMessageAsync();
  134.                 IsEnabled = true;
  135.                 messageBox.Focus();
  136.                 e.Handled = true;
  137.             }
  138.  
  139.             base.OnKeyDown(e);
  140.         }
  141.     }
  142. }