2025-06-19 23:24:39 -07:00

100 lines
3.7 KiB
C#

using Microsoft.AspNetCore.Mvc.ModelBinding;
using qtc_net_client_2.Services;
using QtCNETAPI.Dtos.User;
using QtCNETAPI.Events;
using QtCNETAPI.Models;
using QtCNETAPI.Services.ApiService;
using QtCNETAPI.Services.GatewayService;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace qtc_net_client_2.Forms
{
public partial class DirectMessage : Form
{
private IGatewayService _gatewayService;
private IApiService _apiService;
private QtCNETAPI.Models.Message? InitMessage;
private AudioService AudioService = new();
public UserInformationDto User { get; set; }
public ObservableCollection<string> Messages { get; set; }
public DirectMessage(IGatewayService gatewayService, IApiService apiService, UserInformationDto user, QtCNETAPI.Models.Message? initMsg = null)
{
_gatewayService = gatewayService;
_apiService = apiService;
User = user;
Messages = new ObservableCollection<string>();
InitMessage = initMsg;
InitializeComponent();
}
private void frmDirectMessage_Load(object sender, EventArgs e)
{
lblUsername.Text = User.Username;
Text = $"QtC.NET Client - Direct Message With {User.Username}";
Messages.CollectionChanged += Messages_CollectionChanged;
if (InitMessage != null)
{
Messages.Add($"[{User.Username}] {InitMessage.Content}\n");
AudioService.PlaySoundEffect("sndDirectMsg");
}
}
private async void btnSend_Click(object sender, EventArgs e)
{
if(InvokeRequired)
{
await Invoke(async delegate ()
{
if (!string.IsNullOrEmpty(rtxtChatbox.Text))
{
await _gatewayService.SendDirectMessageAsync(User, new QtCNETAPI.Models.Message { Content = rtxtChatbox.Text, AuthorId = _apiService.CurrentUser.Id });
Messages.Add($"[{_apiService.CurrentUser.Username}] {rtxtChatbox.Text}\n");
rtxtChatbox.Clear();
AudioService.PlaySoundEffect("sndSendClick");
}
});
}
else
{
if (!string.IsNullOrEmpty(rtxtChatbox.Text))
{
await _gatewayService.SendDirectMessageAsync(User, new QtCNETAPI.Models.Message { Content = rtxtChatbox.Text, AuthorId = _apiService.CurrentUser.Id });
Messages.Add($"[{_apiService.CurrentUser.Username}] {rtxtChatbox.Text}\n");
rtxtChatbox.Clear();
AudioService.PlaySoundEffect("sndSendClick");
}
}
}
private void Messages_CollectionChanged(object? sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if(e.NewItems != null)
{
if (InvokeRequired)
{
Invoke(delegate ()
{
rtxtChat.Text += e.NewItems.Cast<string>().FirstOrDefault();
AudioService.PlaySoundEffect("sndMessage");
});
}
else
{
rtxtChat.Text += e.NewItems.Cast<string>().FirstOrDefault();
AudioService.PlaySoundEffect("sndMessage");
}
}
}
}
}