Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 852ec739cb | |||
| 98f62e976c | |||
| bfcc445c63 | |||
| 987fae22f0 | |||
| 95daf24473 | |||
| 256e10a7ba | |||
| 5016e63a38 | |||
| 0d71fe5983 | |||
| 55323321d0 | |||
| ca895d1b97 | |||
| 89d3c60bde | |||
| 391b182f4c | |||
| f1648a12c2 | |||
| 4361a69506 | |||
| b358bb54d0 | |||
| a95d012d69 |
@ -6,5 +6,6 @@
|
|||||||
public string Name { get; set; } = string.Empty;
|
public string Name { get; set; } = string.Empty;
|
||||||
public string CreatorId { get; set; } = string.Empty;
|
public string CreatorId { get; set; } = string.Empty;
|
||||||
public DateTime CreatedAt { get; set; } = new DateTime();
|
public DateTime CreatedAt { get; set; } = new DateTime();
|
||||||
|
public int UserCount { get; set; } = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,6 +9,7 @@
|
|||||||
public string Role { get; set; } = string.Empty;
|
public string Role { get; set; } = string.Empty;
|
||||||
public string PasswordHash { get; set; } = string.Empty;
|
public string PasswordHash { get; set; } = string.Empty;
|
||||||
public string Email { get; set; } = string.Empty;
|
public string Email { get; set; } = string.Empty;
|
||||||
|
public bool IsEmailVerified { get; set; } = false;
|
||||||
public DateTime DateOfBirth { get; set; }
|
public DateTime DateOfBirth { get; set; }
|
||||||
public DateTime CreatedAt { get; set; }
|
public DateTime CreatedAt { get; set; }
|
||||||
public int Status { get; set; } = 0;
|
public int Status { get; set; } = 0;
|
||||||
@ -16,6 +17,7 @@
|
|||||||
public int StockAmount { get; set; } = 0;
|
public int StockAmount { get; set; } = 0;
|
||||||
public DateTime LastCurrencySpin { get; set; }
|
public DateTime LastCurrencySpin { get; set; }
|
||||||
public int ActiveProfileCosmetic { get; set; } = 0;
|
public int ActiveProfileCosmetic { get; set; } = 0;
|
||||||
|
public string CurrentRoomId { get; set; } = string.Empty;
|
||||||
|
|
||||||
public virtual IEnumerable<RefreshToken>? RefreshTokens { get; }
|
public virtual IEnumerable<RefreshToken>? RefreshTokens { get; }
|
||||||
public virtual IEnumerable<Contact>? ContactsMade { get; }
|
public virtual IEnumerable<Contact>? ContactsMade { get; }
|
||||||
|
|||||||
@ -7,10 +7,11 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Meziantou.Framework.Win32.CredentialManager" Version="1.7.6" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.16" />
|
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.16" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="9.0.5" />
|
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="9.0.9" />
|
||||||
<PackageReference Include="RestSharp" Version="112.1.0" />
|
<PackageReference Include="RestSharp" Version="112.1.0" />
|
||||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.10.0" />
|
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.14.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@ -15,6 +15,8 @@ namespace QtCNETAPI.Services.ApiService
|
|||||||
private RestClient _client;
|
private RestClient _client;
|
||||||
private LoggingService _loggingService;
|
private LoggingService _loggingService;
|
||||||
|
|
||||||
|
private CredentialService _credService = new();
|
||||||
|
|
||||||
internal string? sessionToken;
|
internal string? sessionToken;
|
||||||
internal string apiUri;
|
internal string apiUri;
|
||||||
|
|
||||||
@ -411,21 +413,23 @@ namespace QtCNETAPI.Services.ApiService
|
|||||||
public async Task<ServiceResponse<string>> RefreshSessionIfInvalid()
|
public async Task<ServiceResponse<string>> RefreshSessionIfInvalid()
|
||||||
{
|
{
|
||||||
var tokenHandler = new JwtSecurityTokenHandler();
|
var tokenHandler = new JwtSecurityTokenHandler();
|
||||||
var refToken = await File.ReadAllTextAsync("./session.token");
|
var refToken = _credService.GetAccessToken(); // fuck CA1416, if this is being ran on linux it should just crash (theoretically)
|
||||||
|
|
||||||
|
if (refToken == null)
|
||||||
|
{
|
||||||
|
// treat as session expired
|
||||||
|
return new ServiceResponse<string> { Success = false, Message = "Refresh Token Not Found. Session Expired." };
|
||||||
|
}
|
||||||
|
|
||||||
JwtSecurityToken token = tokenHandler.ReadJwtToken(SessionToken);
|
JwtSecurityToken token = tokenHandler.ReadJwtToken(SessionToken);
|
||||||
|
|
||||||
if(DateTime.Compare(DateTime.UtcNow, token.ValidTo) > 0)
|
if(DateTime.Compare(DateTime.UtcNow, token.ValidTo) > 0)
|
||||||
{
|
{
|
||||||
if (!File.Exists("./session.token")) { return new ServiceResponse<string> { Success = false, Message = "Session File Not Found. Session Expired." }; }
|
|
||||||
|
|
||||||
var result = await RefreshLogin(refToken);
|
var result = await RefreshLogin(refToken);
|
||||||
|
|
||||||
if (result == null || result.Success == false)
|
if (result == null || result.Success == false)
|
||||||
{
|
{
|
||||||
File.Delete("./session.token");
|
return new ServiceResponse<string> { Success = false, Message = "Session Expired." }; // logging in again should overwrite old token
|
||||||
|
|
||||||
return new ServiceResponse<string> { Success = false, Message = "Session Expired." };
|
|
||||||
} else return new ServiceResponse<string> { Success = true, Data = refToken };
|
} else return new ServiceResponse<string> { Success = true, Data = refToken };
|
||||||
} else return new ServiceResponse<string> { Success = true, Data = refToken };
|
} else return new ServiceResponse<string> { Success = true, Data = refToken };
|
||||||
}
|
}
|
||||||
|
|||||||
42
QtCNETAPI/Services/CredentialService.cs
Normal file
42
QtCNETAPI/Services/CredentialService.cs
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
using Meziantou.Framework.Win32;
|
||||||
|
|
||||||
|
namespace QtCNETAPI.Services
|
||||||
|
{
|
||||||
|
public class CredentialService()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
|
||||||
|
* NOTE *
|
||||||
|
This does not work on other platforms such as Linux or macOS.
|
||||||
|
I will probably recode the legacy way of doing this for those other platforms.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void SaveAccessToken(string username, string accessToken)
|
||||||
|
{
|
||||||
|
string applicationName = "QtC.NET";
|
||||||
|
if (System.Diagnostics.Debugger.IsAttached) applicationName = "QtC.NET.Development";
|
||||||
|
|
||||||
|
CredentialManager.WriteCredential(applicationName, username, accessToken, $"Access Token For User {username} On QtC.NET", CredentialPersistence.LocalMachine);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DeleteAccessToken()
|
||||||
|
{
|
||||||
|
string applicationName = "QtC.NET";
|
||||||
|
if (System.Diagnostics.Debugger.IsAttached) applicationName = "QtC.NET.Development";
|
||||||
|
|
||||||
|
CredentialManager.DeleteCredential(applicationName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string? GetAccessToken()
|
||||||
|
{
|
||||||
|
string applicationName = "QtC.NET";
|
||||||
|
if (System.Diagnostics.Debugger.IsAttached) applicationName = "QtC.NET.Development";
|
||||||
|
|
||||||
|
var credential = CredentialManager.ReadCredential(applicationName);
|
||||||
|
if (credential == null) return null;
|
||||||
|
|
||||||
|
return credential.Password;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -12,7 +12,6 @@ namespace QtCNETAPI.Services.GatewayService
|
|||||||
internal string gwBaseUri = GWUrl;
|
internal string gwBaseUri = GWUrl;
|
||||||
|
|
||||||
public Room? CurrentRoom { get; private set; }
|
public Room? CurrentRoom { get; private set; }
|
||||||
public bool InLobby { get; private set; }
|
|
||||||
public HubConnection? HubConnection { get; private set; }
|
public HubConnection? HubConnection { get; private set; }
|
||||||
|
|
||||||
|
|
||||||
@ -120,29 +119,18 @@ namespace QtCNETAPI.Services.GatewayService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task JoinLobbyAsync()
|
public async Task JoinRoomAsync(Room? room = null)
|
||||||
{
|
{
|
||||||
if (HubConnection == null || HubConnection.State != HubConnectionState.Connected) throw new InvalidOperationException("Function was called before connection was made.");
|
if (HubConnection == null || HubConnection.State != HubConnectionState.Connected) throw new InvalidOperationException("Function was called before connection was made.");
|
||||||
|
|
||||||
await HubConnection.SendAsync("JoinLobby", _apiService.CurrentUser);
|
// assume user is trying to join lobby if room is null (does not have db entry)
|
||||||
InLobby = true;
|
room ??= new Room
|
||||||
CurrentRoom = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task JoinRoomAsync(Room room)
|
|
||||||
{
|
{
|
||||||
if (HubConnection == null || HubConnection.State != HubConnectionState.Connected) throw new InvalidOperationException("Function was called before connection was made.");
|
Id = "LOBBY",
|
||||||
|
Name = "Lobby"
|
||||||
if (InLobby == true)
|
};
|
||||||
{
|
|
||||||
await HubConnection.SendAsync("LeaveLobby", _apiService.CurrentUser);
|
|
||||||
InLobby = false;
|
|
||||||
}
|
|
||||||
else if (CurrentRoom != null)
|
|
||||||
{
|
|
||||||
await HubConnection.SendAsync("LeaveRoom", _apiService.CurrentUser, CurrentRoom);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (CurrentRoom != null) await HubConnection.SendAsync("LeaveRoom", _apiService.CurrentUser, CurrentRoom);
|
||||||
await HubConnection.SendAsync("JoinRoom", _apiService.CurrentUser, room);
|
await HubConnection.SendAsync("JoinRoom", _apiService.CurrentUser, room);
|
||||||
CurrentRoom = room;
|
CurrentRoom = room;
|
||||||
}
|
}
|
||||||
@ -151,23 +139,15 @@ namespace QtCNETAPI.Services.GatewayService
|
|||||||
{
|
{
|
||||||
if (HubConnection == null || HubConnection.State != HubConnectionState.Connected) throw new InvalidOperationException("Function was called before connection was made.");
|
if (HubConnection == null || HubConnection.State != HubConnectionState.Connected) throw new InvalidOperationException("Function was called before connection was made.");
|
||||||
|
|
||||||
if (InLobby)
|
if (CurrentRoom != null) await HubConnection.SendAsync("LeaveRoom", _apiService.CurrentUser, CurrentRoom);
|
||||||
{
|
|
||||||
await HubConnection.SendAsync("LeaveLobby", _apiService.CurrentUser);
|
|
||||||
InLobby = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
await HubConnection.SendAsync("LeaveRoom", _apiService.CurrentUser, CurrentRoom);
|
|
||||||
CurrentRoom = null;
|
CurrentRoom = null;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public async Task PostMessageAsync(Message message)
|
public async Task PostMessageAsync(Message message)
|
||||||
{
|
{
|
||||||
if (HubConnection == null || HubConnection.State != HubConnectionState.Connected) throw new InvalidOperationException("Function was called before connection was made.");
|
if (HubConnection == null || HubConnection.State != HubConnectionState.Connected) throw new InvalidOperationException("Function was called before connection was made.");
|
||||||
|
|
||||||
await HubConnection.SendAsync("SendMessage", _apiService.CurrentUser, message, InLobby, CurrentRoom);
|
await HubConnection.SendAsync("SendMessage", _apiService.CurrentUser, message, CurrentRoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task SendDirectMessageAsync(UserInformationDto user, Message message)
|
public async Task SendDirectMessageAsync(UserInformationDto user, Message message)
|
||||||
|
|||||||
@ -18,10 +18,7 @@ namespace QtCNETAPI.Services.GatewayService
|
|||||||
/// The Current Room The Current User Is In
|
/// The Current Room The Current User Is In
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Room? CurrentRoom { get; }
|
public Room? CurrentRoom { get; }
|
||||||
/// <summary>
|
|
||||||
/// Is The User Currently In The Lobby?
|
|
||||||
/// </summary>
|
|
||||||
public bool InLobby { get; }
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The Current Connection To The Gateway
|
/// The Current Connection To The Gateway
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -47,20 +44,13 @@ namespace QtCNETAPI.Services.GatewayService
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public Task DisposeAsync();
|
public Task DisposeAsync();
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Joins The Lobby Of The Server
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
/// <exception cref="InvalidOperationException">Thrown if the function is called before the connection is established.</exception>
|
|
||||||
public Task JoinLobbyAsync();
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Joins The Current User To A Room On The Server
|
/// Joins The Current User To A Room On The Server
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="room">Room To Join</param>
|
/// <param name="room">Room To Join</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="InvalidOperationException">Thrown if the function is called before the connection is established.</exception>
|
/// <exception cref="InvalidOperationException">Thrown if the function is called before the connection is established.</exception>
|
||||||
public Task JoinRoomAsync(Room room);
|
public Task JoinRoomAsync(Room? room = null);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Leaves The Current Room The Current User Is In
|
/// Leaves The Current Room The Current User Is In
|
||||||
|
|||||||
148
qtc-net-client-2/Controls/ChatMessageControl.cs
Normal file
148
qtc-net-client-2/Controls/ChatMessageControl.cs
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
using qtc_net_client_2.Properties;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace qtc_net_client_2.Controls
|
||||||
|
{
|
||||||
|
public class ChatMessageControl : Control
|
||||||
|
{
|
||||||
|
public Image? Avatar { get; set; }
|
||||||
|
public string Username = "Username";
|
||||||
|
public string Message = "Message";
|
||||||
|
|
||||||
|
private Font usernameFont = new("Segoe UI", 9, FontStyle.Bold);
|
||||||
|
private Font messageFont = new("Segoe UI", 9, FontStyle.Regular);
|
||||||
|
private Font messageFontBold = new("Segoe UI", 10, FontStyle.Bold);
|
||||||
|
|
||||||
|
public ChatMessageControl()
|
||||||
|
{
|
||||||
|
DoubleBuffered = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnPaint(PaintEventArgs e)
|
||||||
|
{
|
||||||
|
base.OnPaint(e);
|
||||||
|
|
||||||
|
int avatarSize = 32;
|
||||||
|
int padding = 6;
|
||||||
|
|
||||||
|
// first, draw the avatar
|
||||||
|
Rectangle pfpRect = new(padding, padding, avatarSize, avatarSize);
|
||||||
|
e.Graphics.DrawImage(Avatar ?? Resources.DefaultPfp, pfpRect);
|
||||||
|
|
||||||
|
// then draw the username
|
||||||
|
int textLeft = padding * 2 + avatarSize;
|
||||||
|
int textWidth = Width - textLeft - padding;
|
||||||
|
|
||||||
|
Rectangle usernameRect = new(textLeft, padding, textWidth, 20);
|
||||||
|
e.Graphics.DrawString(Username, usernameFont, Brushes.Black, usernameRect);
|
||||||
|
|
||||||
|
// finally draw the message
|
||||||
|
int messageTop = usernameRect.Bottom + 2;
|
||||||
|
|
||||||
|
Rectangle messageRect = new(textLeft, messageTop, textWidth, Height - messageTop - padding);
|
||||||
|
StringFormat fmt = new()
|
||||||
|
{
|
||||||
|
Trimming = StringTrimming.Word,
|
||||||
|
FormatFlags = 0,
|
||||||
|
Alignment = StringAlignment.Near
|
||||||
|
};
|
||||||
|
|
||||||
|
if (Username.Contains("Server"))
|
||||||
|
{
|
||||||
|
e.Graphics.DrawString(Message, messageFontBold, Brushes.Black, messageRect, fmt);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
e.Graphics.DrawString(Message, messageFont, Brushes.Black, messageRect, fmt);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnResize(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnResize(e);
|
||||||
|
Height = CalculateHeight(Width);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int CalculateHeight(int width)
|
||||||
|
{
|
||||||
|
int padding = 6;
|
||||||
|
int avatarSize = 32;
|
||||||
|
int textLeft = padding * 2 + avatarSize;
|
||||||
|
int textWidth = width - textLeft - padding;
|
||||||
|
|
||||||
|
using (Graphics g = CreateGraphics())
|
||||||
|
{
|
||||||
|
SizeF usernameSize = g.MeasureString(Username, usernameFont, textWidth);
|
||||||
|
SizeF messageSize = g.MeasureString(Message, messageFont, textWidth);
|
||||||
|
|
||||||
|
int totalHeight = padding + (int)usernameSize.Height + 2 + (int)messageSize.Height + padding + 5;
|
||||||
|
return Math.Max(totalHeight, avatarSize + 2 * padding);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ChatMessageControlMinimal : Control
|
||||||
|
{
|
||||||
|
public string Username = "Username";
|
||||||
|
public string Message = "Message";
|
||||||
|
|
||||||
|
private Font usernameFont = new("Segoe UI", 9, FontStyle.Bold);
|
||||||
|
private Font messageFont = new("Segoe UI", 9, FontStyle.Regular);
|
||||||
|
|
||||||
|
public ChatMessageControlMinimal()
|
||||||
|
{
|
||||||
|
DoubleBuffered = true;
|
||||||
|
MinimumSize = new Size(150, 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnPaint(PaintEventArgs e)
|
||||||
|
{
|
||||||
|
base.OnPaint(e);
|
||||||
|
|
||||||
|
int padding = 6;
|
||||||
|
|
||||||
|
// first draw the username
|
||||||
|
int textWidth = Width - padding * 2;
|
||||||
|
|
||||||
|
Rectangle usernameRect = new(padding, padding, textWidth, 20);
|
||||||
|
e.Graphics.DrawString(Username, usernameFont, Brushes.Black, usernameRect);
|
||||||
|
|
||||||
|
// finally draw the message
|
||||||
|
int messageTop = usernameRect.Bottom + 2;
|
||||||
|
|
||||||
|
Rectangle messageRect = new(padding, messageTop, textWidth, Height - messageTop - padding);
|
||||||
|
StringFormat fmt = new()
|
||||||
|
{
|
||||||
|
Trimming = StringTrimming.Word,
|
||||||
|
FormatFlags = 0,
|
||||||
|
Alignment = StringAlignment.Near
|
||||||
|
};
|
||||||
|
|
||||||
|
e.Graphics.DrawString(Message, messageFont, Brushes.Black, messageRect, fmt);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnResize(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnResize(e);
|
||||||
|
Height = CalculateHeight(Width);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int CalculateHeight(int width)
|
||||||
|
{
|
||||||
|
int padding = 6;
|
||||||
|
int textWidth = width - padding * 2;
|
||||||
|
|
||||||
|
using (Graphics g = CreateGraphics())
|
||||||
|
{
|
||||||
|
SizeF usernameSize = g.MeasureString(Username, usernameFont, textWidth);
|
||||||
|
SizeF messageSize = g.MeasureString(Message, messageFont, textWidth);
|
||||||
|
|
||||||
|
int totalHeight = padding + (int)usernameSize.Height + 2 + (int)messageSize.Height + padding + 5;
|
||||||
|
return totalHeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
92
qtc-net-client-2/Controls/ContactEntryControl.cs
Normal file
92
qtc-net-client-2/Controls/ContactEntryControl.cs
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
using Accessibility;
|
||||||
|
using Microsoft.AspNetCore.Mvc.TagHelpers;
|
||||||
|
using qtc_net_client_2.Properties;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace qtc_net_client_2.Controls
|
||||||
|
{
|
||||||
|
public class ContactEntryControl : Control
|
||||||
|
{
|
||||||
|
public Image? Avatar { get; set; }
|
||||||
|
public string Username = "Username";
|
||||||
|
public Color StatusColor = Color.Gray;
|
||||||
|
|
||||||
|
private Font? usernameFont;
|
||||||
|
|
||||||
|
public event EventHandler? ContactDoubleClicked;
|
||||||
|
|
||||||
|
private bool IsHoveredOn;
|
||||||
|
public ContactEntryControl()
|
||||||
|
{
|
||||||
|
// reduce flicker
|
||||||
|
SetStyle(ControlStyles.AllPaintingInWmPaint |
|
||||||
|
ControlStyles.ResizeRedraw |
|
||||||
|
ControlStyles.UserPaint |
|
||||||
|
ControlStyles.OptimizedDoubleBuffer, true);
|
||||||
|
|
||||||
|
Height = 36;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnPaintBackground(PaintEventArgs pevent) { } // prevent this
|
||||||
|
|
||||||
|
protected override void OnPaint(PaintEventArgs e)
|
||||||
|
{
|
||||||
|
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
|
||||||
|
|
||||||
|
Rectangle rect = ClientRectangle;
|
||||||
|
|
||||||
|
using var brush = new LinearGradientBrush(rect, StatusColor, BackColor, LinearGradientMode.Horizontal);
|
||||||
|
|
||||||
|
Color usernameForeColor = Color.Black;
|
||||||
|
if(IsHoveredOn)
|
||||||
|
{
|
||||||
|
usernameForeColor = Color.White;
|
||||||
|
usernameFont = new Font("Segoe UI", 9, FontStyle.Bold | FontStyle.Underline);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
usernameFont = new Font("Segoe UI", 9, FontStyle.Bold);
|
||||||
|
}
|
||||||
|
|
||||||
|
e.Graphics.FillRectangle(brush, rect);
|
||||||
|
|
||||||
|
int margin = 6;
|
||||||
|
int imgSize = 32;
|
||||||
|
|
||||||
|
Rectangle avatarRect = new(margin, (Height - imgSize) / 2, imgSize, imgSize);
|
||||||
|
e.Graphics.DrawImage(Avatar ?? Resources.DefaultPfp, avatarRect);
|
||||||
|
|
||||||
|
int textLeft = avatarRect.Right + margin;
|
||||||
|
|
||||||
|
Rectangle rectText = new(textLeft, 0, Width - textLeft - 8, Height - 16);
|
||||||
|
TextRenderer.DrawText(e.Graphics, Username, usernameFont, rectText, usernameForeColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnMouseDoubleClick(MouseEventArgs e)
|
||||||
|
{
|
||||||
|
base.OnMouseDoubleClick(e);
|
||||||
|
ContactDoubleClicked?.Invoke(this, EventArgs.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnMouseHover(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnMouseHover(e);
|
||||||
|
IsHoveredOn = true;
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnMouseLeave(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnMouseLeave(e);
|
||||||
|
IsHoveredOn = false;
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
95
qtc-net-client-2/Controls/RoomEntryControl.cs
Normal file
95
qtc-net-client-2/Controls/RoomEntryControl.cs
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
using qtc_net_client_2.Properties;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
|
||||||
|
|
||||||
|
namespace qtc_net_client_2.Controls
|
||||||
|
{
|
||||||
|
public class RoomEntryControl : Control
|
||||||
|
{
|
||||||
|
public Image Image = Resources.RoomsChatIcon;
|
||||||
|
public string RoomName = "Room";
|
||||||
|
public bool HideUserCount = false;
|
||||||
|
public int RoomUserCount = 0;
|
||||||
|
|
||||||
|
private Font? nameFont;
|
||||||
|
private Color nameColor;
|
||||||
|
|
||||||
|
private Font userCountFont = new("Segoe UI", 9, FontStyle.Bold);
|
||||||
|
private Color userCountColor = Color.Gray;
|
||||||
|
|
||||||
|
private bool IsHoveredOn = false;
|
||||||
|
|
||||||
|
public event EventHandler? OnRoomDoubleClicked;
|
||||||
|
public RoomEntryControl()
|
||||||
|
{
|
||||||
|
// reduce flicker
|
||||||
|
SetStyle(ControlStyles.AllPaintingInWmPaint |
|
||||||
|
ControlStyles.ResizeRedraw |
|
||||||
|
ControlStyles.UserPaint |
|
||||||
|
ControlStyles.OptimizedDoubleBuffer, true);
|
||||||
|
|
||||||
|
Height = 36;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnPaint(PaintEventArgs e)
|
||||||
|
{
|
||||||
|
if(IsHoveredOn)
|
||||||
|
{
|
||||||
|
nameFont = new("Segoe UI", 9, FontStyle.Bold | FontStyle.Underline);
|
||||||
|
nameColor = Color.LightGray;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
nameFont = new("Segoe UI", 9, FontStyle.Bold);
|
||||||
|
nameColor = Color.Black;
|
||||||
|
}
|
||||||
|
|
||||||
|
int margin = 6;
|
||||||
|
int imageSize = 32;
|
||||||
|
|
||||||
|
Rectangle imageRect = new(margin, (Height - imageSize) / 2, imageSize, imageSize);
|
||||||
|
e.Graphics.DrawImage(Image, imageRect);
|
||||||
|
|
||||||
|
int nameLeft = imageRect.Right + margin;
|
||||||
|
|
||||||
|
Rectangle nameRect = new(nameLeft, 6, Width - nameLeft - 8, Height - 16);
|
||||||
|
TextRenderer.DrawText(e.Graphics, RoomName, nameFont, nameRect, nameColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter);
|
||||||
|
|
||||||
|
string userCountText = RoomUserCount.ToString();
|
||||||
|
Size countSize = TextRenderer.MeasureText(e.Graphics, userCountText, userCountFont);
|
||||||
|
|
||||||
|
if(!HideUserCount)
|
||||||
|
{
|
||||||
|
int rightPad = 8;
|
||||||
|
int countX = Width - countSize.Width - rightPad;
|
||||||
|
int countY = (Height - countSize.Height) / 2;
|
||||||
|
Point userCountPoint = new(countX, countY);
|
||||||
|
|
||||||
|
TextRenderer.DrawText(e.Graphics, userCountText, userCountFont, userCountPoint, userCountColor, TextFormatFlags.Left);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnMouseDoubleClick(MouseEventArgs e)
|
||||||
|
{
|
||||||
|
base.OnMouseDoubleClick(e);
|
||||||
|
OnRoomDoubleClicked?.Invoke(this, EventArgs.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnMouseHover(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnMouseHover(e);
|
||||||
|
IsHoveredOn = true;
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnMouseLeave(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnMouseLeave(e);
|
||||||
|
IsHoveredOn = false;
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
77
qtc-net-client-2/Forms/ChatRoom.Designer.cs
generated
77
qtc-net-client-2/Forms/ChatRoom.Designer.cs
generated
@ -32,17 +32,18 @@
|
|||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ChatRoom));
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ChatRoom));
|
||||||
rtxtChatbox = new RichTextBox();
|
rtxtChatbox = new RichTextBox();
|
||||||
btnSend = new Button();
|
btnSend = new Button();
|
||||||
rtxtChat = new RichTextBox();
|
|
||||||
lblRoomName = new Label();
|
lblRoomName = new Label();
|
||||||
lvUserList = new ListView();
|
|
||||||
ilStatusIcons = new ImageList(components);
|
ilStatusIcons = new ImageList(components);
|
||||||
|
ilProfileImages = new ImageList(components);
|
||||||
|
lvUserList = new ListView();
|
||||||
|
fpnlMessages = new FlowLayoutPanel();
|
||||||
SuspendLayout();
|
SuspendLayout();
|
||||||
//
|
//
|
||||||
// rtxtChatbox
|
// rtxtChatbox
|
||||||
//
|
//
|
||||||
rtxtChatbox.Location = new Point(12, 268);
|
rtxtChatbox.Location = new Point(12, 322);
|
||||||
rtxtChatbox.Name = "rtxtChatbox";
|
rtxtChatbox.Name = "rtxtChatbox";
|
||||||
rtxtChatbox.Size = new Size(512, 54);
|
rtxtChatbox.Size = new Size(589, 54);
|
||||||
rtxtChatbox.TabIndex = 1;
|
rtxtChatbox.TabIndex = 1;
|
||||||
rtxtChatbox.Text = "";
|
rtxtChatbox.Text = "";
|
||||||
rtxtChatbox.KeyDown += rtxtChatbox_KeyDown;
|
rtxtChatbox.KeyDown += rtxtChatbox_KeyDown;
|
||||||
@ -52,24 +53,13 @@
|
|||||||
btnSend.FlatAppearance.BorderSize = 0;
|
btnSend.FlatAppearance.BorderSize = 0;
|
||||||
btnSend.FlatStyle = FlatStyle.Flat;
|
btnSend.FlatStyle = FlatStyle.Flat;
|
||||||
btnSend.Image = Properties.Resources.SendIcon;
|
btnSend.Image = Properties.Resources.SendIcon;
|
||||||
btnSend.Location = new Point(530, 268);
|
btnSend.Location = new Point(607, 322);
|
||||||
btnSend.Name = "btnSend";
|
btnSend.Name = "btnSend";
|
||||||
btnSend.Size = new Size(75, 54);
|
btnSend.Size = new Size(75, 54);
|
||||||
btnSend.TabIndex = 2;
|
btnSend.TabIndex = 2;
|
||||||
btnSend.UseVisualStyleBackColor = true;
|
btnSend.UseVisualStyleBackColor = true;
|
||||||
btnSend.Click += btnSend_Click;
|
btnSend.Click += btnSend_Click;
|
||||||
//
|
//
|
||||||
// rtxtChat
|
|
||||||
//
|
|
||||||
rtxtChat.Font = new Font("Segoe UI", 10F);
|
|
||||||
rtxtChat.HideSelection = false;
|
|
||||||
rtxtChat.Location = new Point(142, 43);
|
|
||||||
rtxtChat.Name = "rtxtChat";
|
|
||||||
rtxtChat.ReadOnly = true;
|
|
||||||
rtxtChat.Size = new Size(463, 219);
|
|
||||||
rtxtChat.TabIndex = 3;
|
|
||||||
rtxtChat.Text = "";
|
|
||||||
//
|
|
||||||
// lblRoomName
|
// lblRoomName
|
||||||
//
|
//
|
||||||
lblRoomName.AutoSize = true;
|
lblRoomName.AutoSize = true;
|
||||||
@ -82,19 +72,6 @@
|
|||||||
lblRoomName.TabIndex = 8;
|
lblRoomName.TabIndex = 8;
|
||||||
lblRoomName.Text = "Room";
|
lblRoomName.Text = "Room";
|
||||||
//
|
//
|
||||||
// lvUserList
|
|
||||||
//
|
|
||||||
lvUserList.Alignment = ListViewAlignment.Left;
|
|
||||||
lvUserList.Location = new Point(12, 43);
|
|
||||||
lvUserList.MultiSelect = false;
|
|
||||||
lvUserList.Name = "lvUserList";
|
|
||||||
lvUserList.Size = new Size(124, 219);
|
|
||||||
lvUserList.SmallImageList = ilStatusIcons;
|
|
||||||
lvUserList.TabIndex = 9;
|
|
||||||
lvUserList.UseCompatibleStateImageBehavior = false;
|
|
||||||
lvUserList.View = View.SmallIcon;
|
|
||||||
lvUserList.DoubleClick += lvUserList_DoubleClick;
|
|
||||||
//
|
|
||||||
// ilStatusIcons
|
// ilStatusIcons
|
||||||
//
|
//
|
||||||
ilStatusIcons.ColorDepth = ColorDepth.Depth32Bit;
|
ilStatusIcons.ColorDepth = ColorDepth.Depth32Bit;
|
||||||
@ -105,17 +82,50 @@
|
|||||||
ilStatusIcons.Images.SetKeyName(2, "Away");
|
ilStatusIcons.Images.SetKeyName(2, "Away");
|
||||||
ilStatusIcons.Images.SetKeyName(3, "DND");
|
ilStatusIcons.Images.SetKeyName(3, "DND");
|
||||||
//
|
//
|
||||||
|
// ilProfileImages
|
||||||
|
//
|
||||||
|
ilProfileImages.ColorDepth = ColorDepth.Depth32Bit;
|
||||||
|
ilProfileImages.ImageStream = (ImageListStreamer)resources.GetObject("ilProfileImages.ImageStream");
|
||||||
|
ilProfileImages.TransparentColor = Color.Transparent;
|
||||||
|
ilProfileImages.Images.SetKeyName(0, "DefaultPFP");
|
||||||
|
//
|
||||||
|
// lvUserList
|
||||||
|
//
|
||||||
|
lvUserList.Alignment = ListViewAlignment.Left;
|
||||||
|
lvUserList.Location = new Point(12, 43);
|
||||||
|
lvUserList.MultiSelect = false;
|
||||||
|
lvUserList.Name = "lvUserList";
|
||||||
|
lvUserList.Size = new Size(124, 273);
|
||||||
|
lvUserList.SmallImageList = ilStatusIcons;
|
||||||
|
lvUserList.TabIndex = 9;
|
||||||
|
lvUserList.UseCompatibleStateImageBehavior = false;
|
||||||
|
lvUserList.View = View.SmallIcon;
|
||||||
|
lvUserList.DoubleClick += lvUserList_DoubleClick;
|
||||||
|
//
|
||||||
|
// fpnlMessages
|
||||||
|
//
|
||||||
|
fpnlMessages.AutoScroll = true;
|
||||||
|
fpnlMessages.BackColor = Color.White;
|
||||||
|
fpnlMessages.BorderStyle = BorderStyle.Fixed3D;
|
||||||
|
fpnlMessages.FlowDirection = FlowDirection.TopDown;
|
||||||
|
fpnlMessages.Location = new Point(142, 43);
|
||||||
|
fpnlMessages.Name = "fpnlMessages";
|
||||||
|
fpnlMessages.Size = new Size(540, 273);
|
||||||
|
fpnlMessages.TabIndex = 10;
|
||||||
|
fpnlMessages.WrapContents = false;
|
||||||
|
//
|
||||||
// ChatRoom
|
// ChatRoom
|
||||||
//
|
//
|
||||||
AutoScaleDimensions = new SizeF(7F, 15F);
|
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||||
AutoScaleMode = AutoScaleMode.Font;
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
BackColor = Color.DodgerBlue;
|
BackColor = Color.DodgerBlue;
|
||||||
ClientSize = new Size(617, 334);
|
ClientSize = new Size(694, 388);
|
||||||
|
Controls.Add(fpnlMessages);
|
||||||
Controls.Add(lvUserList);
|
Controls.Add(lvUserList);
|
||||||
Controls.Add(lblRoomName);
|
Controls.Add(lblRoomName);
|
||||||
Controls.Add(rtxtChat);
|
|
||||||
Controls.Add(btnSend);
|
Controls.Add(btnSend);
|
||||||
Controls.Add(rtxtChatbox);
|
Controls.Add(rtxtChatbox);
|
||||||
|
DoubleBuffered = true;
|
||||||
FormBorderStyle = FormBorderStyle.FixedSingle;
|
FormBorderStyle = FormBorderStyle.FixedSingle;
|
||||||
Icon = (Icon)resources.GetObject("$this.Icon");
|
Icon = (Icon)resources.GetObject("$this.Icon");
|
||||||
MaximizeBox = false;
|
MaximizeBox = false;
|
||||||
@ -131,9 +141,10 @@
|
|||||||
#endregion
|
#endregion
|
||||||
private RichTextBox rtxtChatbox;
|
private RichTextBox rtxtChatbox;
|
||||||
private Button btnSend;
|
private Button btnSend;
|
||||||
private RichTextBox rtxtChat;
|
|
||||||
private Label lblRoomName;
|
private Label lblRoomName;
|
||||||
private ListView lvUserList;
|
|
||||||
private ImageList ilStatusIcons;
|
private ImageList ilStatusIcons;
|
||||||
|
private ImageList ilProfileImages;
|
||||||
|
private ListView lvUserList;
|
||||||
|
private FlowLayoutPanel fpnlMessages;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,38 +1,63 @@
|
|||||||
using qtc_net_client_2.Services;
|
using qtc_net_client_2.ClientModel;
|
||||||
|
using qtc_net_client_2.Controls;
|
||||||
|
using qtc_net_client_2.Services;
|
||||||
|
using QtCNETAPI.Dtos.User;
|
||||||
using QtCNETAPI.Events;
|
using QtCNETAPI.Events;
|
||||||
|
using QtCNETAPI.Models;
|
||||||
using QtCNETAPI.Services.ApiService;
|
using QtCNETAPI.Services.ApiService;
|
||||||
using QtCNETAPI.Services.GatewayService;
|
using QtCNETAPI.Services.GatewayService;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace qtc_net_client_2.Forms
|
namespace qtc_net_client_2.Forms
|
||||||
{
|
{
|
||||||
public partial class ChatRoom : Form
|
public partial class ChatRoom : Form
|
||||||
{
|
{
|
||||||
IGatewayService _gatewayService;
|
private readonly IGatewayService _gatewayService;
|
||||||
IApiService _apiService;
|
private readonly IApiService _apiService;
|
||||||
AudioService AudioService = new();
|
private readonly AudioService AudioService = new();
|
||||||
|
|
||||||
public ChatRoom(IGatewayService gatewayService, IApiService apiService)
|
private readonly List<User> RoomUserList = new();
|
||||||
|
private Room? Room;
|
||||||
|
public ChatRoom(IGatewayService gatewayService, IApiService apiService, Room? room = null)
|
||||||
{
|
{
|
||||||
_gatewayService = gatewayService;
|
_gatewayService = gatewayService;
|
||||||
_apiService = apiService;
|
_apiService = apiService;
|
||||||
InitializeComponent();
|
Room = room;
|
||||||
}
|
|
||||||
|
|
||||||
private void frmChat_Load(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
// subscribe to server message event
|
// subscribe to server message event
|
||||||
_gatewayService.OnRoomMessageReceived += _gatewayService_OnServerMessageReceived;
|
_gatewayService.OnRoomMessageReceived += _gatewayService_OnServerMessageReceived;
|
||||||
_gatewayService.OnRoomUserListReceived += _gatewayService_OnRoomUserListReceived;
|
_gatewayService.OnRoomUserListReceived += _gatewayService_OnRoomUserListReceived;
|
||||||
_gatewayService.OnRoomDeleted += _gatewayService_OnRoomDeleted;
|
_gatewayService.OnRoomDeleted += _gatewayService_OnRoomDeleted;
|
||||||
_gatewayService.OnGuestUserJoin += _gatewayService_OnGuestUserJoin;
|
_gatewayService.OnGuestUserJoin += _gatewayService_OnGuestUserJoin;
|
||||||
|
|
||||||
if (_gatewayService.CurrentRoom != null) { Text = $"QtC.NET Client - Chat Room - {_gatewayService.CurrentRoom.Name}"; lblRoomName.Text = _gatewayService.CurrentRoom.Name; }
|
InitializeComponent();
|
||||||
else if (_gatewayService.InLobby) { Text = $"QtC.NET Client - Chat Room - Lobby"; lblRoomName.Text = "Lobby"; }
|
}
|
||||||
|
|
||||||
lvUserList.Clear();
|
private async void frmChat_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (Room == null)
|
||||||
|
{
|
||||||
|
// join lobby
|
||||||
|
await _gatewayService.JoinRoomAsync();
|
||||||
|
Room = new Room
|
||||||
|
{
|
||||||
|
Id = "LOBBY",
|
||||||
|
Name = "Lobby"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// join selected room
|
||||||
|
await _gatewayService.JoinRoomAsync(Room);
|
||||||
|
}
|
||||||
|
|
||||||
// always add current user to list i guess
|
// init ui
|
||||||
lvUserList.Items.Add(_apiService.CurrentUser.Username, _apiService.CurrentUser.Status);
|
|
||||||
|
Text = $"QtC.NET Client - Chat Room - {Room.Name}";
|
||||||
|
lblRoomName.Text = Room.Name;
|
||||||
|
|
||||||
|
RoomUserList.Clear();
|
||||||
|
lvUserList.Items.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void frmChat_FormClosing(object sender, FormClosingEventArgs e)
|
private async void frmChat_FormClosing(object sender, FormClosingEventArgs e)
|
||||||
@ -41,7 +66,7 @@ namespace qtc_net_client_2.Forms
|
|||||||
_gatewayService.OnRoomMessageReceived -= _gatewayService_OnServerMessageReceived;
|
_gatewayService.OnRoomMessageReceived -= _gatewayService_OnServerMessageReceived;
|
||||||
_gatewayService.OnRoomUserListReceived -= _gatewayService_OnRoomUserListReceived;
|
_gatewayService.OnRoomUserListReceived -= _gatewayService_OnRoomUserListReceived;
|
||||||
|
|
||||||
if (_gatewayService.CurrentRoom != null || _gatewayService.InLobby)
|
if (_gatewayService.CurrentRoom != null)
|
||||||
{
|
{
|
||||||
// leave any room user is in
|
// leave any room user is in
|
||||||
await _gatewayService.LeaveRoomAsync();
|
await _gatewayService.LeaveRoomAsync();
|
||||||
@ -57,7 +82,7 @@ namespace qtc_net_client_2.Forms
|
|||||||
|
|
||||||
// send it and clear text box
|
// send it and clear text box
|
||||||
await _gatewayService.PostMessageAsync(message);
|
await _gatewayService.PostMessageAsync(message);
|
||||||
rtxtChatbox.Clear();
|
rtxtChatbox.Text = string.Empty;
|
||||||
AudioService.PlaySoundEffect("sndSendClick");
|
AudioService.PlaySoundEffect("sndSendClick");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -101,11 +126,12 @@ namespace qtc_net_client_2.Forms
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void _gatewayService_OnServerMessageReceived(object? sender, EventArgs e)
|
private async void _gatewayService_OnServerMessageReceived(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
var msgEventArgs = (ServerMessageEventArgs)e;
|
var msgEventArgs = (ServerMessageEventArgs)e;
|
||||||
|
var user = RoomUserList.FirstOrDefault(e => e.Username == msgEventArgs.Message.Split(':')[0]);
|
||||||
|
|
||||||
AddMessage(msgEventArgs.Message);
|
AddMessage(msgEventArgs.Message, user?.Id);
|
||||||
if (!msgEventArgs.Message.Contains(_apiService.CurrentUser.Username)) AudioService.PlaySoundEffect("sndMessage");
|
if (!msgEventArgs.Message.Contains(_apiService.CurrentUser.Username)) AudioService.PlaySoundEffect("sndMessage");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,12 +141,23 @@ namespace qtc_net_client_2.Forms
|
|||||||
|
|
||||||
if (IsHandleCreated && !IsDisposed)
|
if (IsHandleCreated && !IsDisposed)
|
||||||
{
|
{
|
||||||
Invoke(delegate ()
|
Invoke(async delegate ()
|
||||||
{
|
{
|
||||||
lvUserList.Clear();
|
RoomUserList.Clear();
|
||||||
|
lvUserList.Items.Clear();
|
||||||
foreach (var user in args.UserList)
|
foreach (var user in args.UserList)
|
||||||
{
|
{
|
||||||
lvUserList.Items.Add(user.Username, user.Status);
|
lvUserList.Items.Add(user.Username, user.Status);
|
||||||
|
RoomUserList.Add(user);
|
||||||
|
|
||||||
|
// TODO - probably do this only when a message is received (requires response model change)
|
||||||
|
var pfpRes = await _apiService.GetUserProfilePic(user.Id);
|
||||||
|
if (pfpRes != null && pfpRes.Success && pfpRes.Data != null)
|
||||||
|
{
|
||||||
|
using var ms = new MemoryStream(pfpRes.Data);
|
||||||
|
using var bmp = new Bitmap(ms);
|
||||||
|
ilProfileImages.Images.Add(user.Id, bmp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -128,7 +165,7 @@ namespace qtc_net_client_2.Forms
|
|||||||
private void _gatewayService_OnGuestUserJoin(object? sender, EventArgs e)
|
private void _gatewayService_OnGuestUserJoin(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
var args = (GuestUserJoinEventArgs)e;
|
var args = (GuestUserJoinEventArgs)e;
|
||||||
AddMessage($"[SERVER] Guest User {args.Username} Has Joined {_gatewayService.CurrentRoom?.Name}");
|
AddMessage($"Server: Guest User {args.Username} Has Joined {_gatewayService.CurrentRoom?.Name}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void _gatewayService_OnRoomDeleted(object? sender, EventArgs e)
|
private void _gatewayService_OnRoomDeleted(object? sender, EventArgs e)
|
||||||
@ -137,8 +174,9 @@ namespace qtc_net_client_2.Forms
|
|||||||
{
|
{
|
||||||
Invoke(delegate ()
|
Invoke(delegate ()
|
||||||
{
|
{
|
||||||
AddMessage($"[SERVER] This Room Was Deleted By An Admin.");
|
AddMessage($"Server: This Room Was Deleted By An Admin.");
|
||||||
lvUserList.Clear();
|
lvUserList.Items.Clear();
|
||||||
|
RoomUserList.Clear();
|
||||||
|
|
||||||
lvUserList.Enabled = false;
|
lvUserList.Enabled = false;
|
||||||
rtxtChatbox.Enabled = false;
|
rtxtChatbox.Enabled = false;
|
||||||
@ -148,13 +186,28 @@ namespace qtc_net_client_2.Forms
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void AddMessage(string message)
|
private void AddMessage(string message, string? userId = null)
|
||||||
{
|
{
|
||||||
if (IsHandleCreated && !IsDisposed)
|
if (IsHandleCreated && !IsDisposed)
|
||||||
{
|
{
|
||||||
Invoke(delegate ()
|
Invoke((Delegate)delegate ()
|
||||||
{
|
{
|
||||||
rtxtChat.AppendText(message + Environment.NewLine);
|
var ctrl = new ChatMessageControl()
|
||||||
|
{
|
||||||
|
Username = message.Split(':')[0],
|
||||||
|
Message = message.Split(':')[1].Trim(),
|
||||||
|
Width = fpnlMessages.ClientSize.Width - SystemInformation.VerticalScrollBarWidth
|
||||||
|
};
|
||||||
|
|
||||||
|
if(ilProfileImages.Images.ContainsKey(userId))
|
||||||
|
ctrl.Avatar = ilProfileImages.Images[userId];
|
||||||
|
else ctrl.Avatar = null;
|
||||||
|
|
||||||
|
ctrl.Height = ctrl.CalculateHeight(ctrl.Width);
|
||||||
|
|
||||||
|
fpnlMessages.Controls.Add(ctrl);
|
||||||
|
fpnlMessages.VerticalScroll.Value = fpnlMessages.VerticalScroll.Maximum;
|
||||||
|
fpnlMessages.PerformLayout();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -124,93 +124,218 @@
|
|||||||
<value>
|
<value>
|
||||||
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
|
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
|
||||||
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
|
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
|
||||||
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA+hMAAAJNU0Z0AUkBTAIBAQQB
|
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAchMAAAJNU0Z0AUkBTAIBAQQB
|
||||||
AAHAAQABwAEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASD/
|
AAEYAQIBGAECARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASD/
|
||||||
AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AC4AAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B
|
AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AC4AAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B
|
||||||
0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYB
|
0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYB
|
||||||
BwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekD
|
BwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekD
|
||||||
YAHoA10B0QNQAZ8DMQFNAwUBBhQAAyABLQNUAasDWwHkA1UB9QMkAfsDPAH+AzwB/gMkAfsDUwH0A2IB
|
YAHoA10B0QNQAZ8DMQFNAwUBBhQAAyABLQNUAasDWwHkA1oB9QMkAfsDZwH+A2cB/gMkAfsDUwH0A2IB
|
||||||
4QNRAaEDHgEqEAADIAEtA1QBqwNbAeQBSwFaAUsB9QEhAVgBIQH7ARgBWAEYAf4BGAFYARgB/gEhAVgB
|
4QNRAaEDHgEqEAADIAEtA1QBqwNbAeQDWgH1ASEBXgEhAfsBQwGAAUMB/gFDAYABQwH+ASEBXgEhAfsD
|
||||||
IQH7A1MB9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkAUsCWgH1ASECWAH7ARgCWAH+ARgCWAH+ASEC
|
UwH0A2IB4QNRAaEDHgEqEAADIAEtA1QBqwNbAeQDWgH1ASECXgH7AUMCgAH+AUMCgAH+ASECXgH7A1MB
|
||||||
WAH7A1MB9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkAksBWgH1AiEBWAH7AhgBWAH+AhgBWAH+AiEB
|
9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkA1oB9QIhAV4B+wJDAYAB/gJDAYAB/gIhAV4B+wNTAfQD
|
||||||
WAH7A1MB9ANiAeEDUQGhAx4BKgwAAxsBJQNYAb0DWgHyA0AB/gMwAf8DOQH/AzwB/wM2Af8DKgH/AyQB
|
YgHhA1EBoQMeASoMAAMbASUDWAG9A1oB8gNrAf4DMAH/AzkB/wM8Af8DNgH/AyoB/wMkAf8DQAH9A14B
|
||||||
/wNAAf0DXgHwA1YBsgMaASMIAAMbASUDWAG9A1oB8gEYAWABGAH+AQABVwEAAf8BAAFnAQAB/wEAAWwB
|
8ANWAbIDGgEjCAADGwElA1gBvQNaAfIBQwGAAUMB/gEAAVcBAAH/AQABZwEAAf8BAAFsAQAB/wEAAWEB
|
||||||
AAH/AQABYQEAAf8BAAFMAQAB/wEAAUABAAH/ATABQAEwAf0BWgFeAVoB8ANWAbIBGQEaARkBIwgAAxsB
|
AAH/AQABTAEAAf8BAAFAAQAB/wNAAf0DXgHwA1YBsgEZARoBGQEjCAADGwElA1gBvQNaAfIBQwKAAf4B
|
||||||
JQNYAb0DWgHyARgCYAH+AQACVwH/AQACZwH/AQACbAH/AQACYQH/AQACTAH/AQACQAH/ATACQAH9AVoC
|
AAJXAf8BAAJnAf8BAAJsAf8BAAJhAf8BAAJMAf8BAAJAAf8DQAH9A14B8ANWAbIBGQIaASMIAAMbASUD
|
||||||
XgHwA1YBsgEZAhoBIwgAAxsBJQNYAb0DWgHyAhgBYAH+AgABVwH/AgABZwH/AgABbAH/AgABYQH/AgAB
|
WAG9A1oB8gJDAYAB/gIAAVcB/wIAAWcB/wIAAWwB/wIAAWEB/wIAAUwB/wIAAUAB/wNAAf0DXgHwA1YB
|
||||||
TAH/AgABQAH/AjABQAH9AloBXgHwA1YBsgIZARoBIwQAAwMBBANSAaUDYAHzA0kB/wNVAf8DZQH/A3EB
|
sgIZARoBIwQAAwMBBANSAaUDYAHzA0kB/wNVAf8DZQH/A3EB/wN1Af8DcQH/A2QB/wNMAf8DMQH/A2cB
|
||||||
/wN1Af8DcQH/A2QB/wNMAf8DMQH/AzwB/gNiAe4DUAGaAwMBBAMDAQQBUgFTAVIBpQFWAW8BVgHzAQAB
|
/gNiAe4DUAGaAwMBBAMDAQQBUgFTAVIBpQFgAW8BYAHzAQABggEAAf8BAAGZAQAB/wEAAbYBAAH/AQAB
|
||||||
ggEAAf8BAAGZAQAB/wEAAbYBAAH/AQABzAEAAf8BAAHTAQAB/wEAAcsBAAH/AQABswEAAf8BAAGIAQAB
|
zAEAAf8BAAHTAQAB/wEAAcsBAAH/AQABswEAAf8BAAGIAQAB/wEAAVcBAAH/AUMBgAFDAf4DYgHuA1AB
|
||||||
/wEAAVcBAAH/ARgBWAEYAf4BXwFiAV8B7gNQAZoDAwEEAwMBBAFSAlMBpQFWAm8B8wEAAoIB/wEAApkB
|
mgMDAQQDAwEEAVICUwGlAWACbwHzAQACggH/AQACmQH/AQACtgH/AQACzAH/AQAC0wH/AQACywH/AQAC
|
||||||
/wEAArYB/wEAAswB/wEAAtMB/wEAAssB/wEAArMB/wEAAogB/wEAAlcB/wEYAlgB/gFfAmIB7gNQAZoD
|
swH/AQACiAH/AQACVwH/AUMCgAH+A2IB7gNQAZoDAwEEAwMBBAJSAVMBpQJgAW8B8wIAAYIB/wIAAZkB
|
||||||
AwEEAwMBBAJSAVMBpQJWAW8B8wIAAYIB/wIAAZkB/wIAAbYB/wIAAcwB/wIAAdMB/wIAAcsB/wIAAbMB
|
/wIAAbYB/wIAAcwB/wIAAdMB/wIAAcsB/wIAAbMB/wIAAYgB/wIAAVcB/wJDAYAB/gNiAe4DUAGaAwMB
|
||||||
/wIAAYgB/wIAAVcB/wIYAVgB/gJfAWIB7gNQAZoDAwEEAy0BRANgAegDewH+A24B/wN7Af8DhQH/A4oB
|
BAMtAUQDYAHoA4AB/gNuAf8DewH/A4UB/wOKAf8DjAH/A4oB/wOFAf8DdgH/A1cB/wMyAf8DQAH9A14B
|
||||||
/wOMAf8DigH/A4UB/wN2Af8DVwH/AzIB/wNAAf0DXgHdAyoBPwMtAUQBYAFpAWAB6AEYAYQBGAH+AQAB
|
3QMqAT8DLQFEAWABaQFgAegBQwGAAUMB/gEAAcYBAAH/AQAB3AEAAf8BAAHuAQAB/wEAAfgBAAH/AQAB
|
||||||
xgEAAf8BAAHcAQAB/wEAAe4BAAH/AQAB+AEAAf8BAAH7AQAB/wEAAfkBAAH/AQAB7wEAAf8BAAHUAQAB
|
+wEAAf8BAAH5AQAB/wEAAe8BAAH/AQAB1AEAAf8BAAGcAQAB/wEAAVoBAAH/A0AB/QNeAd0DKgE/Ay0B
|
||||||
/wEAAZwBAAH/AQABWgEAAf8BMAFAATAB/QNeAd0DKgE/Ay0BRAFgAmkB6AEYAoQB/gEAAsYB/wEAAtwB
|
RAFgAmkB6AFDAoAB/gEAAsYB/wEAAtwB/wEAAu4B/wEAAvgB/wEAAvsB/wEAAvkB/wEAAu8B/wEAAtQB
|
||||||
/wEAAu4B/wEAAvgB/wEAAvsB/wEAAvkB/wEAAu8B/wEAAtQB/wEAApwB/wEAAloB/wEwAkAB/QNeAd0D
|
/wEAApwB/wEAAloB/wNAAf0DXgHdAyoBPwMtAUQCYAFpAegCQwGAAf4CAAHGAf8CAAHcAf8CAAHuAf8C
|
||||||
KgE/Ay0BRAJgAWkB6AIYAYQB/gIAAcYB/wIAAdwB/wIAAe4B/wIAAfgB/wIAAfsB/wIAAfkB/wIAAe8B
|
AAH4Af8CAAH7Af8CAAH5Af8CAAHvAf8CAAHUAf8CAAGcAf8CAAFaAf8DQAH9A14B3QMqAT8DTgGVA3cB
|
||||||
/wIAAdQB/wIAAZwB/wIAAVoB/wIwAUAB/QNeAd0DKgE/A04BlQN3AfgDfwH/A4UB/wOKAf8DjQH/A44B
|
+AN/Af8DhQH/A4oB/wONAf8DjgH/A44B/wOOAf8DjQH/A4kB/wN3Af8DTQH/AyUB/wNaAfIDSgGLA04B
|
||||||
/wOOAf8DjgH/A40B/wOJAf8DdwH/A00B/wMlAf8DWgHyA0oBiwNOAZUBQgGBAUIB+AEAAeUBAAH/AQAB
|
lQFcAXwBXAH4AQAB5QEAAf8BAAHvAQAB/wEAAfgBAAH/AQAB/QEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
|
||||||
7wEAAf8BAAH4AQAB/wEAAf0BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/gEAAf8BAAH2AQAB
|
/wEAAf8BAAH+AQAB/wEAAfYBAAH/AQAB1QEAAf8BAAGLAQAB/wEAAUEBAAH/A1oB8gNKAYsDTgGVAVwC
|
||||||
/wEAAdUBAAH/AQABiwEAAf8BAAFBAQAB/wNaAfIDSgGLA04BlQFCAoEB+AEAAuUB/wEAAu8B/wEAAvgB
|
fAH4AQAC5QH/AQAC7wH/AQAC+AH/AQAC/QH/AQAD/wEAA/8BAAP/AQAC/gH/AQAC9gH/AQAC1QH/AQAC
|
||||||
/wEAAv0B/wEAA/8BAAP/AQAD/wEAAv4B/wEAAvYB/wEAAtUB/wEAAosB/wEAAkEB/wNaAfIDSgGLA04B
|
iwH/AQACQQH/A1oB8gNKAYsDTgGVAlwBfAH4AgAB5QH/AgAB7wH/AgAB+AH/AgAB/QH/AgAC/wIAAv8C
|
||||||
lQJCAYEB+AIAAeUB/wIAAe8B/wIAAfgB/wIAAf0B/wIAAv8CAAL/AgAC/wIAAf4B/wIAAfYB/wIAAdUB
|
AAL/AgAB/gH/AgAB9gH/AgAB1QH/AgABiwH/AgABQQH/A1oB8gNKAYsDXwHTA34B/AOTAf8DjgH/A40B
|
||||||
/wIAAYsB/wIAAUEB/wNaAfIDSgGLA18B0wN+AfwDkwH/A44B/wONAf8DjgH/A44B/wOOAf8DjgH/A44B
|
/wOOAf8DjgH/A44B/wOOAf8DjgH/A40B/wOFAf8DZwH/AzQB/wNBAfkDWgHEAVsBXwFbAdMBKwF+ASsB
|
||||||
/wONAf8DhQH/A2cB/wM0Af8DQQH5A1oBxAFbAV8BWwHTASsBsAErAfwBDgH7AQ4B/wEDAf0BAwH/AQAB
|
/AEOAfsBDgH/AQMB/QEDAf8BAAH+AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
|
||||||
/gEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/QEAAf8BAAHvAQAB
|
/wEAAf8BAAH9AQAB/wEAAe8BAAH/AQABuQEAAf8BAAFdAQAB/wNBAfkDWgHEAVsCXwHTASsCfgH8AQ4C
|
||||||
/wEAAbkBAAH/AQABXQEAAf8DQQH5A1oBxAFbAl8B0wErArAB/AEOAvsB/wEDAv0B/wEAAv4B/wEAA/8B
|
+wH/AQMC/QH/AQAC/gH/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL9Af8BAALvAf8BAAK5Af8BAAJdAf8D
|
||||||
AAP/AQAD/wEAA/8BAAP/AQAC/QH/AQAC7wH/AQACuQH/AQACXQH/A0EB+QNaAcQCWwFfAdMCKwGwAfwC
|
QQH5A1oBxAJbAV8B0wIrAX4B/AIOAfsB/wIDAf0B/wIAAf4B/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAB
|
||||||
DgH7Af8CAwH9Af8CAAH+Af8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAf0B/wIAAe8B/wIAAbkB/wIAAV0B
|
/QH/AgAB7wH/AgABuQH/AgABXQH/A0EB+QNaAcQDbgH1A4AB/gOfAf8DkwH/A48B/wOOAf8DjgH/A44B
|
||||||
/wNBAfkDWgHEA24B9QOAAf4DnwH/A5MB/wOPAf8DjgH/A44B/wOOAf8DjgH/A44B/wOOAf8DiwH/A3cB
|
/wOOAf8DjgH/A44B/wOLAf8DdwH/A0gB/wNAAf0DYgHhAVoBbgFaAfUBZwGAAWcB/gEnAf8BJwH/AQsB
|
||||||
/wNIAf8DQAH9A2IB4QFTAXYBUwH1ATwBzwE8Af4BJwH/AScB/wELAf8BCwH/AQEB/wEBAf8BAAH/AQAB
|
/wELAf8BAQH/AQEB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
|
||||||
/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH5AQAB/wEAAdYBAAH/AQAB
|
/wEAAfkBAAH/AQAB1gEAAf8BAAGBAQAB/wNAAf0DYgHhAVoCbgH1AWcCgAH+AScD/wELA/8BAQP/AQAD
|
||||||
gQEAAf8BMAFAATAB/QNiAeEBUwJ2AfUBPALPAf4BJwP/AQsD/wEBA/8BAAP/AQAD/wEAA/8BAAP/AQAD
|
/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAC+QH/AQAC1gH/AQACgQH/A0AB/QNiAeECWgFuAfUCZwGAAf4C
|
||||||
/wEAA/8BAAL5Af8BAALWAf8BAAKBAf8BMAJAAf0DYgHhAlMBdgH1AjwBzwH+AicC/wILAv8CAQL/AgAC
|
JwL/AgsC/wIBAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAH5Af8CAAHWAf8CAAGBAf8DQAH9A2IB
|
||||||
/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAB+QH/AgAB1gH/AgABgQH/AjABQAH9A2IB4QNtAfYDgAH+A6sB
|
4QNjAfYDgAH+A6sB/wOZAf8DkAH/A44B/wOOAf8DjgH/A44B/wOOAf8DjgH/A40B/wN/Af8DVQH/A0AB
|
||||||
/wOZAf8DkAH/A44B/wOOAf8DjgH/A44B/wOOAf8DjgH/A40B/wN/Af8DVQH/A0AB/QNeAeIBSAF6AUgB
|
/QNeAeIBSAFjAUgB9gOAAf4BQgH/AUIB/wEZAf8BGQH/AQQB/wEEAf8BAAH/AQAB/wEAAf8BAAH/AQAB
|
||||||
9gFfAc8BXwH+AUIB/wFCAf8BGQH/ARkB/wEEAf8BBAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
|
/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH9AQAB/wEAAeQBAAH/AQABmAEAAf8DQAH9A14B
|
||||||
/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/QEAAf8BAAHkAQAB/wEAAZgBAAH/ATABQAEwAf0DXgHiAUgC
|
4gFIAmMB9gOAAf4BQgP/ARkD/wEEA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL9Af8BAALkAf8B
|
||||||
egH2AV8CzwH+AUID/wEZA/8BBAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAC/QH/AQAC5AH/AQAC
|
AAKYAf8DQAH9A14B4gJIAWMB9gOAAf4CQgL/AhkC/wIEAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8C
|
||||||
mAH/ATACQAH9A14B4gJIAXoB9gJfAc8B/gJCAv8CGQL/AgQC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC
|
AAH9Af8CAAHkAf8CAAGYAf8DQAH9A14B4gNhAdYDfgH8A7gB/wOjAf8DkwH/A44B/wOOAf8DjgH/A44B
|
||||||
/wIAAf0B/wIAAeQB/wIAAZgB/wIwAUAB/QNeAeIDYQHWA34B/AO4Af8DowH/A5MB/wOOAf8DjgH/A44B
|
/wOOAf8DjgH/A40B/wOCAf8DXAH/A00B+gNaAccBXAFhAVwB1gFkAX4BZAH8AV8B/wFfAf8BLwH/AS8B
|
||||||
/wOOAf8DjgH/A44B/wONAf8DggH/A1wB/wNNAfoDWgHHAVwBYQFcAdYBZAG0AWQB/AFfAf8BXwH/AS8B
|
/wEMAf8BDAH/AQEB/wEBAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
|
||||||
/wEvAf8BDAH/AQwB/wEBAf8BAQH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
|
/gEAAf8BAAHqAQAB/wEAAaUBAAH/A00B+gNaAccBXAJhAdYBZAJ+AfwBXwP/AS8D/wEMA/8BAQP/AQAD
|
||||||
/wEAAf4BAAH/AQAB6gEAAf8BAAGlAQAB/wEsAU0BLAH6A1oBxwFcAmEB1gFkArQB/AFfA/8BLwP/AQwD
|
/wEAA/8BAAP/AQAD/wEAA/8BAAL+Af8BAALqAf8BAAKlAf8DTQH6A1oBxwJcAWEB1gJkAX4B/AJfAv8C
|
||||||
/wEBA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAAv4B/wEAAuoB/wEAAqUB/wEsAk0B+gNaAccCXAFhAdYC
|
LwL/AgwC/wIBAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAf4B/wIAAeoB/wIAAaUB/wNNAfoDWgHHA1AB
|
||||||
ZAG0AfwCXwL/Ai8C/wIMAv8CAQL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAH+Af8CAAHqAf8CAAGlAf8C
|
mgNqAfkDxQH/A7IB/wOcAf8DkQH/A44B/wOOAf8DjgH/A44B/wOPAf8DjgH/A4MB/wNgAf8DWgHyA0wB
|
||||||
LAFNAfoDWgHHA1ABmgOIAfkDxQH/A7IB/wOcAf8DkQH/A44B/wOOAf8DjgH/A44B/wOPAf8DjgH/A4MB
|
kANQAZoDagH5AXwB/wF8Af8BUQH/AVEB/wEfAf8BHwH/AQcB/wEHAf8BAQH/AQEB/wEAAf8BAAH/AQAB
|
||||||
/wNgAf8DWgHyA0wBkANQAZoBagGRAWoB+QF8Af8BfAH/AVEB/wFRAf8BHwH/AR8B/wEHAf8BBwH/AQEB
|
/wEAAf8BAAH/AQAB/wECAf8BAgH/AQIB/gECAf8BAAHrAQAB/wEAAa0BAAH/AVoBawFaAfIDTAGQA1AB
|
||||||
/wEBAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAgH/AQIB/wECAf4BAgH/AQAB6wEAAf8BAAGtAQAB
|
mgNqAfkBfAP/AVED/wEfA/8BBwP/AQED/wEAA/8BAAP/AQAD/wECA/8BAgL+Af8BAALrAf8BAAKtAf8B
|
||||||
/wFaAWsBWgHyA0wBkANQAZoBagKRAfkBfAP/AVED/wEfA/8BBwP/AQED/wEAA/8BAAP/AQAD/wECA/8B
|
WgJrAfIDTAGQA1ABmgNqAfkCfAL/AlEC/wIfAv8CBwL/AgEC/wIAAv8CAAL/AgAC/wICAv8CAgH+Af8C
|
||||||
AgL+Af8BAALrAf8BAAKtAf8BWgJrAfIDTAGQA1ABmgJqAZEB+QJ8Av8CUQL/Ah8C/wIHAv8CAQL/AgAC
|
AAHrAf8CAAGtAf8CWgFrAfIDTAGQAy8BSQNsAesDgAH+A8YB/wOuAf8DnAH/A5MB/wOQAf8DjwH/A5AB
|
||||||
/wIAAv8CAAL/AgIC/wICAf4B/wIAAesB/wIAAa0B/wJaAWsB8gNMAZADLwFJA2wB6wOgAf4DxgH/A64B
|
/wOTAf8DkwH/A4UB/wNAAf0DYAHgAy0BRQMvAUkDbAHrA4AB/gF/Af8BfwH/AUkB/wFJAf8BHwH/AR8B
|
||||||
/wOcAf8DkwH/A5AB/wOPAf8DkAH/A5MB/wOTAf8DhQH/A04B/QNgAeADLQFFAy8BSQNsAesBgAHPAYAB
|
/wEMAf8BDAH/AQUB/wEFAf8BAwH/AQMB/wEFAf8BBQH/AQoB/wEKAf8BCgH+AQoB/wEBAe0BAQH/AUAB
|
||||||
/gF/Af8BfwH/AUkB/wFJAf8BHwH/AR8B/wEMAf8BDAH/AQUB/wEFAf8BAwH/AQMB/wEFAf8BBQH/AQoB
|
tgFAAf0BYAFmAWAB4AMtAUUDLwFJA2wB6wOAAf4BfwP/AUkD/wEfA/8BDAP/AQUD/wEDA/8BBQP/AQoD
|
||||||
/wEKAf8BCgH+AQoB/wEBAe0BAQH/ATABtgEwAf0BYAFmAWAB4AMtAUUDLwFJA2wB6wGAAs8B/gF/A/8B
|
/wEKAv4B/wEBAu0B/wFAArYB/QFgAmYB4AMtAUUDLwFJA2wB6wOAAf4CfwL/AkkC/wIfAv8CDAL/AgUC
|
||||||
SQP/AR8D/wEMA/8BBQP/AQMD/wEFA/8BCgP/AQoC/gH/AQEC7QH/ATACtgH9AWACZgHgAy0BRQMvAUkD
|
/wIDAv8CBQL/AgoC/wIKAf4B/wIBAe0B/wJAAbYB/QJgAWYB4AMtAUUDAwEEA1YBrgNuAfUD2QH/A8sB
|
||||||
bAHrAoABzwH+An8C/wJJAv8CHwL/AgwC/wIFAv8CAwL/AgUC/wIKAv8CCgH+Af8CAQHtAf8CMAG2Af0C
|
/wO3Af8DpwH/A50B/wOaAf8DnAH/A58B/wObAf8DiQH/A2gB8ANSAaMDAwEEAwMBBANWAa4DbgH1AagB
|
||||||
YAFmAeADLQFFAwMBBANWAa4DcAH1A9kB/wPLAf8DtwH/A6cB/wOdAf8DmgH/A5wB/wOfAf8DmwH/A4kB
|
/wGoAf8BiQH/AYkB/wFcAf8BXAH/ATcB/wE3Af8BIgH/ASIB/wEbAf8BGwH/AR8B/wEfAf8BJgH/ASYB
|
||||||
/wNoAfADUgGjAwMBBAMDAQQDVgGuAW4BdgFuAfUBqAH/AagB/wGJAf8BiQH/AVwB/wFcAf8BNwH/ATcB
|
/wEdAf8BHQH/AQUB8wEFAf8BXgFoAV4B8ANSAaMDAwEEAwMBBANWAa4DbgH1AagD/wGJA/8BXAP/ATcD
|
||||||
/wEiAf8BIgH/ARsB/wEbAf8BHwH/AR8B/wEmAf8BJgH/AR0B/wEdAf8BBQHzAQUB/wFaAWgBWgHwA1IB
|
/wEiA/8BGwP/AR8D/wEmA/8BHQP/AQUC8wH/AV4CaAHwA1IBowMDAQQDAwEEA1YBrgNuAfUCqAL/AokC
|
||||||
owMDAQQDAwEEA1YBrgFuAnYB9QGoA/8BiQP/AVwD/wE3A/8BIgP/ARsD/wEfA/8BJgP/AR0D/wEFAvMB
|
/wJcAv8CNwL/AiIC/wIbAv8CHwL/AiYC/wIdAv8CBQHzAf8CXgFoAfADUgGjAwMBBAQAAxwBJwNdAccD
|
||||||
/wFaAmgB8ANSAaMDAwEEAwMBBANWAa4CbgF2AfUCqAL/AokC/wJcAv8CNwL/AiIC/wIbAv8CHwL/AiYC
|
YwH2A4AB/gPXAf8DzAH/A8IB/wO7Af8DtwH/A7EB/wOAAf4DaAH0A1kBvAMbASYIAAMcAScDXQHHA2MB
|
||||||
/wIdAv8CBQHzAf8CWgFoAfADUgGjAwMBBAQAAxwBJwNdAccDdwH2A68B/gPXAf8DzAH/A8IB/wO7Af8D
|
9gOAAf4BpQH/AaUB/wGLAf8BiwH/AXQB/wF0Af8BZgH/AWYB/wFcAf8BXAH/AU4B/wFOAf8BcwGAAXMB
|
||||||
twH/A7EB/wOAAf4DaAH0A1kBvAMbASYIAAMcAScDXQHHAXIBegFyAfYBhwHPAYcB/gGlAf8BpQH/AYsB
|
/gFTAWgBUwH0AVcBWQFXAbwDGwEmCAADHAEnA10BxwNjAfYDgAH+AaUD/wGLA/8BdAP/AWYD/wFcA/8B
|
||||||
/wGLAf8BdAH/AXQB/wFmAf8BZgH/AVwB/wFcAf8BTgH/AU4B/wFIAc8BSAH+AVMBdwFTAfQBVwFZAVcB
|
TgP/AXMCgAH+AVMCaAH0AVcCWQG8AxsBJggAAxwBJwNdAccDYwH2A4AB/gKlAv8CiwL/AnQC/wJmAv8C
|
||||||
vAMbASYIAAMcAScDXQHHAXICegH2AYcCzwH+AaUD/wGLA/8BdAP/AWYD/wFcA/8BTgP/AUgCzwH+AVMC
|
XAL/Ak4C/wJzAYAB/gJTAWgB9AJXAVkBvAMbASYMAAMhATADWQG2A2IB7gN9AfoDvgH9A9QB/wPMAf8D
|
||||||
dwH0AVcCWQG8AxsBJggAAxwBJwNdAccCcgF6AfYChwHPAf4CpQL/AosC/wJ0Av8CZgL/AlwC/wJOAv8C
|
vgH9A2oB+QNsAesDVQGsAx8BLBAAAyEBMANZAbYDYgHuA30B+gGuAb4BrgH9AZ8B/wGfAf8BjAH/AYwB
|
||||||
SAHPAf4CUwF3AfQCVwFZAbwDGwEmDAADIQEwA1kBtgNnAe4DkwH6A74B/QPUAf8DzAH/A74B/QOEAfkD
|
/wFAAb4BQAH9AWgBagFoAfkBYQFsAWEB6wNVAawDHwEsEAADIQEwA1kBtgNiAe4DfQH6Aa4CvgH9AZ8D
|
||||||
bAHrA1UBrAMfASwQAAMhATADWQG2AWUBaQFlAe4BfQGfAX0B+gGuAb4BrgH9AZ8B/wGfAf8BjAH/AYwB
|
/wGMA/8BQAK+Af0BaAJqAfkBYQJsAesDVQGsAx8BLBAAAyEBMANZAbYDYgHuA30B+gKuAb4B/QKfAv8C
|
||||||
/wFeAb4BXgH9AWgBkQFoAfkBYQFsAWEB6wNVAawDHwEsEAADIQEwA1kBtgFlAmkB7gF9Ap8B+gGuAr4B
|
jAL/AkABvgH9AmgBagH5AmEBbAHrA1UBrAMfASwUAAMGAQcDNgFYA1UBrANmAeUDfgH8A18B+wNlAeID
|
||||||
/QGfA/8BjAP/AV4CvgH9AWgCkQH5AWECbAHrA1UBrAMfASwQAAMhATADWQG2AmUBaQHuAn0BnwH6Aq4B
|
UwGnAzMBUQMGAQcYAAMGAQcDNgFYA1UBrANmAeUDfgH8AV8BZwFfAfsDZQHiA1MBpwMzAVEDBgEHGAAD
|
||||||
vgH9Ap8C/wKMAv8CXgG+Af0CaAGRAfkCYQFsAesDVQGsAx8BLBQAAwYBBwM2AVgDVQGsA2YB5QOgAfwD
|
BgEHAzYBWANVAawDZgHlA34B/AFfAmcB+wNlAeIDUwGnAzMBUQMGAQcYAAMGAQcDNgFYA1UBrANmAeUD
|
||||||
kwH7A2UB4gNTAacDMwFRAwYBBxgAAwYBBwM2AVgDVQGsA2YB5QF+AbQBfgH8AW0BngFtAfsDZQHiA1MB
|
fgH8Al8BZwH7A2UB4gNTAacDMwFRAwYBBwwAAUIBTQE+BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgAB
|
||||||
pwMzAVEDBgEHGAADBgEHAzYBWANVAawDZgHlAX4CtAH8AW0CngH7A2UB4gNTAacDMwFRAwYBBxgAAwYB
|
ARYAA/+BAAHgAQcB4AEHAeABBwHgAQcBwAEDAcABAwHAAQMBwAEDAYABAQGAAQEBgAEBAYABAVAAAYAB
|
||||||
BwM2AVgDVQGsA2YB5QJ+AbQB/AJtAZ4B+wNlAeIDUwGnAzMBUQMGAQcMAAFCAU0BPgcAAT4DAAEoAwAB
|
AQGAAQEBgAEBAYABAQHAAQMBwAEDAcABAwHAAQMB4AEHAeABBwHgAQcB4AEHCw==
|
||||||
QAMAASADAAEBAQABAQYAAQEWAAP/gQAB4AEHAeABBwHgAQcB4AEHAcABAwHAAQMBwAEDAcABAwGAAQEB
|
</value>
|
||||||
gAEBAYABAQGAAQFQAAGAAQEBgAEBAYABAQGAAQEBwAEDAcABAwHAAQMBwAEDAeABBwHgAQcB4AEHAeAB
|
</data>
|
||||||
Bws=
|
<metadata name="ilProfileImages.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>132, 12</value>
|
||||||
|
</metadata>
|
||||||
|
<data name="ilProfileImages.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>
|
||||||
|
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
|
||||||
|
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
|
||||||
|
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAlhsAAAJNU0Z0AUkBTAMBAQAB
|
||||||
|
QAEBAUABAQEgAQABIAEABP8BIQEACP8BQgFNATYHAAE2AwABKAMAAYADAAEgAwABAQEAASAGAAFAEgAC
|
||||||
|
RwFGAYACRwFGAYACRwFGAYABRwJGAYABRwJGAYACRwFGAYACRwFGAYABRwJGAYABRwJGAYABRwJGAYAD
|
||||||
|
RgGAAkcBRgGAAkcBRgGAAkcBRgGAAkcBRgGAAkcBRgGAAkcBRgGAAkcBRgGAAkcBRgGAAkcBRgGAAkcB
|
||||||
|
RgGAAkcBRgGAA0YBgAFHAkYBgAFHAkYBgAFHAkYBgAFHAkYBgAFHAkYBgAJHAUYBgAJHAUYBgAJHAUYB
|
||||||
|
gAMqAUD/AIEAAf8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRgEBAv8BRwEBAv8BSAEAAf8B7QFGAQEB
|
||||||
|
/wHbAUMBAgH/AZEBNgEBAf8BRgEpAQAB/wF1AVABAQH/AaMBdwECAf8BzAGQAQkB/wH0AagBEAH/AfkB
|
||||||
|
rQEIAf8B/gGxAQAB/wH3Aa4BBgH/Ae8BqwEMAf8BygGOAQcB/wGlAXABAgH/AXABTgEBAf8BOwEsAQAB
|
||||||
|
/wFZAScBAAH/AXcBIgEAAf8BuwE0AQIB/wH+AUYBBAL/AUcBAwL/AUcBAQL/AUcBAQL/AUcBAQH/AkcB
|
||||||
|
RgGA/wCBAAH/AUcBAQL/AUcBAQL/AUcBAQL/AUYBAgL/AUYBAwH/AfsBRwEBAf8B9wFIAQAB/wHaAVAB
|
||||||
|
AQH/Ab0BWAEBAf8BrgFjAQEB/wGgAW8BAAH/AbgBggEBAf8B0QGWAQEB/wHkAaMBBQH/AfgBrwEJAf8B
|
||||||
|
+wGxAQUC/wGzAQEB/wH7AbEBBAH/AfcBsAEIAf8B5AGiAQQB/wHRAZQBAQH/AbcBgwECAf8BnQFyAQIB
|
||||||
|
/wGDAVEBAQH/AWgBMQEAAf8BlAEzAQEB/wHBATYBAwH/AeABPwECAv8BSAEBAv8BRwEBAv8BRwEBAf8C
|
||||||
|
RwFGAYD/AIEAAf8BRwEBAv8BRwEBAv8BRwEBAv8BRgEDAv8BRQEEAf8B9wFGAQIB/wHvAUcBAAH/AccB
|
||||||
|
WgEAAf8BnwFtAQAB/wHMAZEBAAH/AfkBtAEAAf8B/AG1AQAC/wG1AQAB/wH9AbYBAQH/AfsBtgEBAf8B
|
||||||
|
/QG1AQEC/wG0AQEC/wG0AQIC/wG0AQMB/wH+AbYBAgH/Af0BtwEAAf8B/gG3AQIC/wG3AQQB/wGsAXwB
|
||||||
|
AgH/AVkBQAEAAf8BbgEzAQEB/wGDASUBAQH/AcEBNwEBAf8B/gFIAQAC/wFIAQEC/wFHAQEB/wJHAUYB
|
||||||
|
gP8AgQAB/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQIC/wFHAQIB/wHyAUwBAQH/AeYBUgEAAf8B2gFxAQAB
|
||||||
|
/wHPAZABAAH/AeYBogEAAf8B/AG1AQEB/wH+AbUBAQL/AbUBAQH/Af4BtQEBAf8B/QG2AQEB/wH+AbUB
|
||||||
|
AQL/AbUBAQL/AbUBAgL/AbUBAgL/AbUBAQH/Af4BtgEBAf8B/QG0AQEB/wH7AbIBAgH/AdQBmAEDAf8B
|
||||||
|
rAF/AQMB/wGHAVUBAgH/AWMBKwEBAf8BrwE5AQEB/wH8AUgBAQH/Af4BRwEBAv8BRwEBAf8CRwFGAYD/
|
||||||
|
AIEAAf8BRwEBAv8BRwEBAv8BRwEBAv8BSAEBAv8BSQEAAf8B7gFTAQAB/wHcAVwBAAH/Ae4BiAEAAv8B
|
||||||
|
swEAAv8BtAEBAv8BtQEBAv8BtQEBAv8BtQEBAv8BtQEBAv8BtQEBAv8BtQEBAv8BtQEBAv8BtQEBAv8B
|
||||||
|
tQEBAv8BtQEBAv8BtQEBAf8B+wGxAQEB/wH3AawBAAH/AfsBtQEDAv8BvgEGAf8BoQF3AQQB/wFCATAB
|
||||||
|
AQH/AZ4BPAECAf8B+gFHAQIB/wH9AUcBAgL/AUcBAQH/AkcBRgGA/wCBAAH/AUcBAQL/AUcBAQL/AUcB
|
||||||
|
AQL/AUgBAQL/AUkBAAH/AfYBZAEQAf8B7gF/ASEB/wH2AZoBEAL/AbUBAAL/AbUBAQL/AbUBAQL/AbUB
|
||||||
|
AgL/AbUBAgL/AbUBAgL/AbUBAQL/AbUBAQL/AbUBAQL/AbUBAQL/AbUBAQL/AbUBAQL/AbUBAQH/Af0B
|
||||||
|
swEBAf8B+wGxAQEB/wH9AbUBAwL/AboBBQH/AaQBdwEDAf8BSQE0AQEB/wGjAT0BAgH/Af0BRgEDAf8B
|
||||||
|
/gFHAQIC/wFHAQEB/wJHAUYBgP8AgQAB/wFHAQEC/wFHAQEC/wFHAQEC/wFIAQEB/wH+AUgBAAL/AXUB
|
||||||
|
IQL/AaIBQQL/AawBIQL/AbYBAAL/AbYBAQL/AbUBAQL/AbUBAgL/AbQBAwL/AbUBAgL/AbUBAQL/AbUB
|
||||||
|
AQL/AbUBAQL/AbUBAQL/AbUBAQL/AbUBAQL/AbUBAQL/AbUBAQL/AbUBAQL/AbYBAwL/AbYBBAH/AagB
|
||||||
|
dwECAf8BUAE3AQAB/wGoAT4BAgL/AUUBBAL/AUYBAwL/AUcBAQH/AkcBRgGA/wCBAAH/AUcBAQL/AUcB
|
||||||
|
AQL/AUcBAQL/AUcBAQL/AUgBAQL/AV8BEwL/AXcBJgL/AZwBKAL/AcIBKgL/AbwBFQL/AbYBAQL/AbUB
|
||||||
|
AQL/AbUBAgL/AbUBAgL/AbUBAQL/AbUBAQL/AbUBAQL/AbUBAQL/AbUBAQL/AbUBAgL/AbUBAgL/AbUB
|
||||||
|
AQL/AbYBAQH/Af4BtgEBAf8B/QG2AQIB/wG9AXkBAQH/AX4BPQEAAf8BvgFCAQEC/wFHAQIC/wFHAQIC
|
||||||
|
/wFHAQEB/wJHAUYBgP8AgQAB/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFJAQYC/wFLAQoC
|
||||||
|
/wGMAS8C/wHNAVMC/wHCASoC/wG2AQAC/wG2AQEC/wG1AQEC/wG1AQEC/wG1AQEC/wG1AQEC/wG1AQEC
|
||||||
|
/wG1AQEC/wG1AQEC/wG1AQIC/wG0AQMC/wG1AQIC/wG2AQAB/wH9AbYBAAH/AfoBtQEAAf8B0wF8AQAB
|
||||||
|
/wGsAUMBAAH/AdUBRgEAAf8B/gFIAQAC/wFIAQEC/wFHAQEB/wJHAUYBgP8AgQAB/wFHAQEC/wFHAQEC
|
||||||
|
/wFHAQEC/wFHAQEC/wFGAQIB/wH+AUgBAwH/Af0BSQEFAf8B7wFrARwB/wHhAY0BNAH/AfABrQE7Av8B
|
||||||
|
zgFDAv8BwQEjAv8BtAEEAv8BtQECAv8BtgEBAv8BtQEBAv8BtQEBAv8BtQEBAv8BtgEBAf8B/gG0AQEB
|
||||||
|
/wH+AbMBAgH/Af4BtwEJAv8BuwEQAf8B/gG0AQ0B/wH9Aa0BCgH/AekBeAEFAf8B1gFDAQAB/wHqAUYB
|
||||||
|
AAL/AUgBAAL/AUgBAQL/AUcBAQH/AkcBRgGA/wCBAAH/AUcBAQL/AUcBAQL/AUcBAQL/AUYBAgL/AUUB
|
||||||
|
AgH/Af0BRgEBAf8B+gFHAQAB/wHfAUoBCgH/AcMBTAEUAf8B4QGZAU0C/wHlAYYC/wHMAUYC/wGzAQYC
|
||||||
|
/wG1AQMC/wG2AQAC/wG2AQEC/wG1AQEC/wG2AQEC/wG2AQAB/wH+AbQBAAH/AfwBsgEAAf8B/gG5ARAC
|
||||||
|
/wG/ASAC/wGyARoC/wGkARQC/wF0AQoC/wFDAQAC/wFGAQAC/wFIAQAC/wFIAQEC/wFHAQEB/wJHAUYB
|
||||||
|
gP8AgQAB/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFGAQIB/wH+AUcBAQH/Af0BRwEBAf8B7wFHAQYB
|
||||||
|
/wHhAUgBCwH/AfABcAEnAv8BmAFDAf8B/gGgATwB/wH9AagBNAH/Af4BugFCAv8BzAFQAv8BzAFOAv8B
|
||||||
|
ywFNAv8ByAFHAv8BxgFCAf8B/gHBAT8B/wH+Ab0BPAH/Af4BoQEnAv8BhgESAv8BfQEOAv8BdQELAv8B
|
||||||
|
XQEGAv8BRQEBAv8BRgEBAv8BSAEBAv8BRwEBAv8BRwEBAf8CRwFGAYD/AIEAAf8BRwEBAv8BRwEBAv8B
|
||||||
|
RwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRQECAv8BQwECAv8BRwEBAv8BSwEAAf8B/QF0ATEB
|
||||||
|
/wH7AZ0BYgH/Af0BwAGBAv8B4gGgAv8B4gGcAv8B4QGYAv8B2wGOAv8B1QGEAv8BzgF+Av8BxwF3Av8B
|
||||||
|
igE9Av8BTAEDAv8BSQEDAv8BRgECAv8BRwECAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAf8C
|
||||||
|
RwFGAYD/AIEAAf8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAf8B/gFGAQIB
|
||||||
|
/wH+AUUBAwH/Af4BSAECAv8BSwEAAf8B+QFdARkB/wHyAW8BMwH/Ac0BewFBAf8BpwGHAVAB/wGkAYgB
|
||||||
|
TgH/AaABigFMAf8BowGGAUoB/wGnAYMBSQH/AbcBfgFCAf8ByAF5ATwB/wHjAWEBHwL/AUoBAgL/AUgB
|
||||||
|
AgL/AUcBAgL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQH/AkcBRgGA/wCBAAH/AUcB
|
||||||
|
AQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQH/Af4BRwEDAf8B/AFGAQQB/wH+AUgB
|
||||||
|
AgL/AUoBAAH/AfQBRQECAf8B6QFAAQMB/wGcATYBAgH/AU8BLAEAAf8BSAEvAQAB/wFBATIBAAH/AUgB
|
||||||
|
MQEHAf8BTgEwAQ0B/wFvAS0BBwH/AZABKgEAAf8ByAE5AQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC
|
||||||
|
/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEB/wJHAUYBgP8AgQAB/wFHAQEC/wFHAQEC/wFHAQEC
|
||||||
|
/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEB/wH+AUcBAgH/Af4BRwECAf8B/gFGAQEC/wFFAQEB/wHhAU0B
|
||||||
|
AQH/AcMBVAECAf8BtQFhAQEB/wGnAW8BAAH/AaMBcAEAAf8BnwFxAQAB/wGjAXIBAwH/AacBcgEHAf8B
|
||||||
|
hwFPAQMB/wFoASwBAAH/AaABNQEAAf8B2AE/AQEB/wHrAUMBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcB
|
||||||
|
AQL/AUcBAQL/AUcBAQL/AUcBAQH/AkcBRgGA/wCBAAH/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcB
|
||||||
|
AQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAAL/AUQBAQL/AUABAQH/Ac4BVAEBAf8BnQFoAQAB/wHOAY0B
|
||||||
|
AAL/AbEBAAH/Af4BsQEAAf8B/AGwAQAB/wH+AbIBAAL/AbQBAAH/AaABcQEAAf8BQAEtAQAB/wF4ATIB
|
||||||
|
AAH/AbABNwEAAf8B2AE/AQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEB
|
||||||
|
/wJHAUYBgP8AgQAB/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQIC
|
||||||
|
/wFGAQIB/wH2AUUBAQH/Ae0BRQEBAf8B3gFqAQEB/wHOAZABAgH/AecBogEBAv8BtAEAAf8B/gGzAQEB
|
||||||
|
/wH+AbIBAgH/Af4BtAEDAv8BtQEDAf8BzgGRAQMB/wGdAWwBAgH/AZMBSwEBAf8BiQErAQAB/wHEATkB
|
||||||
|
AQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQH/AkcBRgGA/wCBAAH/AUcB
|
||||||
|
AQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUYBAwL/AUUBBAH/Ae0BRwECAf8B
|
||||||
|
2wFJAQAB/wHtAYABAgL/AbcBBAL/AbcBAgL/AbcBAAL/AbYBAgL/AbQBBAL/AbUBBQL/AbYBBgH/Af0B
|
||||||
|
sQEFAf8B+gGrAQQB/wGuAWUBAgH/AWIBHgEAAf8BsQEzAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC
|
||||||
|
/wFHAQEC/wFHAQEC/wFHAQEB/wJHAUYBgP8AgQAB/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC
|
||||||
|
/wFHAQEC/wFHAQEC/wFHAQIC/wFHAQIB/wHqAUkBAQH/AdYBSwEAAf8B6wGAAQMC/wG1AQYC/wG2AQMC
|
||||||
|
/wG2AQEC/wG1AQIC/wG1AQMC/wG1AQMC/wG2AQQB/wH+AbQBAwH/Af0BsgECAf8BrgFrAQEB/wFfASQB
|
||||||
|
AAH/Aa8BNQEBAv8BRwECAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAf8CRwFGAYD/
|
||||||
|
AIEAAf8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BSAEBAf8B/gFIAQAB
|
||||||
|
/wHoAUsBAAH/AdEBTQEAAf8B6AGAAQQC/wGzAQcC/wG0AQQC/wG1AQEC/wG1AQEC/wG1AQEC/wG1AQEC
|
||||||
|
/wG1AQEC/wG3AQEC/wG4AQAB/wGtAXEBAAH/AVsBKQEAAf8BrQE4AQEC/wFGAQIC/wFHAQIC/wFHAQEC
|
||||||
|
/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEB/wJHAUYBgP8AgQAB/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC
|
||||||
|
/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFIAQEB/wHzAUoBAAH/AecBTQEAAf8B8wGGAQ4C/wG/ARwC
|
||||||
|
/wG6AQ4B/wH+AbYBAQL/AbYBAQL/AbUBAQL/AbUBAQL/AbUBAQL/AbUBAQL/AbUBAQH/AcEBcQEAAf8B
|
||||||
|
gwEuAQAB/wHBAToBAQL/AUcBAgL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQH/AkcB
|
||||||
|
RgGA/wCBAAH/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcB
|
||||||
|
AQH/Af4BSgEBAf8B/QFNAQAB/wH+AYwBGQL/AcoBMQH/Af4BwQEZAf8B/QG3AQAB/wH+AbYBAQL/AbUB
|
||||||
|
AQL/AbUBAQL/AbUBAQL/AbQBAQL/AbIBAQH/AdUBcgEBAf8BqwEyAQAB/wHVAT0BAQL/AUcBAQL/AUcB
|
||||||
|
AQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQH/AkcBRgGA/wCBAAH/AUcBAQL/AUcBAQL/AUcB
|
||||||
|
AQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUcBAQL/AUgBAQH/Af4BSgEAAv8BjQE2Av8B
|
||||||
|
0QFsAf8B+wHHAUcB/wH3Ab4BIgH/AfsBuQESAv8BtQECAf8B/QG1AQgB/wH8AbYBDQH/AfsBrwENAf8B
|
||||||
|
+wGoAQ0B/wHoAXIBCAH/AdUBPAEDAf8B6gFCAQIC/wFIAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC
|
||||||
|
/wFHAQEC/wFHAQEB/wJHAUYBgP8AgQAB/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC
|
||||||
|
/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFGAQAC/wGPAVMC/wHYAaYB/wH4Ac4BdQH/AfEBxAFEAf8B
|
||||||
|
+AG8ASQC/wG0AQMB/wH8AbYBDgH/AfgBtwEZAf8B+AGrARkB/wH3AZ4BGAH/AfsBcgEPAv8BRQEGAv8B
|
||||||
|
RwEDAv8BSAEAAv8BSAEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAf8CRwFGAYD/AIEAAf8B
|
||||||
|
RwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BSAEBAf8B/QFIAQAB
|
||||||
|
/wH7AUgBAAH/Af0BbgEsAv8BlAFZAf8B/AGOAT8B/wH4AYgBJQH/Ae8BhAEUAf8B5gGBAQMB/wHtAYEB
|
||||||
|
CAH/AfUBgQEOAf8B+AF5AQ8B/wH7AXIBEAH/Af0BXQEJAv8BRwEDAv8BRwECAv8BSAEBAv8BRwEBAv8B
|
||||||
|
RwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAf8CRwFGAYD/AIEAAf8BRwEBAv8BRwEBAv8BRwEBAv8B
|
||||||
|
RwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BSAEBAf8B/gFIAQAB/wH6AUkBAAH/AfYBSQEAAf8B+wFNAQYC
|
||||||
|
/wFQAQsC/wFOAQkC/wFMAQYB/wHmAU0BBAH/AcwBTQECAf8B3wFMAQMB/wHyAUoBAwH/AfkBSAEFAv8B
|
||||||
|
RgEHAv8BSAEEAf8B/gFJAQAC/wFIAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC
|
||||||
|
/wFHAQEB/wJHAUYBgP8AgQAB/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC/wFHAQEC
|
||||||
|
/wFHAQEC/wFIAQEB/wH9AUgBAQH/AfsBSAEBAf8B/QFKAQMC/wFMAQYC/wFLAQUC/wFKAQQB/wHyAUoB
|
||||||
|
AwH/AeYBSgECAf8B7wFJAQIB/wH5AUkBAgH/AfwBSAEDAv8BRwEEAv8BRwECAv8BSAEBAv8BSAEBAv8B
|
||||||
|
RwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAf8CRwFGAYD/AIEAAf8BRwEBAv8B
|
||||||
|
RwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8B
|
||||||
|
RwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8B
|
||||||
|
RwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAf8C
|
||||||
|
RwFGAYD/AIEAAf8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8B
|
||||||
|
RwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8B
|
||||||
|
RwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8B
|
||||||
|
RwEBAv8BRwEBAv8BRwEBAf8CRwFGAYD/AIEAAf8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8B
|
||||||
|
RwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8B
|
||||||
|
RwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8B
|
||||||
|
RwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAv8BRwEBAf8CRwFGAYD/AIEAAUIBTQE+BwABPgMAASgD
|
||||||
|
AAGAAwABIAMAAQEBAAEBBgABAhYAA///AP8AAwAL
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
|||||||
47
qtc-net-client-2/Forms/DirectMessage.Designer.cs
generated
47
qtc-net-client-2/Forms/DirectMessage.Designer.cs
generated
@ -29,23 +29,14 @@
|
|||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DirectMessage));
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DirectMessage));
|
||||||
rtxtChat = new RichTextBox();
|
|
||||||
btnSend = new Button();
|
btnSend = new Button();
|
||||||
rtxtChatbox = new RichTextBox();
|
rtxtChatbox = new RichTextBox();
|
||||||
lblUsername = new Label();
|
lblUsername = new Label();
|
||||||
|
pbPfp = new PictureBox();
|
||||||
|
fpnlMessages = new FlowLayoutPanel();
|
||||||
|
((System.ComponentModel.ISupportInitialize)pbPfp).BeginInit();
|
||||||
SuspendLayout();
|
SuspendLayout();
|
||||||
//
|
//
|
||||||
// rtxtChat
|
|
||||||
//
|
|
||||||
rtxtChat.HideSelection = false;
|
|
||||||
rtxtChat.Location = new Point(12, 48);
|
|
||||||
rtxtChat.Margin = new Padding(4, 3, 4, 3);
|
|
||||||
rtxtChat.Name = "rtxtChat";
|
|
||||||
rtxtChat.ReadOnly = true;
|
|
||||||
rtxtChat.Size = new Size(593, 325);
|
|
||||||
rtxtChat.TabIndex = 6;
|
|
||||||
rtxtChat.Text = "";
|
|
||||||
//
|
|
||||||
// btnSend
|
// btnSend
|
||||||
//
|
//
|
||||||
btnSend.FlatAppearance.BorderSize = 0;
|
btnSend.FlatAppearance.BorderSize = 0;
|
||||||
@ -74,21 +65,44 @@
|
|||||||
//
|
//
|
||||||
lblUsername.AutoSize = true;
|
lblUsername.AutoSize = true;
|
||||||
lblUsername.Font = new Font("Segoe UI", 25F, FontStyle.Bold | FontStyle.Italic);
|
lblUsername.Font = new Font("Segoe UI", 25F, FontStyle.Bold | FontStyle.Italic);
|
||||||
lblUsername.Location = new Point(6, 0);
|
lblUsername.Location = new Point(52, 0);
|
||||||
lblUsername.Margin = new Padding(4, 0, 4, 0);
|
lblUsername.Margin = new Padding(4, 0, 4, 0);
|
||||||
lblUsername.Name = "lblUsername";
|
lblUsername.Name = "lblUsername";
|
||||||
lblUsername.Size = new Size(181, 46);
|
lblUsername.Size = new Size(181, 46);
|
||||||
lblUsername.TabIndex = 7;
|
lblUsername.TabIndex = 7;
|
||||||
lblUsername.Text = "Username";
|
lblUsername.Text = "Username";
|
||||||
//
|
//
|
||||||
|
// pbPfp
|
||||||
|
//
|
||||||
|
pbPfp.Image = Properties.Resources.DefaultPfp;
|
||||||
|
pbPfp.Location = new Point(14, 6);
|
||||||
|
pbPfp.Name = "pbPfp";
|
||||||
|
pbPfp.Size = new Size(40, 37);
|
||||||
|
pbPfp.SizeMode = PictureBoxSizeMode.StretchImage;
|
||||||
|
pbPfp.TabIndex = 9;
|
||||||
|
pbPfp.TabStop = false;
|
||||||
|
//
|
||||||
|
// fpnlMessages
|
||||||
|
//
|
||||||
|
fpnlMessages.AutoScroll = true;
|
||||||
|
fpnlMessages.BackColor = Color.White;
|
||||||
|
fpnlMessages.BorderStyle = BorderStyle.Fixed3D;
|
||||||
|
fpnlMessages.FlowDirection = FlowDirection.TopDown;
|
||||||
|
fpnlMessages.Location = new Point(14, 49);
|
||||||
|
fpnlMessages.Name = "fpnlMessages";
|
||||||
|
fpnlMessages.Size = new Size(591, 324);
|
||||||
|
fpnlMessages.TabIndex = 11;
|
||||||
|
fpnlMessages.WrapContents = false;
|
||||||
|
//
|
||||||
// DirectMessage
|
// DirectMessage
|
||||||
//
|
//
|
||||||
AutoScaleDimensions = new SizeF(7F, 15F);
|
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||||
AutoScaleMode = AutoScaleMode.Font;
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
BackColor = Color.DodgerBlue;
|
BackColor = Color.DodgerBlue;
|
||||||
ClientSize = new Size(618, 443);
|
ClientSize = new Size(618, 443);
|
||||||
|
Controls.Add(fpnlMessages);
|
||||||
|
Controls.Add(pbPfp);
|
||||||
Controls.Add(lblUsername);
|
Controls.Add(lblUsername);
|
||||||
Controls.Add(rtxtChat);
|
|
||||||
Controls.Add(btnSend);
|
Controls.Add(btnSend);
|
||||||
Controls.Add(rtxtChatbox);
|
Controls.Add(rtxtChatbox);
|
||||||
Font = new Font("Segoe UI", 9F);
|
Font = new Font("Segoe UI", 9F);
|
||||||
@ -101,15 +115,16 @@
|
|||||||
StartPosition = FormStartPosition.CenterScreen;
|
StartPosition = FormStartPosition.CenterScreen;
|
||||||
Text = "QtC.NET Client - Direct Message With ${USER}";
|
Text = "QtC.NET Client - Direct Message With ${USER}";
|
||||||
Load += frmDirectMessage_Load;
|
Load += frmDirectMessage_Load;
|
||||||
|
((System.ComponentModel.ISupportInitialize)pbPfp).EndInit();
|
||||||
ResumeLayout(false);
|
ResumeLayout(false);
|
||||||
PerformLayout();
|
PerformLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private RichTextBox rtxtChat;
|
|
||||||
private Button btnSend;
|
private Button btnSend;
|
||||||
private RichTextBox rtxtChatbox;
|
private RichTextBox rtxtChatbox;
|
||||||
private Label lblUsername;
|
private Label lblUsername;
|
||||||
|
private PictureBox pbPfp;
|
||||||
|
private FlowLayoutPanel fpnlMessages;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,4 +1,5 @@
|
|||||||
using Microsoft.AspNetCore.Mvc.ModelBinding;
|
using Microsoft.AspNetCore.Mvc.ModelBinding;
|
||||||
|
using qtc_net_client_2.Controls;
|
||||||
using qtc_net_client_2.Services;
|
using qtc_net_client_2.Services;
|
||||||
using QtCNETAPI.Dtos.User;
|
using QtCNETAPI.Dtos.User;
|
||||||
using QtCNETAPI.Events;
|
using QtCNETAPI.Events;
|
||||||
@ -36,20 +37,23 @@ namespace qtc_net_client_2.Forms
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void frmDirectMessage_Load(object sender, EventArgs e)
|
private async void frmDirectMessage_Load(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
lblUsername.Text = User.Username;
|
lblUsername.Text = User.Username;
|
||||||
Text = $"QtC.NET Client - Direct Message With {User.Username}";
|
Text = $"QtC.NET Client - Direct Message With {User.Username}";
|
||||||
Messages.CollectionChanged += Messages_CollectionChanged;
|
Messages.CollectionChanged += Messages_CollectionChanged;
|
||||||
|
|
||||||
if (User.Role == "Admin")
|
var pfpRes = await _apiService.GetUserProfilePic(User.Id);
|
||||||
|
if(pfpRes != null && pfpRes.Success && pfpRes.Data != null)
|
||||||
{
|
{
|
||||||
Messages.Add($"[SERVER] This User Is A Server Admin. You should comply with anything this user asks. however admins should not ask for personal information.\n");
|
using var ms = new MemoryStream(pfpRes.Data);
|
||||||
|
using var img = Image.FromStream(ms);
|
||||||
|
pbPfp.Image = new Bitmap(img);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (InitMessage != null)
|
if (InitMessage != null)
|
||||||
{
|
{
|
||||||
Messages.Add($"[{User.Username}] {InitMessage.Content}\n");
|
Messages.Add($"{User.Username}: {InitMessage.Content}");
|
||||||
AudioService.PlaySoundEffect("sndDirectMsg");
|
AudioService.PlaySoundEffect("sndDirectMsg");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -63,7 +67,7 @@ namespace qtc_net_client_2.Forms
|
|||||||
if (!string.IsNullOrEmpty(rtxtChatbox.Text))
|
if (!string.IsNullOrEmpty(rtxtChatbox.Text))
|
||||||
{
|
{
|
||||||
await _gatewayService.SendDirectMessageAsync(User, new QtCNETAPI.Models.Message { Content = rtxtChatbox.Text, AuthorId = _apiService.CurrentUser.Id });
|
await _gatewayService.SendDirectMessageAsync(User, new QtCNETAPI.Models.Message { Content = rtxtChatbox.Text, AuthorId = _apiService.CurrentUser.Id });
|
||||||
Messages.Add($"[{_apiService.CurrentUser.Username}] {rtxtChatbox.Text}\n");
|
Messages.Add($"{_apiService.CurrentUser.Username}: {rtxtChatbox.Text}");
|
||||||
rtxtChatbox.Clear();
|
rtxtChatbox.Clear();
|
||||||
AudioService.PlaySoundEffect("sndSendClick");
|
AudioService.PlaySoundEffect("sndSendClick");
|
||||||
}
|
}
|
||||||
@ -74,7 +78,7 @@ namespace qtc_net_client_2.Forms
|
|||||||
if (!string.IsNullOrEmpty(rtxtChatbox.Text))
|
if (!string.IsNullOrEmpty(rtxtChatbox.Text))
|
||||||
{
|
{
|
||||||
await _gatewayService.SendDirectMessageAsync(User, new QtCNETAPI.Models.Message { Content = rtxtChatbox.Text, AuthorId = _apiService.CurrentUser.Id });
|
await _gatewayService.SendDirectMessageAsync(User, new QtCNETAPI.Models.Message { Content = rtxtChatbox.Text, AuthorId = _apiService.CurrentUser.Id });
|
||||||
Messages.Add($"[{_apiService.CurrentUser.Username}] {rtxtChatbox.Text}\n");
|
Messages.Add($"{_apiService.CurrentUser.Username}: {rtxtChatbox.Text}");
|
||||||
rtxtChatbox.Clear();
|
rtxtChatbox.Clear();
|
||||||
AudioService.PlaySoundEffect("sndSendClick");
|
AudioService.PlaySoundEffect("sndSendClick");
|
||||||
}
|
}
|
||||||
@ -97,14 +101,36 @@ namespace qtc_net_client_2.Forms
|
|||||||
Invoke(delegate ()
|
Invoke(delegate ()
|
||||||
{
|
{
|
||||||
var msg = e.NewItems.Cast<string>().FirstOrDefault();
|
var msg = e.NewItems.Cast<string>().FirstOrDefault();
|
||||||
rtxtChat.AppendText(msg);
|
|
||||||
|
var ctrl = new ChatMessageControlMinimal()
|
||||||
|
{
|
||||||
|
Username = msg!.Split(':')[0],
|
||||||
|
Message = msg!.Split(":")[1].Trim(),
|
||||||
|
};
|
||||||
|
ctrl.Height = ctrl.CalculateHeight(ctrl.Width);
|
||||||
|
|
||||||
|
fpnlMessages.Controls.Add(ctrl);
|
||||||
|
fpnlMessages.VerticalScroll.Value = fpnlMessages.VerticalScroll.Maximum;
|
||||||
|
fpnlMessages.PerformLayout();
|
||||||
|
|
||||||
if (!msg!.Contains(_apiService.CurrentUser.Username)) AudioService.PlaySoundEffect("sndMessage");
|
if (!msg!.Contains(_apiService.CurrentUser.Username)) AudioService.PlaySoundEffect("sndMessage");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var msg = e.NewItems.Cast<string>().FirstOrDefault();
|
var msg = e.NewItems.Cast<string>().FirstOrDefault();
|
||||||
rtxtChat.AppendText(msg);
|
|
||||||
|
var ctrl = new ChatMessageControlMinimal()
|
||||||
|
{
|
||||||
|
Username = msg!.Split(':')[0],
|
||||||
|
Message = msg!.Split(":")[1].Trim(),
|
||||||
|
};
|
||||||
|
ctrl.Height = ctrl.CalculateHeight(ctrl.Width);
|
||||||
|
|
||||||
|
fpnlMessages.Controls.Add(ctrl);
|
||||||
|
fpnlMessages.VerticalScroll.Value = fpnlMessages.VerticalScroll.Maximum;
|
||||||
|
fpnlMessages.PerformLayout();
|
||||||
|
|
||||||
if (!msg!.Contains(_apiService.CurrentUser.Username)) AudioService.PlaySoundEffect("sndMessage");
|
if (!msg!.Contains(_apiService.CurrentUser.Username)) AudioService.PlaySoundEffect("sndMessage");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
12
qtc-net-client-2/Forms/Login.Designer.cs
generated
12
qtc-net-client-2/Forms/Login.Designer.cs
generated
@ -1,6 +1,6 @@
|
|||||||
namespace qtc_net_client_2.Forms
|
namespace qtc_net_client_2.Forms
|
||||||
{
|
{
|
||||||
partial class llblForgotPassword
|
partial class Login
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Required designer variable.
|
/// Required designer variable.
|
||||||
@ -28,7 +28,7 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(llblForgotPassword));
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Login));
|
||||||
pbLoginBanner = new PictureBox();
|
pbLoginBanner = new PictureBox();
|
||||||
tbEmail = new TextBox();
|
tbEmail = new TextBox();
|
||||||
lblEmail = new Label();
|
lblEmail = new Label();
|
||||||
@ -119,9 +119,9 @@
|
|||||||
cbRememberMe.ForeColor = SystemColors.ControlLight;
|
cbRememberMe.ForeColor = SystemColors.ControlLight;
|
||||||
cbRememberMe.Location = new Point(198, 168);
|
cbRememberMe.Location = new Point(198, 168);
|
||||||
cbRememberMe.Name = "cbRememberMe";
|
cbRememberMe.Name = "cbRememberMe";
|
||||||
cbRememberMe.Size = new Size(157, 19);
|
cbRememberMe.Size = new Size(163, 19);
|
||||||
cbRememberMe.TabIndex = 7;
|
cbRememberMe.TabIndex = 7;
|
||||||
cbRememberMe.Text = "Remember Me For 7 Days";
|
cbRememberMe.Text = "Remember Me For 30 Days";
|
||||||
cbRememberMe.UseVisualStyleBackColor = true;
|
cbRememberMe.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// llblResendEmail
|
// llblResendEmail
|
||||||
@ -150,7 +150,7 @@
|
|||||||
llblForgotPasswor.Text = "Forgot Password?";
|
llblForgotPasswor.Text = "Forgot Password?";
|
||||||
llblForgotPasswor.LinkClicked += llblForgotPasswor_LinkClicked;
|
llblForgotPasswor.LinkClicked += llblForgotPasswor_LinkClicked;
|
||||||
//
|
//
|
||||||
// llblForgotPassword
|
// Login
|
||||||
//
|
//
|
||||||
AutoScaleDimensions = new SizeF(7F, 15F);
|
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||||
AutoScaleMode = AutoScaleMode.Font;
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
@ -169,7 +169,7 @@
|
|||||||
FormBorderStyle = FormBorderStyle.FixedDialog;
|
FormBorderStyle = FormBorderStyle.FixedDialog;
|
||||||
Icon = (Icon)resources.GetObject("$this.Icon");
|
Icon = (Icon)resources.GetObject("$this.Icon");
|
||||||
MaximizeBox = false;
|
MaximizeBox = false;
|
||||||
Name = "llblForgotPassword";
|
Name = "Login";
|
||||||
StartPosition = FormStartPosition.CenterParent;
|
StartPosition = FormStartPosition.CenterParent;
|
||||||
Text = "QtC.NET Client - Login";
|
Text = "QtC.NET Client - Login";
|
||||||
Load += frmLogin_Load;
|
Load += frmLogin_Load;
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using QtCNETAPI.Services.ApiService;
|
using QtCNETAPI.Services.ApiService;
|
||||||
|
using QtCNETAPI.Services;
|
||||||
using QtCNETAPI.Dtos.User;
|
using QtCNETAPI.Dtos.User;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@ -13,11 +14,11 @@ using qtc_net_client_2.Services;
|
|||||||
|
|
||||||
namespace qtc_net_client_2.Forms
|
namespace qtc_net_client_2.Forms
|
||||||
{
|
{
|
||||||
public partial class llblForgotPassword : Form
|
public partial class Login : Form
|
||||||
{
|
{
|
||||||
private IApiService _apiService;
|
private IApiService _apiService;
|
||||||
private CredentialService _credService = new();
|
private CredentialService _credService = new();
|
||||||
public llblForgotPassword(IApiService apiService)
|
public Login(IApiService apiService)
|
||||||
{
|
{
|
||||||
_apiService = apiService;
|
_apiService = apiService;
|
||||||
|
|
||||||
|
|||||||
108
qtc-net-client-2/Forms/Main.Designer.cs
generated
108
qtc-net-client-2/Forms/Main.Designer.cs
generated
@ -30,17 +30,16 @@
|
|||||||
{
|
{
|
||||||
components = new System.ComponentModel.Container();
|
components = new System.ComponentModel.Container();
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main));
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main));
|
||||||
ListViewItem listViewItem1 = new ListViewItem("Stock Market", 0);
|
ListViewItem listViewItem4 = new ListViewItem("Stock Market", 0);
|
||||||
ListViewItem listViewItem2 = new ListViewItem("Guess The Number", 1);
|
ListViewItem listViewItem5 = new ListViewItem("Guess The Number", 1);
|
||||||
ListViewItem listViewItem3 = new ListViewItem("Tic-Tac-Toe (Multiplayer)", "Tic-tac-toe.png");
|
ListViewItem listViewItem6 = new ListViewItem("Tic-Tac-Toe (Multiplayer)", "Tic-tac-toe.png");
|
||||||
tbcMain = new TabControl();
|
tbcMain = new TabControl();
|
||||||
tbpContacts = new TabPage();
|
tbpContacts = new TabPage();
|
||||||
lvContacts = new ListView();
|
flpContacts = new FlowLayoutPanel();
|
||||||
ctxmRefresh = new ContextMenuStrip(components);
|
ctxmRefresh = new ContextMenuStrip(components);
|
||||||
refreshToolStripMenuItem = new ToolStripMenuItem();
|
refreshToolStripMenuItem = new ToolStripMenuItem();
|
||||||
ilProfilePics = new ImageList(components);
|
|
||||||
tbpRooms = new TabPage();
|
tbpRooms = new TabPage();
|
||||||
lbRooms = new ListBox();
|
flpRooms = new FlowLayoutPanel();
|
||||||
tbpUsers = new TabPage();
|
tbpUsers = new TabPage();
|
||||||
lvUserDirectory = new ListView();
|
lvUserDirectory = new ListView();
|
||||||
ilStatusIcons = new ImageList(components);
|
ilStatusIcons = new ImageList(components);
|
||||||
@ -51,6 +50,7 @@
|
|||||||
lvStoreItems = new ListView();
|
lvStoreItems = new ListView();
|
||||||
ilStoreThumbnails = new ImageList(components);
|
ilStoreThumbnails = new ImageList(components);
|
||||||
ilTabIcons = new ImageList(components);
|
ilTabIcons = new ImageList(components);
|
||||||
|
ilProfilePics = new ImageList(components);
|
||||||
ctxmChangeStatus = new ContextMenuStrip(components);
|
ctxmChangeStatus = new ContextMenuStrip(components);
|
||||||
onlineToolStripMenuItem = new ToolStripMenuItem();
|
onlineToolStripMenuItem = new ToolStripMenuItem();
|
||||||
awayToolStripMenuItem = new ToolStripMenuItem();
|
awayToolStripMenuItem = new ToolStripMenuItem();
|
||||||
@ -117,7 +117,7 @@
|
|||||||
//
|
//
|
||||||
// tbpContacts
|
// tbpContacts
|
||||||
//
|
//
|
||||||
tbpContacts.Controls.Add(lvContacts);
|
tbpContacts.Controls.Add(flpContacts);
|
||||||
tbpContacts.ImageKey = "ContactsIcon.png";
|
tbpContacts.ImageKey = "ContactsIcon.png";
|
||||||
tbpContacts.Location = new Point(4, 24);
|
tbpContacts.Location = new Point(4, 24);
|
||||||
tbpContacts.Name = "tbpContacts";
|
tbpContacts.Name = "tbpContacts";
|
||||||
@ -127,21 +127,19 @@
|
|||||||
tbpContacts.Text = "Contacts";
|
tbpContacts.Text = "Contacts";
|
||||||
tbpContacts.UseVisualStyleBackColor = true;
|
tbpContacts.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// lvContacts
|
// flpContacts
|
||||||
//
|
//
|
||||||
lvContacts.Alignment = ListViewAlignment.Left;
|
flpContacts.AutoScroll = true;
|
||||||
lvContacts.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
flpContacts.BackColor = Color.White;
|
||||||
lvContacts.ContextMenuStrip = ctxmRefresh;
|
flpContacts.BorderStyle = BorderStyle.Fixed3D;
|
||||||
lvContacts.LargeImageList = ilProfilePics;
|
flpContacts.ContextMenuStrip = ctxmRefresh;
|
||||||
lvContacts.Location = new Point(0, 0);
|
flpContacts.Dock = DockStyle.Fill;
|
||||||
lvContacts.MultiSelect = false;
|
flpContacts.FlowDirection = FlowDirection.TopDown;
|
||||||
lvContacts.Name = "lvContacts";
|
flpContacts.Location = new Point(3, 3);
|
||||||
lvContacts.Size = new Size(344, 478);
|
flpContacts.Name = "flpContacts";
|
||||||
lvContacts.SmallImageList = ilProfilePics;
|
flpContacts.Size = new Size(338, 465);
|
||||||
lvContacts.TabIndex = 1;
|
flpContacts.TabIndex = 0;
|
||||||
lvContacts.UseCompatibleStateImageBehavior = false;
|
flpContacts.WrapContents = false;
|
||||||
lvContacts.View = View.SmallIcon;
|
|
||||||
lvContacts.DoubleClick += lvContacts_DoubleClick;
|
|
||||||
//
|
//
|
||||||
// ctxmRefresh
|
// ctxmRefresh
|
||||||
//
|
//
|
||||||
@ -156,16 +154,9 @@
|
|||||||
refreshToolStripMenuItem.Text = "Refresh";
|
refreshToolStripMenuItem.Text = "Refresh";
|
||||||
refreshToolStripMenuItem.Click += refreshToolStripMenuItem_Click;
|
refreshToolStripMenuItem.Click += refreshToolStripMenuItem_Click;
|
||||||
//
|
//
|
||||||
// ilProfilePics
|
|
||||||
//
|
|
||||||
ilProfilePics.ColorDepth = ColorDepth.Depth32Bit;
|
|
||||||
ilProfilePics.ImageStream = (ImageListStreamer)resources.GetObject("ilProfilePics.ImageStream");
|
|
||||||
ilProfilePics.TransparentColor = Color.Transparent;
|
|
||||||
ilProfilePics.Images.SetKeyName(0, "DEFAULT");
|
|
||||||
//
|
|
||||||
// tbpRooms
|
// tbpRooms
|
||||||
//
|
//
|
||||||
tbpRooms.Controls.Add(lbRooms);
|
tbpRooms.Controls.Add(flpRooms);
|
||||||
tbpRooms.ImageKey = "RoomsChatIcon.png";
|
tbpRooms.ImageKey = "RoomsChatIcon.png";
|
||||||
tbpRooms.Location = new Point(4, 24);
|
tbpRooms.Location = new Point(4, 24);
|
||||||
tbpRooms.Name = "tbpRooms";
|
tbpRooms.Name = "tbpRooms";
|
||||||
@ -175,17 +166,19 @@
|
|||||||
tbpRooms.Text = "Rooms";
|
tbpRooms.Text = "Rooms";
|
||||||
tbpRooms.UseVisualStyleBackColor = true;
|
tbpRooms.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// lbRooms
|
// flpRooms
|
||||||
//
|
//
|
||||||
lbRooms.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
flpRooms.AutoScroll = true;
|
||||||
lbRooms.ContextMenuStrip = ctxmRefresh;
|
flpRooms.BackColor = Color.White;
|
||||||
lbRooms.FormattingEnabled = true;
|
flpRooms.BorderStyle = BorderStyle.Fixed3D;
|
||||||
lbRooms.ItemHeight = 15;
|
flpRooms.ContextMenuStrip = ctxmRefresh;
|
||||||
lbRooms.Location = new Point(0, 0);
|
flpRooms.Dock = DockStyle.Fill;
|
||||||
lbRooms.Name = "lbRooms";
|
flpRooms.FlowDirection = FlowDirection.TopDown;
|
||||||
lbRooms.Size = new Size(344, 484);
|
flpRooms.Location = new Point(3, 3);
|
||||||
lbRooms.TabIndex = 0;
|
flpRooms.Name = "flpRooms";
|
||||||
lbRooms.DoubleClick += lbRooms_DoubleClick;
|
flpRooms.Size = new Size(338, 465);
|
||||||
|
flpRooms.TabIndex = 1;
|
||||||
|
flpRooms.WrapContents = false;
|
||||||
//
|
//
|
||||||
// tbpUsers
|
// tbpUsers
|
||||||
//
|
//
|
||||||
@ -238,10 +231,10 @@
|
|||||||
// lvGames
|
// lvGames
|
||||||
//
|
//
|
||||||
lvGames.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
lvGames.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
listViewItem1.Tag = "StockMarketGame";
|
listViewItem4.Tag = "StockMarketGame";
|
||||||
listViewItem2.Tag = "GuessTheNumberGame";
|
listViewItem5.Tag = "GuessTheNumberGame";
|
||||||
listViewItem3.Tag = "TicTacToeGame";
|
listViewItem6.Tag = "TicTacToeGame";
|
||||||
lvGames.Items.AddRange(new ListViewItem[] { listViewItem1, listViewItem2, listViewItem3 });
|
lvGames.Items.AddRange(new ListViewItem[] { listViewItem4, listViewItem5, listViewItem6 });
|
||||||
lvGames.LargeImageList = ilGames;
|
lvGames.LargeImageList = ilGames;
|
||||||
lvGames.Location = new Point(0, 0);
|
lvGames.Location = new Point(0, 0);
|
||||||
lvGames.MultiSelect = false;
|
lvGames.MultiSelect = false;
|
||||||
@ -277,6 +270,7 @@
|
|||||||
//
|
//
|
||||||
lvStoreItems.LargeImageList = ilStoreThumbnails;
|
lvStoreItems.LargeImageList = ilStoreThumbnails;
|
||||||
lvStoreItems.Location = new Point(0, 0);
|
lvStoreItems.Location = new Point(0, 0);
|
||||||
|
lvStoreItems.MultiSelect = false;
|
||||||
lvStoreItems.Name = "lvStoreItems";
|
lvStoreItems.Name = "lvStoreItems";
|
||||||
lvStoreItems.Size = new Size(344, 484);
|
lvStoreItems.Size = new Size(344, 484);
|
||||||
lvStoreItems.SmallImageList = ilStoreThumbnails;
|
lvStoreItems.SmallImageList = ilStoreThumbnails;
|
||||||
@ -300,6 +294,13 @@
|
|||||||
ilTabIcons.Images.SetKeyName(2, "RoomsChatIcon.png");
|
ilTabIcons.Images.SetKeyName(2, "RoomsChatIcon.png");
|
||||||
ilTabIcons.Images.SetKeyName(3, "CurrencyIcon.png");
|
ilTabIcons.Images.SetKeyName(3, "CurrencyIcon.png");
|
||||||
//
|
//
|
||||||
|
// ilProfilePics
|
||||||
|
//
|
||||||
|
ilProfilePics.ColorDepth = ColorDepth.Depth32Bit;
|
||||||
|
ilProfilePics.ImageStream = (ImageListStreamer)resources.GetObject("ilProfilePics.ImageStream");
|
||||||
|
ilProfilePics.TransparentColor = Color.Transparent;
|
||||||
|
ilProfilePics.Images.SetKeyName(0, "DEFAULT");
|
||||||
|
//
|
||||||
// ctxmChangeStatus
|
// ctxmChangeStatus
|
||||||
//
|
//
|
||||||
ctxmChangeStatus.Items.AddRange(new ToolStripItem[] { onlineToolStripMenuItem, awayToolStripMenuItem, doNotDisturbToolStripMenuItem, invisibleToolStripMenuItem });
|
ctxmChangeStatus.Items.AddRange(new ToolStripItem[] { onlineToolStripMenuItem, awayToolStripMenuItem, doNotDisturbToolStripMenuItem, invisibleToolStripMenuItem });
|
||||||
@ -469,7 +470,6 @@
|
|||||||
//
|
//
|
||||||
// pbUserPfp
|
// pbUserPfp
|
||||||
//
|
//
|
||||||
pbUserPfp.BorderStyle = BorderStyle.FixedSingle;
|
|
||||||
pbUserPfp.ContextMenuStrip = ctxmChangeStatus;
|
pbUserPfp.ContextMenuStrip = ctxmChangeStatus;
|
||||||
pbUserPfp.Cursor = Cursors.Hand;
|
pbUserPfp.Cursor = Cursors.Hand;
|
||||||
pbUserPfp.Image = Properties.Resources.DefaultPfp;
|
pbUserPfp.Image = Properties.Resources.DefaultPfp;
|
||||||
@ -498,39 +498,39 @@
|
|||||||
//
|
//
|
||||||
ctxmAdminUserList.Items.AddRange(new ToolStripItem[] { refreshToolStripMenuItem1, toolStripSeparator1, copyUserIDToClipboardToolStripMenuItem, deleteUserToolStripMenuItem, adminDirectMessageToolStripMenuItem });
|
ctxmAdminUserList.Items.AddRange(new ToolStripItem[] { refreshToolStripMenuItem1, toolStripSeparator1, copyUserIDToClipboardToolStripMenuItem, deleteUserToolStripMenuItem, adminDirectMessageToolStripMenuItem });
|
||||||
ctxmAdminUserList.Name = "contextMenuStrip1";
|
ctxmAdminUserList.Name = "contextMenuStrip1";
|
||||||
ctxmAdminUserList.Size = new Size(213, 98);
|
ctxmAdminUserList.Size = new Size(214, 98);
|
||||||
ctxmAdminUserList.Opening += ctxmAdminUserList_Opening;
|
ctxmAdminUserList.Opening += ctxmAdminUserList_Opening;
|
||||||
//
|
//
|
||||||
// refreshToolStripMenuItem1
|
// refreshToolStripMenuItem1
|
||||||
//
|
//
|
||||||
refreshToolStripMenuItem1.Name = "refreshToolStripMenuItem1";
|
refreshToolStripMenuItem1.Name = "refreshToolStripMenuItem1";
|
||||||
refreshToolStripMenuItem1.Size = new Size(212, 22);
|
refreshToolStripMenuItem1.Size = new Size(213, 22);
|
||||||
refreshToolStripMenuItem1.Text = "Refresh";
|
refreshToolStripMenuItem1.Text = "Refresh";
|
||||||
refreshToolStripMenuItem1.Click += refreshToolStripMenuItem_Click;
|
refreshToolStripMenuItem1.Click += refreshToolStripMenuItem_Click;
|
||||||
//
|
//
|
||||||
// toolStripSeparator1
|
// toolStripSeparator1
|
||||||
//
|
//
|
||||||
toolStripSeparator1.Name = "toolStripSeparator1";
|
toolStripSeparator1.Name = "toolStripSeparator1";
|
||||||
toolStripSeparator1.Size = new Size(209, 6);
|
toolStripSeparator1.Size = new Size(210, 6);
|
||||||
//
|
//
|
||||||
// copyUserIDToClipboardToolStripMenuItem
|
// copyUserIDToClipboardToolStripMenuItem
|
||||||
//
|
//
|
||||||
copyUserIDToClipboardToolStripMenuItem.Name = "copyUserIDToClipboardToolStripMenuItem";
|
copyUserIDToClipboardToolStripMenuItem.Name = "copyUserIDToClipboardToolStripMenuItem";
|
||||||
copyUserIDToClipboardToolStripMenuItem.Size = new Size(212, 22);
|
copyUserIDToClipboardToolStripMenuItem.Size = new Size(213, 22);
|
||||||
copyUserIDToClipboardToolStripMenuItem.Text = "Copy User ID To Clipboard";
|
copyUserIDToClipboardToolStripMenuItem.Text = "Copy User ID To Clipboard";
|
||||||
copyUserIDToClipboardToolStripMenuItem.Click += copyUserIDToClipboardToolStripMenuItem_Click;
|
copyUserIDToClipboardToolStripMenuItem.Click += copyUserIDToClipboardToolStripMenuItem_Click;
|
||||||
//
|
//
|
||||||
// deleteUserToolStripMenuItem
|
// deleteUserToolStripMenuItem
|
||||||
//
|
//
|
||||||
deleteUserToolStripMenuItem.Name = "deleteUserToolStripMenuItem";
|
deleteUserToolStripMenuItem.Name = "deleteUserToolStripMenuItem";
|
||||||
deleteUserToolStripMenuItem.Size = new Size(212, 22);
|
deleteUserToolStripMenuItem.Size = new Size(213, 22);
|
||||||
deleteUserToolStripMenuItem.Text = "Delete User";
|
deleteUserToolStripMenuItem.Text = "Delete User";
|
||||||
deleteUserToolStripMenuItem.Click += deleteUserToolStripMenuItem_Click;
|
deleteUserToolStripMenuItem.Click += deleteUserToolStripMenuItem_Click;
|
||||||
//
|
//
|
||||||
// adminDirectMessageToolStripMenuItem
|
// adminDirectMessageToolStripMenuItem
|
||||||
//
|
//
|
||||||
adminDirectMessageToolStripMenuItem.Name = "adminDirectMessageToolStripMenuItem";
|
adminDirectMessageToolStripMenuItem.Name = "adminDirectMessageToolStripMenuItem";
|
||||||
adminDirectMessageToolStripMenuItem.Size = new Size(212, 22);
|
adminDirectMessageToolStripMenuItem.Size = new Size(213, 22);
|
||||||
adminDirectMessageToolStripMenuItem.Text = "Admin Direct Message";
|
adminDirectMessageToolStripMenuItem.Text = "Admin Direct Message";
|
||||||
adminDirectMessageToolStripMenuItem.Click += adminDirectMessageToolStripMenuItem_Click;
|
adminDirectMessageToolStripMenuItem.Click += adminDirectMessageToolStripMenuItem_Click;
|
||||||
//
|
//
|
||||||
@ -539,7 +539,6 @@
|
|||||||
ctxmAdminRoomList.Items.AddRange(new ToolStripItem[] { toolStripMenuItem1, toolStripSeparator2, addRoomToolStripMenuItem, deleteRoomToolStripMenuItem });
|
ctxmAdminRoomList.Items.AddRange(new ToolStripItem[] { toolStripMenuItem1, toolStripSeparator2, addRoomToolStripMenuItem, deleteRoomToolStripMenuItem });
|
||||||
ctxmAdminRoomList.Name = "contextMenuStrip1";
|
ctxmAdminRoomList.Name = "contextMenuStrip1";
|
||||||
ctxmAdminRoomList.Size = new Size(143, 76);
|
ctxmAdminRoomList.Size = new Size(143, 76);
|
||||||
ctxmAdminRoomList.Opening += ctxmAdminRoomList_Opening;
|
|
||||||
//
|
//
|
||||||
// toolStripMenuItem1
|
// toolStripMenuItem1
|
||||||
//
|
//
|
||||||
@ -565,7 +564,6 @@
|
|||||||
deleteRoomToolStripMenuItem.Name = "deleteRoomToolStripMenuItem";
|
deleteRoomToolStripMenuItem.Name = "deleteRoomToolStripMenuItem";
|
||||||
deleteRoomToolStripMenuItem.Size = new Size(142, 22);
|
deleteRoomToolStripMenuItem.Size = new Size(142, 22);
|
||||||
deleteRoomToolStripMenuItem.Text = "Delete Room";
|
deleteRoomToolStripMenuItem.Text = "Delete Room";
|
||||||
deleteRoomToolStripMenuItem.Click += deleteRoomToolStripMenuItem_Click;
|
|
||||||
//
|
//
|
||||||
// lblConnectionLost
|
// lblConnectionLost
|
||||||
//
|
//
|
||||||
@ -626,9 +624,7 @@
|
|||||||
private TabControl tbcMain;
|
private TabControl tbcMain;
|
||||||
private TabPage tbpContacts;
|
private TabPage tbpContacts;
|
||||||
private TabPage tbpRooms;
|
private TabPage tbpRooms;
|
||||||
private ListBox lbRooms;
|
|
||||||
private Label lblRequestNotif;
|
private Label lblRequestNotif;
|
||||||
private ListView lvContacts;
|
|
||||||
private System.Windows.Forms.ImageList ilProfilePics;
|
private System.Windows.Forms.ImageList ilProfilePics;
|
||||||
private NotifyIcon niMain;
|
private NotifyIcon niMain;
|
||||||
private ImageList ilTabIcons;
|
private ImageList ilTabIcons;
|
||||||
@ -654,7 +650,6 @@
|
|||||||
private ToolStripMenuItem refreshToolStripMenuItem;
|
private ToolStripMenuItem refreshToolStripMenuItem;
|
||||||
private ImageList ilStatusIcons;
|
private ImageList ilStatusIcons;
|
||||||
private TabPage tbpUsers;
|
private TabPage tbpUsers;
|
||||||
private ListView lvUserDirectory;
|
|
||||||
private PictureBox pbDonate;
|
private PictureBox pbDonate;
|
||||||
private TabPage tbpStore;
|
private TabPage tbpStore;
|
||||||
private ListView lvStoreItems;
|
private ListView lvStoreItems;
|
||||||
@ -671,5 +666,8 @@
|
|||||||
private ToolStripMenuItem addRoomToolStripMenuItem;
|
private ToolStripMenuItem addRoomToolStripMenuItem;
|
||||||
private ToolStripMenuItem deleteRoomToolStripMenuItem;
|
private ToolStripMenuItem deleteRoomToolStripMenuItem;
|
||||||
private Label lblConnectionLost;
|
private Label lblConnectionLost;
|
||||||
|
private FlowLayoutPanel flpContacts;
|
||||||
|
private ListView lvUserDirectory;
|
||||||
|
private FlowLayoutPanel flpRooms;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,14 +1,16 @@
|
|||||||
using QtCNETAPI.Dtos.User;
|
using Microsoft.VisualBasic.ApplicationServices;
|
||||||
using QtCNETAPI.Services.ApiService;
|
using qtc_net_client_2.ClientModel;
|
||||||
using QtCNETAPI.Services.GatewayService;
|
using qtc_net_client_2.Controls;
|
||||||
using QtCNETAPI.Events;
|
|
||||||
using QtCNETAPI.Models;
|
|
||||||
using qtc_net_client_2.Forms;
|
using qtc_net_client_2.Forms;
|
||||||
using qtc_net_client_2.Services;
|
using qtc_net_client_2.Services;
|
||||||
using qtc_net_client_2.ClientModel;
|
using QtCNETAPI.Dtos.User;
|
||||||
using System.Threading.Tasks;
|
using QtCNETAPI.Events;
|
||||||
|
using QtCNETAPI.Models;
|
||||||
using QtCNETAPI.Schema;
|
using QtCNETAPI.Schema;
|
||||||
using QtCNETAPI.Services;
|
using QtCNETAPI.Services;
|
||||||
|
using QtCNETAPI.Services.ApiService;
|
||||||
|
using QtCNETAPI.Services.GatewayService;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace qtc_net_client_2
|
namespace qtc_net_client_2
|
||||||
{
|
{
|
||||||
@ -20,6 +22,8 @@ namespace qtc_net_client_2
|
|||||||
private Config _config;
|
private Config _config;
|
||||||
private ServerConfig _serverConfig;
|
private ServerConfig _serverConfig;
|
||||||
private AudioService AudioService = new();
|
private AudioService AudioService = new();
|
||||||
|
private ImageFactory _imgFactory = new();
|
||||||
|
private CredentialService _credService = new();
|
||||||
private LoggingService LoggingService;
|
private LoggingService LoggingService;
|
||||||
|
|
||||||
public List<Room> RoomList = [];
|
public List<Room> RoomList = [];
|
||||||
@ -39,6 +43,8 @@ namespace qtc_net_client_2
|
|||||||
|
|
||||||
private async void frmMain_Load(object sender, EventArgs e)
|
private async void frmMain_Load(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
flpContacts.Padding = new Padding(8);
|
||||||
|
|
||||||
LoggingService.LogString("Main Form Loaded");
|
LoggingService.LogString("Main Form Loaded");
|
||||||
|
|
||||||
// start request notif blink task
|
// start request notif blink task
|
||||||
@ -49,7 +55,7 @@ namespace qtc_net_client_2
|
|||||||
if (_apiService.CurrentUser == null)
|
if (_apiService.CurrentUser == null)
|
||||||
{
|
{
|
||||||
// not logged in, load the login form
|
// not logged in, load the login form
|
||||||
llblForgotPassword frmLogin = new llblForgotPassword(_apiService);
|
Login frmLogin = new Login(_apiService);
|
||||||
var result = frmLogin.ShowDialog();
|
var result = frmLogin.ShowDialog();
|
||||||
|
|
||||||
if (result == DialogResult.OK)
|
if (result == DialogResult.OK)
|
||||||
@ -60,25 +66,22 @@ namespace qtc_net_client_2
|
|||||||
private async void llblSignIn_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
private async void llblSignIn_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||||
{
|
{
|
||||||
// just reshow the login dialog lol
|
// just reshow the login dialog lol
|
||||||
llblForgotPassword frmLogin = new llblForgotPassword(_apiService);
|
Login frmLogin = new Login(_apiService);
|
||||||
var result = frmLogin.ShowDialog();
|
var result = frmLogin.ShowDialog();
|
||||||
|
|
||||||
if (result == DialogResult.OK)
|
if (result == DialogResult.OK)
|
||||||
await OnSuccessfulLogin();
|
await OnSuccessfulLogin();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void lbRooms_DoubleClick(object sender, EventArgs e)
|
private async void OnRoomDoubleClicked(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (lbRooms.SelectedItems.Count > 0)
|
RoomEntryControl? ctrl = sender as RoomEntryControl;
|
||||||
{
|
|
||||||
string? selectedRoom = (string?)lbRooms.SelectedItems[lbRooms.SelectedItems.Count - 1];
|
string? selectedRoom = ctrl?.RoomName;
|
||||||
if (selectedRoom != null)
|
if (selectedRoom != null)
|
||||||
{
|
{
|
||||||
if (selectedRoom == "Lobby")
|
if (selectedRoom == "Lobby")
|
||||||
{
|
{
|
||||||
// join lobby
|
|
||||||
if (!_gatewayService.InLobby) await _gatewayService.JoinLobbyAsync();
|
|
||||||
|
|
||||||
ChatRoom frmChat = new ChatRoom(_gatewayService, _apiService);
|
ChatRoom frmChat = new ChatRoom(_gatewayService, _apiService);
|
||||||
frmChat.Show();
|
frmChat.Show();
|
||||||
|
|
||||||
@ -90,16 +93,13 @@ namespace qtc_net_client_2
|
|||||||
Room? room = RoomList.FirstOrDefault(e => e.Name == selectedRoom);
|
Room? room = RoomList.FirstOrDefault(e => e.Name == selectedRoom);
|
||||||
if (room != null)
|
if (room != null)
|
||||||
{
|
{
|
||||||
if (_gatewayService.CurrentRoom != room) await _gatewayService.JoinRoomAsync(room);
|
ChatRoom frmChat = new ChatRoom(_gatewayService, _apiService, room);
|
||||||
|
|
||||||
ChatRoom frmChat = new ChatRoom(_gatewayService, _apiService);
|
|
||||||
frmChat.Show();
|
frmChat.Show();
|
||||||
|
|
||||||
LoggingService.LogString($"User Has Joined {room.Name}");
|
LoggingService.LogString($"User Has Joined {room.Name}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void pbUserPfp_Click(object sender, EventArgs e)
|
private void pbUserPfp_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
@ -123,15 +123,30 @@ namespace qtc_net_client_2
|
|||||||
{
|
{
|
||||||
// update profile pic in ui
|
// update profile pic in ui
|
||||||
var pfpRes = await _apiService.GetUserProfilePic(_apiService.CurrentUser.Id);
|
var pfpRes = await _apiService.GetUserProfilePic(_apiService.CurrentUser.Id);
|
||||||
|
var cosmeticRes = await GetCosmeticImage(_apiService.CurrentUser.ActiveProfileCosmetic);
|
||||||
|
|
||||||
|
// TODO - refactor this a bit
|
||||||
if (pfpRes.Success && pfpRes.Data != null)
|
if (pfpRes.Success && pfpRes.Data != null)
|
||||||
{
|
{
|
||||||
using (var ms = new MemoryStream(pfpRes.Data))
|
using var pfpMS = new MemoryStream(pfpRes.Data);
|
||||||
|
var pfp = (Bitmap)Image.FromStream(pfpMS);
|
||||||
|
|
||||||
|
if (cosmeticRes != null)
|
||||||
{
|
{
|
||||||
pbUserPfp.Image = Image.FromStream(ms);
|
using var cosmeticMS = new MemoryStream(cosmeticRes);
|
||||||
ms.Dispose();
|
var cosmetic = (Bitmap)Image.FromStream(cosmeticMS);
|
||||||
|
|
||||||
|
pbUserPfp.Image = _imgFactory.CreateProfileImage(null, pfp, cosmetic);
|
||||||
}
|
}
|
||||||
|
else pbUserPfp.Image = _imgFactory.CreateProfileImage(null, pfp, null);
|
||||||
|
}
|
||||||
|
else if (cosmeticRes != null)
|
||||||
|
{
|
||||||
|
using var cosmeticMS = new MemoryStream(cosmeticRes);
|
||||||
|
var cosmetic = (Bitmap)Image.FromStream(cosmeticMS);
|
||||||
|
|
||||||
|
pbUserPfp.Image = _imgFactory.CreateProfileImage(null, null, cosmetic);
|
||||||
}
|
}
|
||||||
else LoggingService.LogString($"User Has No Profile Picture Or It Could Not Be Loaded.\n{pfpRes.Message}");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -145,58 +160,42 @@ namespace qtc_net_client_2
|
|||||||
{
|
{
|
||||||
if (MessageBox.Show("Are You Sure You Want To Sign Out?\nThis Deletes Your session.token, Requiring You To Sign In Again", "are you sure...?", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
|
if (MessageBox.Show("Are You Sure You Want To Sign Out?\nThis Deletes Your session.token, Requiring You To Sign In Again", "are you sure...?", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
|
||||||
{
|
{
|
||||||
File.Delete("./session.token");
|
_credService.DeleteAccessToken();
|
||||||
Environment.Exit(0);
|
Environment.Exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void llblEditProfile_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
private async void llblEditProfile_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||||
{
|
{
|
||||||
ProfileEdit frmProfileEdit = new ProfileEdit(_apiService);
|
ProfileEdit frmProfileEdit = new ProfileEdit(_apiService);
|
||||||
frmProfileEdit.ShowDialog();
|
var result = frmProfileEdit.ShowDialog();
|
||||||
|
if (result == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
// update profile pic in ui
|
||||||
|
var pfpRes = await _apiService.GetUserProfilePic(_apiService.CurrentUser.Id);
|
||||||
|
var cosmeticRes = await GetCosmeticImage(_apiService.CurrentUser.ActiveProfileCosmetic);
|
||||||
|
|
||||||
|
// TODO - refactor this a bit
|
||||||
|
if (pfpRes.Success && pfpRes.Data != null)
|
||||||
|
{
|
||||||
|
using var pfpMS = new MemoryStream(pfpRes.Data);
|
||||||
|
var pfp = (Bitmap)Image.FromStream(pfpMS);
|
||||||
|
|
||||||
|
if (cosmeticRes != null)
|
||||||
|
{
|
||||||
|
using var cosmeticMS = new MemoryStream(cosmeticRes);
|
||||||
|
var cosmetic = (Bitmap)Image.FromStream(cosmeticMS);
|
||||||
|
|
||||||
|
pbUserPfp.Image = _imgFactory.CreateProfileImage(null, pfp, cosmetic);
|
||||||
}
|
}
|
||||||
|
else pbUserPfp.Image = _imgFactory.CreateProfileImage(null, pfp, null);
|
||||||
private async void lvContacts_DoubleClick(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (lvContacts.SelectedItems.Count > 0)
|
|
||||||
{
|
|
||||||
string? selectedUser = (string?)lvContacts.SelectedItems[lvContacts.SelectedItems.Count - 1].Text;
|
|
||||||
|
|
||||||
if (selectedUser != null)
|
|
||||||
{
|
|
||||||
// split from [ if it exists
|
|
||||||
if (selectedUser.Contains('[')) selectedUser = selectedUser.Split('[', options: StringSplitOptions.TrimEntries)[0];
|
|
||||||
|
|
||||||
// get user info and open profile dialog
|
|
||||||
var user = UserDirectory.FirstOrDefault(e => e.Username == selectedUser);
|
|
||||||
var res = await _apiService.GetUserInformationAsync(user!.Id);
|
|
||||||
var pfpRes = await _apiService.GetUserProfilePic(user!.Id);
|
|
||||||
|
|
||||||
// get cosmetic
|
|
||||||
byte[]? cosmeticData = null;
|
|
||||||
if (user.ProfileCosmeticId != 0)
|
|
||||||
{
|
|
||||||
var storeRes = await _apiService.GetStoreItem(user.ProfileCosmeticId);
|
|
||||||
if (storeRes != null && storeRes.Success && storeRes.Data != null)
|
|
||||||
{
|
|
||||||
using var client = new HttpClient();
|
|
||||||
using var response = await client.GetAsync(storeRes.Data.AssetUrl);
|
|
||||||
if (response.IsSuccessStatusCode)
|
|
||||||
{
|
|
||||||
cosmeticData = await response.Content.ReadAsByteArrayAsync();
|
|
||||||
}
|
}
|
||||||
else LoggingService.LogString($"Could Not Get User Cosmetic.\nStatus Code: {response.StatusCode}");
|
else if (cosmeticRes != null)
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pfpRes != null && !pfpRes.Success) LoggingService.LogString($"User Has No Profile Picture Or It Could Not Be Loaded.\n{pfpRes.Message}");
|
|
||||||
|
|
||||||
if (res.Data != null && res.Success)
|
|
||||||
{
|
{
|
||||||
LoggingService.LogString($"Opening Profile For User '{res.Data.Username}'");
|
using var cosmeticMS = new MemoryStream(cosmeticRes);
|
||||||
Profile frmProfile = new Profile(res.Data, pfpRes, Contacts, _apiService, _gatewayService, cosmeticData);
|
var cosmetic = (Bitmap)Image.FromStream(cosmeticMS);
|
||||||
frmProfile.Show();
|
|
||||||
}
|
pbUserPfp.Image = _imgFactory.CreateProfileImage(null, null, cosmetic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -315,20 +314,7 @@ namespace qtc_net_client_2
|
|||||||
|
|
||||||
// get cosmetic
|
// get cosmetic
|
||||||
byte[]? cosmeticData = null;
|
byte[]? cosmeticData = null;
|
||||||
if (user.ProfileCosmeticId != 0)
|
if (user.ProfileCosmeticId != 0) cosmeticData = await GetCosmeticImage(user.ProfileCosmeticId);
|
||||||
{
|
|
||||||
var storeRes = await _apiService.GetStoreItem(user.ProfileCosmeticId);
|
|
||||||
if (storeRes != null && storeRes.Success && storeRes.Data != null)
|
|
||||||
{
|
|
||||||
using var client = new HttpClient();
|
|
||||||
using var response = await client.GetAsync(storeRes.Data.AssetUrl);
|
|
||||||
if (response.IsSuccessStatusCode)
|
|
||||||
{
|
|
||||||
cosmeticData = await response.Content.ReadAsByteArrayAsync();
|
|
||||||
}
|
|
||||||
else LoggingService.LogString($"Could Not Get User Cosmetic.\nStatus Code: {response.StatusCode}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pfpRes != null && !pfpRes.Success) LoggingService.LogString($"User Has No Profile Picture Or It Could Not Be Loaded.\n{pfpRes.Message}");
|
if (pfpRes != null && !pfpRes.Success) LoggingService.LogString($"User Has No Profile Picture Or It Could Not Be Loaded.\n{pfpRes.Message}");
|
||||||
|
|
||||||
@ -412,7 +398,36 @@ namespace qtc_net_client_2
|
|||||||
if (item != null && item.Success && item.Data != null)
|
if (item != null && item.Success && item.Data != null)
|
||||||
{
|
{
|
||||||
StoreItemDisplay storeItemDisplay = new StoreItemDisplay(item.Data, LoggingService, _apiService);
|
StoreItemDisplay storeItemDisplay = new StoreItemDisplay(item.Data, LoggingService, _apiService);
|
||||||
storeItemDisplay.ShowDialog();
|
var result = storeItemDisplay.ShowDialog();
|
||||||
|
if (result == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
// update pfp in ui
|
||||||
|
var pfpRes = await _apiService.GetUserProfilePic(_apiService.CurrentUser.Id);
|
||||||
|
var cosmeticRes = await GetCosmeticImage(_apiService.CurrentUser.ActiveProfileCosmetic);
|
||||||
|
|
||||||
|
// TODO - refactor this a bit
|
||||||
|
if (pfpRes.Success && pfpRes.Data != null)
|
||||||
|
{
|
||||||
|
using var pfpMS = new MemoryStream(pfpRes.Data);
|
||||||
|
var pfp = (Bitmap)Image.FromStream(pfpMS);
|
||||||
|
|
||||||
|
if (cosmeticRes != null)
|
||||||
|
{
|
||||||
|
using var cosmeticMS = new MemoryStream(cosmeticRes);
|
||||||
|
var cosmetic = (Bitmap)Image.FromStream(cosmeticMS);
|
||||||
|
|
||||||
|
pbUserPfp.Image = _imgFactory.CreateProfileImage(null, pfp, cosmetic);
|
||||||
|
}
|
||||||
|
else pbUserPfp.Image = _imgFactory.CreateProfileImage(null, pfp, null);
|
||||||
|
}
|
||||||
|
else if (cosmeticRes != null)
|
||||||
|
{
|
||||||
|
using var cosmeticMS = new MemoryStream(cosmeticRes);
|
||||||
|
var cosmetic = (Bitmap)Image.FromStream(cosmeticMS);
|
||||||
|
|
||||||
|
pbUserPfp.Image = _imgFactory.CreateProfileImage(null, null, cosmetic);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -424,12 +439,13 @@ namespace qtc_net_client_2
|
|||||||
createRoom.ShowDialog();
|
createRoom.ShowDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ctxmAdminRoomList_Opening(object sender, System.ComponentModel.CancelEventArgs e)
|
// TODO - redo this
|
||||||
{
|
//private void ctxmAdminRoomList_Opening(object sender, System.ComponentModel.CancelEventArgs e)
|
||||||
if (lbRooms.SelectedItem == null)
|
//{
|
||||||
deleteRoomToolStripMenuItem.Enabled = false;
|
// if (lbRooms.SelectedItem == null)
|
||||||
else deleteRoomToolStripMenuItem.Enabled = true;
|
// deleteRoomToolStripMenuItem.Enabled = false;
|
||||||
}
|
// else deleteRoomToolStripMenuItem.Enabled = true;
|
||||||
|
//}
|
||||||
|
|
||||||
private void ctxmAdminUserList_Opening(object sender, System.ComponentModel.CancelEventArgs e)
|
private void ctxmAdminUserList_Opening(object sender, System.ComponentModel.CancelEventArgs e)
|
||||||
{
|
{
|
||||||
@ -479,35 +495,36 @@ namespace qtc_net_client_2
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void deleteRoomToolStripMenuItem_Click(object sender, EventArgs e)
|
// TODO - i have no idea on how to mark a control as selected
|
||||||
{
|
//private async void deleteRoomToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
if (lbRooms.SelectedItems.Count > 0)
|
//{
|
||||||
{
|
// if (lbRooms.SelectedItems.Count > 0)
|
||||||
string? itemSelected = (string?)lbRooms.SelectedItems[lbRooms.SelectedItems.Count - 1];
|
// {
|
||||||
if (itemSelected != null)
|
// string? itemSelected = (string?)lbRooms.SelectedItems[lbRooms.SelectedItems.Count - 1];
|
||||||
{
|
// if (itemSelected != null)
|
||||||
var dialogResult = MessageBox.Show("Are You Sure You Want To Delete This Room?\nThis will kick everyone currently in the room out.",
|
// {
|
||||||
"are you sure..?",
|
// var dialogResult = MessageBox.Show("Are You Sure You Want To Delete This Room?\nThis will kick everyone currently in the room out.",
|
||||||
MessageBoxButtons.YesNo,
|
// "are you sure..?",
|
||||||
MessageBoxIcon.Question);
|
// MessageBoxButtons.YesNo,
|
||||||
|
// MessageBoxIcon.Question);
|
||||||
|
|
||||||
if (dialogResult == DialogResult.Yes)
|
// if (dialogResult == DialogResult.Yes)
|
||||||
{
|
// {
|
||||||
// get the room
|
// // get the room
|
||||||
var room = RoomList.FirstOrDefault(e => e.Name == itemSelected);
|
// var room = RoomList.FirstOrDefault(e => e.Name == itemSelected);
|
||||||
if (room != null)
|
// if (room != null)
|
||||||
{
|
// {
|
||||||
var apiResult = await _apiService.DeleteRoomAsync(room.Id);
|
// var apiResult = await _apiService.DeleteRoomAsync(room.Id);
|
||||||
if (apiResult != null && apiResult.Success)
|
// if (apiResult != null && apiResult.Success)
|
||||||
MessageBox.Show("Deleted!");
|
// MessageBox.Show("Deleted!");
|
||||||
else
|
// else
|
||||||
MessageBox.Show("There was an error deleting the room. Try Again?", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
// MessageBox.Show("There was an error deleting the room. Try Again?", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
}
|
// }
|
||||||
else MessageBox.Show("This room is unknown. It may have already been deleted.");
|
// else MessageBox.Show("This room is unknown. It may have already been deleted.");
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
private async void deleteUserToolStripMenuItem_Click(object sender, EventArgs e)
|
private async void deleteUserToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
@ -573,9 +590,6 @@ namespace qtc_net_client_2
|
|||||||
LoggingService.LogString($"Logged In As '{_apiService.CurrentUser.Username}'");
|
LoggingService.LogString($"Logged In As '{_apiService.CurrentUser.Username}'");
|
||||||
LoggingService.LogString("Starting SignalR Connection...");
|
LoggingService.LogString("Starting SignalR Connection...");
|
||||||
|
|
||||||
// start gateway connection
|
|
||||||
await _gatewayService.StartAsync();
|
|
||||||
|
|
||||||
// subscribe to gateway events
|
// subscribe to gateway events
|
||||||
_gatewayService.OnServerReconnecting += _gatewayService_OnServerReconnecting;
|
_gatewayService.OnServerReconnecting += _gatewayService_OnServerReconnecting;
|
||||||
_gatewayService.OnServerReconnected += _gatewayService_OnServerReconnected;
|
_gatewayService.OnServerReconnected += _gatewayService_OnServerReconnected;
|
||||||
@ -589,6 +603,9 @@ namespace qtc_net_client_2
|
|||||||
|
|
||||||
_apiService.OnCurrentUserUpdate += _apiService_OnCurrentUserUpdate;
|
_apiService.OnCurrentUserUpdate += _apiService_OnCurrentUserUpdate;
|
||||||
|
|
||||||
|
// start gateway connection
|
||||||
|
await _gatewayService.StartAsync();
|
||||||
|
|
||||||
if (_gatewayService.HubConnection != null && _gatewayService.HubConnection.State == Microsoft.AspNetCore.SignalR.Client.HubConnectionState.Connected)
|
if (_gatewayService.HubConnection != null && _gatewayService.HubConnection.State == Microsoft.AspNetCore.SignalR.Client.HubConnectionState.Connected)
|
||||||
{
|
{
|
||||||
LoggingService.LogString("Connected To SignalR Succesfully.");
|
LoggingService.LogString("Connected To SignalR Succesfully.");
|
||||||
@ -605,13 +622,29 @@ namespace qtc_net_client_2
|
|||||||
tbcMain.Enabled = true;
|
tbcMain.Enabled = true;
|
||||||
|
|
||||||
var pfpRes = await _apiService.GetUserProfilePic(_apiService.CurrentUser.Id);
|
var pfpRes = await _apiService.GetUserProfilePic(_apiService.CurrentUser.Id);
|
||||||
|
var cosmeticRes = await GetCosmeticImage(_apiService.CurrentUser.ActiveProfileCosmetic);
|
||||||
|
|
||||||
|
// TODO - refactor this a bit
|
||||||
if (pfpRes.Success && pfpRes.Data != null)
|
if (pfpRes.Success && pfpRes.Data != null)
|
||||||
{
|
{
|
||||||
using (var ms = new MemoryStream(pfpRes.Data))
|
using var pfpMS = new MemoryStream(pfpRes.Data);
|
||||||
|
var pfp = (Bitmap)Image.FromStream(pfpMS);
|
||||||
|
|
||||||
|
if (cosmeticRes != null)
|
||||||
{
|
{
|
||||||
pbUserPfp.Image = Image.FromStream(ms);
|
using var cosmeticMS = new MemoryStream(cosmeticRes);
|
||||||
ms.Dispose();
|
var cosmetic = (Bitmap)Image.FromStream(cosmeticMS);
|
||||||
|
|
||||||
|
pbUserPfp.Image = _imgFactory.CreateProfileImage(null, pfp, cosmetic);
|
||||||
}
|
}
|
||||||
|
else pbUserPfp.Image = _imgFactory.CreateProfileImage(null, pfp, null);
|
||||||
|
}
|
||||||
|
else if (cosmeticRes != null)
|
||||||
|
{
|
||||||
|
using var cosmeticMS = new MemoryStream(cosmeticRes);
|
||||||
|
var cosmetic = (Bitmap)Image.FromStream(cosmeticMS);
|
||||||
|
|
||||||
|
pbUserPfp.Image = _imgFactory.CreateProfileImage(null, null, cosmetic);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lvUserDirectory.Items.Count <= 0)
|
if (lvUserDirectory.Items.Count <= 0)
|
||||||
@ -661,7 +694,7 @@ namespace qtc_net_client_2
|
|||||||
{
|
{
|
||||||
LoggingService.LogString("Current User Is An Admin. Using Admin Context Menu Strips...");
|
LoggingService.LogString("Current User Is An Admin. Using Admin Context Menu Strips...");
|
||||||
lvUserDirectory.ContextMenuStrip = ctxmAdminUserList;
|
lvUserDirectory.ContextMenuStrip = ctxmAdminUserList;
|
||||||
lbRooms.ContextMenuStrip = ctxmAdminRoomList;
|
flpRooms.ContextMenuStrip = ctxmAdminRoomList;
|
||||||
}
|
}
|
||||||
|
|
||||||
LoggingService.LogString("Client Ready");
|
LoggingService.LogString("Client Ready");
|
||||||
@ -708,21 +741,45 @@ namespace qtc_net_client_2
|
|||||||
{
|
{
|
||||||
await Invoke(async delegate ()
|
await Invoke(async delegate ()
|
||||||
{
|
{
|
||||||
lbRooms.Items.Clear();
|
flpRooms.Controls.Clear();
|
||||||
|
|
||||||
|
// always add lobby room to rooms list
|
||||||
|
var lobbyCtrl = new RoomEntryControl
|
||||||
|
{
|
||||||
|
RoomName = "Lobby",
|
||||||
|
HideUserCount = true,
|
||||||
|
BackColor = flpRooms.BackColor
|
||||||
|
};
|
||||||
|
|
||||||
|
lobbyCtrl.Margin = new Padding(0, 4, 0, 4);
|
||||||
|
lobbyCtrl.Width = flpRooms.ClientSize.Width - flpRooms.Padding.Horizontal;
|
||||||
|
lobbyCtrl.OnRoomDoubleClicked += OnRoomDoubleClicked;
|
||||||
|
|
||||||
|
flpRooms.Controls.Add(lobbyCtrl);
|
||||||
|
|
||||||
var roomsRes = await _apiService.GetAllRoomsAsync();
|
var roomsRes = await _apiService.GetAllRoomsAsync();
|
||||||
if (roomsRes.Success && roomsRes.Data != null)
|
if (roomsRes.Success && roomsRes.Data != null)
|
||||||
{
|
{
|
||||||
foreach (var room in roomsRes.Data)
|
foreach (var room in roomsRes.Data)
|
||||||
{
|
{
|
||||||
lbRooms.Items.Add(room.Name);
|
// create room entry
|
||||||
|
var ctrl = new RoomEntryControl
|
||||||
|
{
|
||||||
|
RoomName = room.Name,
|
||||||
|
RoomUserCount = room.UserCount, // placeholder
|
||||||
|
BackColor = flpRooms.BackColor
|
||||||
|
};
|
||||||
|
|
||||||
|
ctrl.Margin = new Padding(0, 4, 0, 4);
|
||||||
|
ctrl.Width = flpRooms.ClientSize.Width - flpRooms.Padding.Horizontal;
|
||||||
|
ctrl.OnRoomDoubleClicked += OnRoomDoubleClicked;
|
||||||
|
|
||||||
|
flpRooms.Controls.Add(ctrl);
|
||||||
}
|
}
|
||||||
RoomList = roomsRes.Data;
|
RoomList = roomsRes.Data;
|
||||||
if (System.Diagnostics.Debugger.IsAttached || _config.EnableDebugLogs)
|
if (System.Diagnostics.Debugger.IsAttached || _config.EnableDebugLogs)
|
||||||
LoggingService.LogModel(roomsRes.Data);
|
LoggingService.LogModel(roomsRes.Data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// always add lobby room to rooms list
|
|
||||||
lbRooms.Items.Add("Lobby");
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -735,8 +792,8 @@ namespace qtc_net_client_2
|
|||||||
{
|
{
|
||||||
await Invoke(async delegate ()
|
await Invoke(async delegate ()
|
||||||
{
|
{
|
||||||
lvContacts.Items.Clear();
|
|
||||||
Contacts.Clear();
|
Contacts.Clear();
|
||||||
|
flpContacts.Controls.Clear();
|
||||||
lblRequestNotif.Visible = false;
|
lblRequestNotif.Visible = false;
|
||||||
var contactsRes = await _apiService.GetCurrentUserContacts();
|
var contactsRes = await _apiService.GetCurrentUserContacts();
|
||||||
if (contactsRes.Success && contactsRes.Data != null)
|
if (contactsRes.Success && contactsRes.Data != null)
|
||||||
@ -754,26 +811,41 @@ namespace qtc_net_client_2
|
|||||||
else if (contact.UserId == _apiService.CurrentUser!.Id)
|
else if (contact.UserId == _apiService.CurrentUser!.Id)
|
||||||
user = await _apiService.GetUserInformationAsync(contact.OwnerId);
|
user = await _apiService.GetUserInformationAsync(contact.OwnerId);
|
||||||
|
|
||||||
|
var ctrl = new ContactEntryControl();
|
||||||
|
|
||||||
if (user.Data != null)
|
if (user.Data != null)
|
||||||
{
|
{
|
||||||
Contacts.Add(contact);
|
Contacts.Add(contact);
|
||||||
|
|
||||||
|
switch(user.Data.Status)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
ctrl.StatusColor = Color.Gray;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
ctrl.StatusColor = Color.LightGreen;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ctrl.StatusColor = Color.Gold;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
ctrl.StatusColor = Color.Red;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (contact.OwnerId == _apiService.CurrentUser!.Id)
|
if (contact.OwnerId == _apiService.CurrentUser!.Id)
|
||||||
{
|
{
|
||||||
switch (contact.OwnerStatus)
|
switch (contact.OwnerStatus)
|
||||||
{
|
{
|
||||||
case Contact.ContactStatus.AwaitingApprovalFromOther:
|
case Contact.ContactStatus.AwaitingApprovalFromOther:
|
||||||
var lvi = lvContacts.Items.Add($"{user.Data.Username} [Request Sent]");
|
ctrl.Username = $"{user.Data.Username} [Request Sent]";
|
||||||
await AddProfilePicToList(user.Data.Id);
|
await AddProfilePicToList(user.Data.Id);
|
||||||
if (ilProfilePics.Images.ContainsKey(user.Data.Id))
|
ctrl.Avatar = ilProfilePics.Images[user.Data.Id] ?? ilProfilePics.Images[0];
|
||||||
lvi.ImageKey = user.Data.Id;
|
|
||||||
else lvi.ImageKey = "DEFAULT";
|
|
||||||
break;
|
break;
|
||||||
case Contact.ContactStatus.Accepted:
|
case Contact.ContactStatus.Accepted:
|
||||||
var lvi2 = lvContacts.Items.Add($"{user.Data.Username}");
|
ctrl.Username = user.Data.Username;
|
||||||
await AddProfilePicToList(user.Data.Id);
|
await AddProfilePicToList(user.Data.Id);
|
||||||
if (ilProfilePics.Images.ContainsKey(user.Data.Id))
|
ctrl.Avatar = ilProfilePics.Images[user.Data.Id] ?? ilProfilePics.Images[0];
|
||||||
lvi2.ImageKey = user.Data.Id;
|
|
||||||
else lvi2.ImageKey = "DEFAULT";
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -782,22 +854,24 @@ namespace qtc_net_client_2
|
|||||||
switch (contact.UserStatus)
|
switch (contact.UserStatus)
|
||||||
{
|
{
|
||||||
case Contact.ContactStatus.AwaitingApprovalFromSelf:
|
case Contact.ContactStatus.AwaitingApprovalFromSelf:
|
||||||
var lvi = lvContacts.Items.Add($"{user.Data.Username} [Contact Request]");
|
ctrl.Username = $"{user.Data.Username} [Contact Request]";
|
||||||
await AddProfilePicToList(user.Data.Id);
|
await AddProfilePicToList(user.Data.Id);
|
||||||
if (ilProfilePics.Images.ContainsKey(user.Data.Id))
|
ctrl.Avatar = ilProfilePics.Images[user.Data.Id] ?? ilProfilePics.Images[0];
|
||||||
lvi.ImageKey = user.Data.Id;
|
|
||||||
else lvi.ImageKey = "DEFAULT";
|
|
||||||
AudioService.PlaySoundEffect("sndContactRequest");
|
AudioService.PlaySoundEffect("sndContactRequest");
|
||||||
break;
|
break;
|
||||||
case Contact.ContactStatus.Accepted:
|
case Contact.ContactStatus.Accepted:
|
||||||
var lvi2 = lvContacts.Items.Add($"{user.Data.Username}");
|
ctrl.Username = user.Data.Username;
|
||||||
await AddProfilePicToList(user.Data.Id);
|
await AddProfilePicToList(user.Data.Id);
|
||||||
if (ilProfilePics.Images.ContainsKey(user.Data.Id))
|
ctrl.Avatar = ilProfilePics.Images[user.Data.Id] ?? ilProfilePics.Images[0];
|
||||||
lvi2.ImageKey = user.Data.Id;
|
|
||||||
else lvi2.ImageKey = "DEFAULT";
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// add the control to the flow panel
|
||||||
|
ctrl.Margin = new Padding(0, 4, 0, 4);
|
||||||
|
ctrl.Width = flpContacts.ClientSize.Width - flpContacts.Padding.Horizontal;
|
||||||
|
ctrl.ContactDoubleClicked += Ctrl_ContactDoubleClicked;
|
||||||
|
flpContacts.Controls.Add(ctrl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -808,6 +882,50 @@ namespace qtc_net_client_2
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async void Ctrl_ContactDoubleClicked(object? sender, EventArgs e)
|
||||||
|
{
|
||||||
|
var ctrl = sender as ContactEntryControl;
|
||||||
|
|
||||||
|
string? selectedUser = ctrl?.Username;
|
||||||
|
|
||||||
|
if (selectedUser != null)
|
||||||
|
{
|
||||||
|
// split from [ if it exists
|
||||||
|
if (selectedUser.Contains('[')) selectedUser = selectedUser.Split('[', options: StringSplitOptions.TrimEntries)[0];
|
||||||
|
|
||||||
|
// get user info and open profile dialog
|
||||||
|
var user = UserDirectory.FirstOrDefault(e => e.Username == selectedUser);
|
||||||
|
var res = await _apiService.GetUserInformationAsync(user!.Id);
|
||||||
|
var pfpRes = await _apiService.GetUserProfilePic(user!.Id);
|
||||||
|
|
||||||
|
// get cosmetic
|
||||||
|
byte[]? cosmeticData = null;
|
||||||
|
if (user.ProfileCosmeticId != 0)
|
||||||
|
{
|
||||||
|
var storeRes = await _apiService.GetStoreItem(user.ProfileCosmeticId);
|
||||||
|
if (storeRes != null && storeRes.Success && storeRes.Data != null)
|
||||||
|
{
|
||||||
|
using var client = new HttpClient();
|
||||||
|
using var response = await client.GetAsync(storeRes.Data.AssetUrl);
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
cosmeticData = await response.Content.ReadAsByteArrayAsync();
|
||||||
|
}
|
||||||
|
else LoggingService.LogString($"Could Not Get User Cosmetic.\nStatus Code: {response.StatusCode}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pfpRes != null && !pfpRes.Success) LoggingService.LogString($"User Has No Profile Picture Or It Could Not Be Loaded.\n{pfpRes.Message}");
|
||||||
|
|
||||||
|
if (res.Data != null && res.Success)
|
||||||
|
{
|
||||||
|
LoggingService.LogString($"Opening Profile For User '{res.Data.Username}'");
|
||||||
|
Profile frmProfile = new Profile(res.Data, pfpRes, Contacts, _apiService, _gatewayService, cosmeticData);
|
||||||
|
frmProfile.Show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private async Task StartRequestNotifBlankLoop(Label label)
|
private async Task StartRequestNotifBlankLoop(Label label)
|
||||||
{
|
{
|
||||||
while (true)
|
while (true)
|
||||||
@ -862,6 +980,25 @@ namespace qtc_net_client_2
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task<byte[]?> GetCosmeticImage(int profileCosmeticId)
|
||||||
|
{
|
||||||
|
if (profileCosmeticId <= 0) return null;
|
||||||
|
|
||||||
|
var storeRes = await _apiService.GetStoreItem(profileCosmeticId);
|
||||||
|
if (storeRes != null && storeRes.Success && storeRes.Data != null)
|
||||||
|
{
|
||||||
|
using var client = new HttpClient();
|
||||||
|
using var response = await client.GetAsync(storeRes.Data.AssetUrl);
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
return await response.Content.ReadAsByteArrayAsync();
|
||||||
|
}
|
||||||
|
else LoggingService.LogString($"Could Not Get User Cosmetic.\nStatus Code: {response.StatusCode}");
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public void RefreshCurrencyCounter()
|
public void RefreshCurrencyCounter()
|
||||||
{
|
{
|
||||||
if (IsHandleCreated && !IsDisposed)
|
if (IsHandleCreated && !IsDisposed)
|
||||||
@ -996,7 +1133,7 @@ namespace qtc_net_client_2
|
|||||||
if (existingForm != null && existingForm.User.Id == args.User.Id)
|
if (existingForm != null && existingForm.User.Id == args.User.Id)
|
||||||
{
|
{
|
||||||
// we want to just add to its text box
|
// we want to just add to its text box
|
||||||
existingForm.Messages.Add($"[{args.User.Username}] {args.Message.Content}\n");
|
existingForm.Messages.Add($"{args.User.Username}: {args.Message.Content}");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -120,73 +120,94 @@
|
|||||||
<metadata name="ctxmRefresh.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="ctxmRefresh.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>356, 21</value>
|
<value>356, 21</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<metadata name="ilProfilePics.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="ilTabIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>17, 17</value>
|
<value>20, 44</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<data name="ilProfilePics.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
<data name="ilTabIcons.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
<value>
|
<value>
|
||||||
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
|
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
|
||||||
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
|
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
|
||||||
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA0A0AAAJNU0Z0AUkBTAMBAQAB
|
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAshIAAAJNU0Z0AUkBTAIBAQQB
|
||||||
mAEBAZgBAQEgAQABIAEABP8BIQEACP8BQgFNATYHAAE2AwABKAMAAYADAAEgAwABAQEAASAGAAFAEgAD
|
AAGoAQMBqAEDARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASD/
|
||||||
rQH/A7oB/wO6Af8DuQH/A7oB/wO6Af8D2gX/A/wB/wP+Df8D/QH/A/wR/wP8Af8D/g3/A/0B/wPZAf8D
|
AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/ACIAA2cB7wJnAVkB7wFnAV0BWQHvAWcBWwFZAe8B
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af//AIEAA58B/wO6Af8DugH/A7oB/wO6Af8DugH/A9oJ/wP9Af8D
|
ZwFbAVkB7wFnAlkB7wFnAWQBWQHvA2cB7wNnAe8DZwHvA2cB7wNnAe8DZwHvA2cB7wNnAe8DZwHvAwcB
|
||||||
/g3/A/0B/wP9Ef8D/AH/A/4N/wPaAf8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af//AIEAA6IB/wO6Af8D
|
CQMqAT8DRQF8A1kBuwNjAd8DaAH0A4AB/gOBAf8DgQH/A4EB/wOAAf4DaAH0A2MB3wNaAboDRAF6AycB
|
||||||
ugH/A7oB/wO6Af8DugH/A9oN/wP8Af8D/iX/A/wN/wPaAf8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af//
|
OjgAAzMBUQNuAfUIAAM3AVoDWAG4A2MB3wJjAV0B3wFiAl0B3wNdAd8DXQHfAWECXQHfA2MB3wNjAd8D
|
||||||
AIEAA6UB/wO6Af8DugH/A7oB/wO6Af8DugH/A9kR/wP+Ff8D/R3/A9oB/wO6Af8DugH/A7oB/wO6Af8D
|
VQGsAzABSwgAA/gB/wG5AZUBPAH/AYMBfQFuAf8BhAF9AWwB/wGqAYQBJwH/AawBewEAAf8BzAG8AZQB
|
||||||
ugH/A7oB//8AgQADpAH/A7kB/wO6Af8DugH/A7oB/wO6Af8D2QH/A/wV/wP+Df8D/QH/A/0R/wP+Af8D
|
/wN+Af8DfgH/A34B/wN+Af8DfgH/A34B/wN+Af8DfgH/A44B/wNDAXUDXQHMA3wB+AOBAf8DgQH/A4EB
|
||||||
/gH/A9oB/wO6Af8DugH/A7kB/wO6Af8DugH/A7oB//8AgQADoQH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A3wB+ANUAag4AAMSARgDPwFtBAADOwFiA10B
|
||||||
2gH/A/4B/wP9Ef8D/AH/A/4N/wP9Af8D/RH/A/wB/wPZAf8DugH/A7oB/wO6Af8DuQH/A7oB/wO6Af//
|
xQNoAfQBnwFlATEB/wGXAVMBFwH/AZYBSwEJAf8BkwFGAQEB/wGMAUMBAwH/AX0BQAELAf8BawFAARoB
|
||||||
AIEAA58B/wO6Af8DugH/A7oB/wO6Af8DugH/A9oF/wP9Af8D/RH/A/0B/wP+Df8D/QH/A/0R/wPZAf8D
|
/wFuAVABNgH/A2gB8ANaAbcDNAFUBAAE/wGXAYsBbQH/AoEBgAH/AYIBgQGAAf8BmAGIAWAB/wHKAZAB
|
||||||
ugH/A7oB/wO6Af8DugH/A7kB/wO6Af//AIEAA7EB/wO6Af8DugH/A7oB/wO6Af8DugH/A9MJ/wP+Ff8D
|
AAH/Ad0BzAGfAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOTAf8DagHtA30B+gOBAf8D
|
||||||
/AH/A/4h/wPTAf8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af//AIEAA7oB/wO6Af8DugH/A7oB/wO6Af8D
|
gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvNAADXwHTAz0B
|
||||||
uQH/A8AB/wP9Df8D/hH/A/4V/wP9Bf8D/QH/A8AB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQAD
|
ZwQAAzUBVQNdAccCbgFaAfUBuAFlARsB/wG5AVgBAgH/AckBXwEAAf8B2AFlAQAB/wHcAWcBAAH/AdYB
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A9oN/wP+Af8D/RX/A/4N/wP9Af8D/AH/A9oB/wO6Af8D
|
ZAEAAf8BwwFcAQAB/wGiAUwBAAH/AXwBOwEDAf8BbgFGASMB/wNoAfADWgG3AzABSgT/AYYBhAF9Af8D
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af//AIEAA7oB/wO5Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
gQH/A4EB/wGHAYMBegH/Ac8BlAEAAf8B3gHMAZ8B/wPgAf8D4AH/A+AB/wPgAf8D4AH/A+AB/wPgAf8D
|
||||||
3Q3/A/0B/wP9Ef8D/QH/A/4N/wPcAf8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQAD
|
4AH/A7wB/wNjAd8DbgH1A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
|
||||||
ugH/A7oB/wO5Af8DuQH/A7oB/wO6Af8DugH/A7oB/wO5Af8DyQH/A+wB/wP+Bf8D/gH/A/wR/wP9Af8D
|
gQH/A4EB/wNVAa80AANaAcIDNAFTBAADXAHEAnwBXAH4AdQBcQEYAf8B1wFlAQAB/wHlAWwBAAH/AfIB
|
||||||
/QH/A+wB/wPKAf8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af//AIEAA7oB/wO6Af8D
|
cgEAAf8B+gF1AQAB/wH8AXYBAAH/AfoBdgEAAf8B8wFyAQAB/wHiAWsBAAH/Ab0BWQEAAf8BhwFAAQAB
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7kB/wO6Af8DwQH/A9IB/wPfAf8D5gH/A+oB/wPrAf8D
|
/wFxAUgBIwH/A2gB8ANWAasE/wGLAYYBegH/A4EB/wOBAf8BjgGGAXEB/wHPAZQBAAH/Ad4BzAGfIf8D
|
||||||
5wH/A98B/wPSAf8DwAH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af//
|
ygH/AzYBWANbAcADbgH1A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
|
||||||
AIEAA7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
aAH0A1IBpBAAAw0BEQM/AWwDUwGnAVwCWQG+AVgCVgGzAUgCRwGDAyEBMAQAA28B8wM6AWAIAAH+Ad0B
|
||||||
vQH/A8cB/wPGAf8DvQH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
wQH/Ae0BgAEgAf8B7QFxAQIB/wHzAXMBAAH/AfoBdgEAAf8B/gF4AQAC/wF7AQgC/wGIAScC/wGiAVMB
|
||||||
ugH/A7oB/wO6Af//AIEAA7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
/wH+AYEBFwH/AfwBeAEEAf8B7AFvAQAB/wHBAVsBAAH/AYYBQQEDAf8BeAFWATYB/wNjAd8E/wGsAZYB
|
||||||
ugH/A8IB/wPnAf8D/QX/A/4B/wP6Af8D5gH/A8IB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
YAH/AYMBggF/Af8BhQGCAX0B/wGzAZMBRAH/Ac8BlAEAAf8B3gHMAZ8B/wOwAf8DsAH/A7AB/wOwAf8D
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
sAH/A7AB/wOwAf8DsAH/A6gB/wMCAQMDGgEjAzgBXANUAagDYgHXA3AB8QOAAf4DgQH/A4EB/wOBAf8D
|
||||||
ugH/A7oB/wPIAf8D+QH/A/0N/wP9Af8D/QH/A/oB/wPIAf8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
gQH9A2gB8ANhAdQDUwGlAzYBWQMYASAIAAMaASQDUgGgAmMBSAH2AaIBcwEAAf8BrgF8AQAB/wGwAX0B
|
||||||
ugH/A7oB/wO5Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
AAH/AagBeAEAAf8BlQFqAQAB/wKAAXUB/gFcAlkBxgNXAbUDFgEeCAAB/wGyAW8B/wH9AYABEQH/AfwB
|
||||||
ugH/A74B/wP4Bf8D/AH/A/4N/wP9Af8D/AH/A/gB/wO+Af8DugH/A7oB/wO6Af8DuQH/A7oB/wO6Af8D
|
dwEBAf8B/QF3AQAC/wF4AQAC/wF/AQ8C/wGSATsC/wGzAYMC/wHqAeAC/wGQAT0C/wF7AQoB/wH8AXcB
|
||||||
ugH/A7oB/wO5Af8DugH//wCBAAO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7kB/wO6Af8D
|
AAH/AeUBbAEAAf8BsQFUAQAB/wGEAUsBGgH/A2MB3wT/AdkBqgE3Af8BvgGYATgB/wHAAZgBNgH/AdwB
|
||||||
2w3/A/0B/wP9Df8D/QH/A/4B/wPbAf8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
ogEUAf8BzwGUAQAB/wHeAcwBnwH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DkwH/RAAD
|
||||||
ugH//wCBAAO6Af8DugH/A7oB/wO6Af8DugH/A7kB/wO6Af8DugH/A7oB/wO6Af8D8BH/A/wB/wP+Ef8D
|
IAEtAmMBWgHpAb8BiAEAAf8BzQGVAQoB/wGwAYgBJwH/AXMBZAE/Af8BTQFLAUcB/wFOAUsBQgH/AWYB
|
||||||
8AH/A7oB/wO6Af8DugH/A7oB/wO5Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8D
|
VwExAf8BmgF0ARcB/wGkAXYBAwH/AXABTwEAAf8DQwF2BAEEAAH/AZoBQgL/AYMBFQH/Af4BegEEAv8B
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A/gB/wP9Jf8D+AH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
eAEAAv8BeAEAAv8BlQE/Av8BygGuAv8B2gHGAv8B7QHlAv8BlgFJAv8BfAENAf8B/gF4AQAB/wH0AXMB
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
AAH/AdABYgEAAf8BmgFOAQoB/wFjAl0B3wT/AeEBrgExAf8BvQGXATsB/wHAAZgBNQH/AeMBpQEKAf8B
|
||||||
ugH/A/QB/wP9Af8D/BH/A/4B/wP+Cf8D9QH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
zwGUAQAB/wHeAcwBnwH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DrwH/CAADAgEDAwgB
|
||||||
ugH/A7oB//8AgQADugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A+UF/wP+Af8D
|
CgMhAS8DMQFOAz0BaANDAXYDRAF6A0MBdQM9AWcDMQFNAyABLgMHAQkEAggAAmMBWgHpAdkBmgEAAf8B
|
||||||
/BH/A/wB/wP9Bf8D5QH/A7oB/wO5Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQAD
|
2gGjARwB/wKOAYwB/wOKAf8DlwH/A5sB/wORAf8DdAH/A0gB/wFDAUIBPwH/AbUBgwEHAf8BegFXAQAB
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DuQH/A8gB/wP+Bf8D/gH/A/wR/wP9Af8D
|
/wM2AVgEAAH/AZUBNwL/AYkBHwL/AX0BCAL/AXgBAAL/AXgBAAL/AagBXAL/AeABzQL/AaEBZgL/AdgB
|
||||||
/QH/A8gB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7kB/wO6Af//AIEAA7oB/wO6Af8D
|
xQL/AbkBlAL/AYcBIwL/AXgBAAH/AfsBdgEAAf8B4gFqAQAB/wGvAVQBAwH/AWMCXQHfBP8BuwGdAVMB
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D3Qn/A/4V/wPcAf8DugH/A7oB/wO6Af8D
|
/wGIAYQBeQH/AYwBhQF0Af8BxAGZATAB/wHPAZQBAAH/Ad4BzAGfIf8DygH/BAADEwEaAzkBXQNZAbwD
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
ZAHbA2oB7QNjAfYDXwH7A4EB/QNfAfsDYwH2A2UB7ANjAdoDWgG6AzgBXAMTARoDQwF2AekBpwECAf8B
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D2QH/A/wJ/wP+Bf8D/AH/A9kB/wO6Af8DugH/A7oB/wO6Af8D
|
6QGrARIB/wHQAcoBuwH/A6wB/wNdAf8DTAH/A0sB/wNEAf8DDwH/A7MB/wNmAf8BVAFMAToB/wGuAX0B
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
BAH/A10BzAQAAf8BoAFJAv8BkgExAv8BgQERAv8BeQEDAv8BeAEAAv8BqAFcAv8B4AHNAv8BoQFmAv8B
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A8AB/wPWAf8D4gH/A+EB/wPVAf8DwAH/A7oB/wO6Af8D
|
2AHFAv8BwAGfAv8BiQEnAv8BeAEAAf8B/gF4AQAB/wHsAW8BAAH/Ab8BWgECAf8BYwJdAd8E/wGUAYoB
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8D
|
cwH/A4EB/wOBAf8BmgGKAWMB/wHPAZQBAAH/Ad4BzAGfAf8D0AH/A9AB/wPQAf8D0AH/A9AB/wPQAf8D
|
||||||
ugH/A7oB/wO6Af8DugH/A7kB/wO6Af8DugH/A7oB/wO6Af8DugH/A7kB/wO6Af8DugH/A7oB/wO6Af8D
|
0AH/A9AB/wO1Af8DGgEkA1YBrgNoAfQDgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQAD
|
gQH/A4EB/wNrAfIDUgGhAmoBYQHmAe0BrQEQAf8B9AHQAXYB/wP6Af8D+gH/A30B/wN/Af8DgAH/A4AB
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO5Af8D
|
/wN+Af8DhAH/A7sB/wNqAf8BqAGAARwB/wJjAUgB9gQAAf8BswFvAv8BngFIAv8BiAEeAv8BfAEHAv8B
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO5Af8D
|
eAEAAv8BmAFDAv8BzgG0Av8B1wHAAv8B6gHgAv8BnQFXAv8BfgERAv8BeAEAAv8BeAEAAf8B8AFxAQAB
|
||||||
uQH/A7oB//8AgQADugH/A7oB/wO6Af8DuQH/A7oB/wO6Af8DugH/A7oB/wO5Af8DugH/A7oB/wO6Af8D
|
/wHLAWQBCQH/AWMBYQFdAd8E/wGGAYMBfgH/A4EB/wOBAf8BhgGDAXsB/wHPAZQBAAH/Ad4BzAGfAf8D
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO5Af8D
|
gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOTAf8DVwGyA2UB5wOBAf8DgQH/A4EB/wOBAf8D
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8DugH/A7kB/wO6Af8DugH/A7oB/wO6Af8D
|
gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvA2IB7gHvAbQBIQH/AfcB3AGXCf8D
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DuQH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
kQH/A4gB/wOHAf8DhwH/A4EB/wNXAf8D5gH/A6MB/wG2AZEBNgH/AmoBQQH5BAAB/wHMAZ8C/wGsAWMC
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
/wGTATMC/wGBAREC/wF5AQIC/wGCARYC/wGaAUsC/wGuAXgC/wGlAVcC/wGBARcC/wF5AQQC/wF4AQAC
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
/wF4AQAB/wHwAXEBAAH/AdUBcQEXAf8CYwFdAd8E/wGLAYYBeQH/A4EB/wOBAf8BjgGGAXEB/wHPAZQB
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8D
|
AAH/Ad4BzAGfAf8DoQH/A6EB/wOhAf8DoQH/A6EB/wOhAf8DoQH/A6EB/wOhAf8DbwHzA18B+wOBAf8D
|
||||||
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvA0sBjQHwAb4B
|
||||||
ugH/A7oB/wO6Af8DugH/A7kB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQAB
|
PwH/AfQBzQFsIf8D+wH/A9AB/wHXAacBMQH/AmEBXQHRBAAB/wHpAdUC/wG8AYEC/wGkAVQC/wGOASoC
|
||||||
QgFNAT4HAAE+AwABKAMAAYADAAEgAwABAQEAAQEGAAECFgAD//8A/wADAAs=
|
/wF/AQ0C/wF5AQIC/wF7AQkC/wGCAR0C/wF4AQAC/wF4AQAC/wF4AQEC/wF6AQQC/wF6AQMB/wHzAXQB
|
||||||
|
AwH/AeIBhAEyAf8DYwHfBP8BpwGUAWcB/wGDAYIBfwH/AYUBgwF+Af8BsAGUAU4B/wHTAZcBAgH/AeAB
|
||||||
|
zgGfAf8D5wH/A+cB/wPnAf8D5wH/A+cB/wPnAf8D5wH/A+cB/wPAAf8DZAHbA2gB9AOBAf8DgQH/A4EB
|
||||||
|
/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvAwcBCQNiAe4B8QG8ATsB
|
||||||
|
/wH6AeoBwgH/A9wB/wN3Af8DaAH/A2gB/wNoAf8DMgn/AfIB3QGpAf8B6gGpAQgB/wM+AWoEAANeAdID
|
||||||
|
agH5Af8BuwF9Av8BowFSAv8BkAEsAv8BggETAv8BfQEIAv8BegEEAv8BeQECAv8BegEEAv8BfQEJAv8B
|
||||||
|
gAEPAv8BfwENAf8B+AGGASAB/wNoAfQDWAG4BP8B1wGxAVIB/wGaAY8BdAH/AaABkgFtAf8B4AGvATcB
|
||||||
|
/wHnAakBEAH/AesB1QGgAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOTAf8DPAFkA18B
|
||||||
|
yQN9AfoDgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wN9AfoDVQGqBAAD
|
||||||
|
MwFRA2gB8AHzAcYBWAH/AfoB5wG4Fv8B/gH7Af8B+QHiAaoB/wHvAbgBLQH/A04BlgQCBAADPAFmA2MB
|
||||||
|
1QN8AfgB/wG+AYUC/wGqAV8C/wGZAT4C/wGNAScC/wGGARoC/wGDARUC/wGFARkC/wGKASIC/wGNASgC
|
||||||
|
/wGTATMB/wJuAWgB9QNdAcUDNgFZBP8B9AHNAWwB/wH0AcsBZgH/AfQBywFlAf8B9AHLAWUB/wHxAcEB
|
||||||
|
SQH/AfkB4wGsAf8DiQH/A4kB/wOJAf8DiQH/A4kB/wOJAf8DiQH/A4kB/wOaAf8DBgEIAzEBTANQAZsD
|
||||||
|
ZQHsA30B+gOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DfQH6A2oB7QNQAZsDLwFJCAADIgExA18B
|
||||||
|
yQJ9AWcB+gHzAcoBZQH/AfkB4QGmAf8B+wHtAcwB/wH7AewByAH/AfgB3QGbAf8DgAH+AmUBXgHiAz0B
|
||||||
|
aAQBDAADQgFyA2MB1QNqAfkB/wHJAZkC/wG8AX8C/wGuAWYC/wGkAVMC/wGfAUoC/wGfAUsC/wGjAVEC
|
||||||
|
/wGnAVgB/wN8AfgDXQHHAzsBYgQAQP8IAAMFAQYDEgEXAzoBYANRAZ8DXwHTA2cB7wNjAfYDYgHuA14B
|
||||||
|
0gNRAZ4DOQFfAxEBFgMFAQYUAAMPARMDRwGCA2QB2wJ+AW8B/ANnAeoDVAGoAygBOxwAAzwBZQNeAdIB
|
||||||
|
/wHvAeAC/wHcAbwC/wHNAZ8C/wHBAYoC/wG7AX8C/wG/AYYC/wHNAaEC/wHpAdYB/wNcAcQDNQFVCAAB
|
||||||
|
QgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/4UAAf8B/AHAAQMEAAH/AfwBgAEBBAAB
|
||||||
|
/wH5BgAB/wH5BgAB8AETBgABwAEDBAAC/wGAAQEEAAHAAQEBgAEBBAABgAIAAQEHAAEBBwABAQcAAQEH
|
||||||
|
AAEBBgABgAEBBgABwAEDAYABAQIAAcABAQHwAR8BwAEDCw==
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="ilStatusIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="ilStatusIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
@ -196,31 +217,31 @@
|
|||||||
<value>
|
<value>
|
||||||
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
|
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
|
||||||
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
|
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
|
||||||
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAohMAAAJNU0Z0AUkBTAIBAQQB
|
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAihMAAAJNU0Z0AUkBTAIBAQQB
|
||||||
AAFQAQEBUAEBARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASD/
|
AAHoAQEB6AEBARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASD/
|
||||||
AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AC4AAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B
|
AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AC4AAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B
|
||||||
0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYB
|
0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYB
|
||||||
BwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekD
|
BwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekD
|
||||||
YAHoA10B0QNQAZ8DMQFNAwUBBhQAAyABLQNUAasDWwHkA1oB9QMkAfsDTgH+A04B/gMkAfsDUwH0A2IB
|
YAHoA10B0QNQAZ8DMQFNAwUBBhQAAyABLQNUAasDWwHkA1oB9QMkAfsDYQH+A2EB/gMkAfsDUwH0A2IB
|
||||||
4QNRAaEDHgEqEAADIAEtA1QBqwNbAeQDWgH1ASEBXgEhAfsBKgFqASoB/gEqAWoBKgH+ASEBXgEhAfsD
|
4QNRAaEDHgEqEAADIAEtA1QBqwNbAeQDWgH1ASEBXgEhAfsBPQF9AT0B/gE9AX0BPQH+ASEBXgEhAfsD
|
||||||
UwH0A2IB4QNRAaEDHgEqEAADIAEtA1QBqwNbAeQDWgH1ASECXgH7ASoCagH+ASoCagH+ASECXgH7A1MB
|
UwH0A2IB4QNRAaEDHgEqEAADIAEtA1QBqwNbAeQDWgH1ASECXgH7AT0CfQH+AT0CfQH+ASECXgH7A1MB
|
||||||
9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkA1oB9QIhAV4B+wIqAWoB/gIqAWoB/gIhAV4B+wNTAfQD
|
9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkA1oB9QIhAV4B+wI9AX0B/gI9AX0B/gIhAV4B+wNTAfQD
|
||||||
YgHhA1EBoQMeASoMAAMbASUDWAG9A1oB8gNSAf4DMAH/AzkB/wM8Af8DNgH/AyoB/wMkAf8DQAH9A14B
|
YgHhA1EBoQMeASoMAAMbASUDWAG9A1oB8gNlAf4DMAH/AzkB/wM8Af8DNgH/AyoB/wMkAf8DQAH9A14B
|
||||||
8ANWAbIDGgEjCAADGwElA1gBvQNaAfIBKgFyASoB/gEAAVcBAAH/AQABZwEAAf8BAAFsAQAB/wEAAWEB
|
8ANWAbIDGgEjCAADGwElA1gBvQNaAfIBPQGAAT0B/gEAAVcBAAH/AQABZwEAAf8BAAFsAQAB/wEAAWEB
|
||||||
AAH/AQABTAEAAf8BAAFAAQAB/wNAAf0DXgHwA1YBsgEZARoBGQEjCAADGwElA1gBvQNaAfIBKgJyAf4B
|
AAH/AQABTAEAAf8BAAFAAQAB/wNAAf0DXgHwA1YBsgEZARoBGQEjCAADGwElA1gBvQNaAfIBPQKAAf4B
|
||||||
AAJXAf8BAAJnAf8BAAJsAf8BAAJhAf8BAAJMAf8BAAJAAf8DQAH9A14B8ANWAbIBGQIaASMIAAMbASUD
|
AAJXAf8BAAJnAf8BAAJsAf8BAAJhAf8BAAJMAf8BAAJAAf8DQAH9A14B8ANWAbIBGQIaASMIAAMbASUD
|
||||||
WAG9A1oB8gIqAXIB/gIAAVcB/wIAAWcB/wIAAWwB/wIAAWEB/wIAAUwB/wIAAUAB/wNAAf0DXgHwA1YB
|
WAG9A1oB8gI9AYAB/gIAAVcB/wIAAWcB/wIAAWwB/wIAAWEB/wIAAUwB/wIAAUAB/wNAAf0DXgHwA1YB
|
||||||
sgIZARoBIwQAAwMBBANSAaUDYAHzA0kB/wNVAf8DZQH/A3EB/wN1Af8DcQH/A2QB/wNMAf8DMQH/A04B
|
sgIZARoBIwQAAwMBBANSAaUDYAHzA0kB/wNVAf8DZQH/A3EB/wN1Af8DcQH/A2QB/wNMAf8DMQH/A2EB
|
||||||
/gNiAe4DUAGaAwMBBAMDAQQBUgFTAVIBpQFgAW8BYAHzAQABggEAAf8BAAGZAQAB/wEAAbYBAAH/AQAB
|
/gNiAe4DUAGaAwMBBAMDAQQBUgFTAVIBpQFgAW8BYAHzAQABggEAAf8BAAGZAQAB/wEAAbYBAAH/AQAB
|
||||||
zAEAAf8BAAHTAQAB/wEAAcsBAAH/AQABswEAAf8BAAGIAQAB/wEAAVcBAAH/ASoBagEqAf4DYgHuA1AB
|
zAEAAf8BAAHTAQAB/wEAAcsBAAH/AQABswEAAf8BAAGIAQAB/wEAAVcBAAH/AT0BfQE9Af4DYgHuA1AB
|
||||||
mgMDAQQDAwEEAVICUwGlAWACbwHzAQACggH/AQACmQH/AQACtgH/AQACzAH/AQAC0wH/AQACywH/AQAC
|
mgMDAQQDAwEEAVICUwGlAWACbwHzAQACggH/AQACmQH/AQACtgH/AQACzAH/AQAC0wH/AQACywH/AQAC
|
||||||
swH/AQACiAH/AQACVwH/ASoCagH+A2IB7gNQAZoDAwEEAwMBBAJSAVMBpQJgAW8B8wIAAYIB/wIAAZkB
|
swH/AQACiAH/AQACVwH/AT0CfQH+A2IB7gNQAZoDAwEEAwMBBAJSAVMBpQJgAW8B8wIAAYIB/wIAAZkB
|
||||||
/wIAAbYB/wIAAcwB/wIAAdMB/wIAAcsB/wIAAbMB/wIAAYgB/wIAAVcB/wIqAWoB/gNiAe4DUAGaAwMB
|
/wIAAbYB/wIAAcwB/wIAAdMB/wIAAcsB/wIAAbMB/wIAAYgB/wIAAVcB/wI9AX0B/gNiAe4DUAGaAwMB
|
||||||
BAMtAUQDYAHoA4AB/gNuAf8DewH/A4UB/wOKAf8DjAH/A4oB/wOFAf8DdgH/A1cB/wMyAf8DQAH9A14B
|
BAMtAUQDYAHoA4AB/gNuAf8DewH/A4UB/wOKAf8DjAH/A4oB/wOFAf8DdgH/A1cB/wMyAf8DQAH9A14B
|
||||||
3QMqAT8DLQFEAWABaQFgAegBKgGAASoB/gEAAcYBAAH/AQAB3AEAAf8BAAHuAQAB/wEAAfgBAAH/AQAB
|
3QMqAT8DLQFEAWABaQFgAegBPQGAAT0B/gEAAcYBAAH/AQAB3AEAAf8BAAHuAQAB/wEAAfgBAAH/AQAB
|
||||||
+wEAAf8BAAH5AQAB/wEAAe8BAAH/AQAB1AEAAf8BAAGcAQAB/wEAAVoBAAH/A0AB/QNeAd0DKgE/Ay0B
|
+wEAAf8BAAH5AQAB/wEAAe8BAAH/AQAB1AEAAf8BAAGcAQAB/wEAAVoBAAH/A0AB/QNeAd0DKgE/Ay0B
|
||||||
RAFgAmkB6AEqAoAB/gEAAsYB/wEAAtwB/wEAAu4B/wEAAvgB/wEAAvsB/wEAAvkB/wEAAu8B/wEAAtQB
|
RAFgAmkB6AE9AoAB/gEAAsYB/wEAAtwB/wEAAu4B/wEAAvgB/wEAAvsB/wEAAvkB/wEAAu8B/wEAAtQB
|
||||||
/wEAApwB/wEAAloB/wNAAf0DXgHdAyoBPwMtAUQCYAFpAegCKgGAAf4CAAHGAf8CAAHcAf8CAAHuAf8C
|
/wEAApwB/wEAAloB/wNAAf0DXgHdAyoBPwMtAUQCYAFpAegCPQGAAf4CAAHGAf8CAAHcAf8CAAHuAf8C
|
||||||
AAH4Af8CAAH7Af8CAAH5Af8CAAHvAf8CAAHUAf8CAAGcAf8CAAFaAf8DQAH9A14B3QMqAT8DTgGVA3cB
|
AAH4Af8CAAH7Af8CAAH5Af8CAAHvAf8CAAHUAf8CAAGcAf8CAAFaAf8DQAH9A14B3QMqAT8DTgGVA3cB
|
||||||
+AN/Af8DhQH/A4oB/wONAf8DjgH/A44B/wOOAf8DjQH/A4kB/wN3Af8DTQH/AyUB/wNaAfIDSgGLA04B
|
+AN/Af8DhQH/A4oB/wONAf8DjgH/A44B/wOOAf8DjQH/A4kB/wN3Af8DTQH/AyUB/wNaAfIDSgGLA04B
|
||||||
lQFcAXwBXAH4AQAB5QEAAf8BAAHvAQAB/wEAAfgBAAH/AQAB/QEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
|
lQFcAXwBXAH4AQAB5QEAAf8BAAHvAQAB/wEAAfgBAAH/AQAB/QEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
|
||||||
@ -234,53 +255,53 @@
|
|||||||
+wH/AQMC/QH/AQAC/gH/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL9Af8BAALvAf8BAAK5Af8BAAJdAf8D
|
+wH/AQMC/QH/AQAC/gH/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL9Af8BAALvAf8BAAK5Af8BAAJdAf8D
|
||||||
QQH5A1oBxAJbAV8B0wIrAX4B/AIOAfsB/wIDAf0B/wIAAf4B/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAB
|
QQH5A1oBxAJbAV8B0wIrAX4B/AIOAfsB/wIDAf0B/wIAAf4B/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAB
|
||||||
/QH/AgAB7wH/AgABuQH/AgABXQH/A0EB+QNaAcQDbgH1A4AB/gOfAf8DkwH/A48B/wOOAf8DjgH/A44B
|
/QH/AgAB7wH/AgABuQH/AgABXQH/A0EB+QNaAcQDbgH1A4AB/gOfAf8DkwH/A48B/wOOAf8DjgH/A44B
|
||||||
/wOOAf8DjgH/A44B/wOLAf8DdwH/A0gB/wNAAf0DYgHhAVoBbgFaAfUBTgGrAU4B/gEnAf8BJwH/AQsB
|
/wOOAf8DjgH/A44B/wOLAf8DdwH/A0gB/wNAAf0DYgHhAVoBbgFaAfUBYQGFAWEB/gEnAf8BJwH/AQsB
|
||||||
/wELAf8BAQH/AQEB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
|
/wELAf8BAQH/AQEB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
|
||||||
/wEAAfkBAAH/AQAB1gEAAf8BAAGBAQAB/wNAAf0DYgHhAVoCbgH1AU4CqwH+AScD/wELA/8BAQP/AQAD
|
/wEAAfkBAAH/AQAB1gEAAf8BAAGBAQAB/wNAAf0DYgHhAVoCbgH1AWEChQH+AScD/wELA/8BAQP/AQAD
|
||||||
/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAC+QH/AQAC1gH/AQACgQH/A0AB/QNiAeECWgFuAfUCTgGrAf4C
|
/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAC+QH/AQAC1gH/AQACgQH/A0AB/QNiAeECWgFuAfUCYQGFAf4C
|
||||||
JwL/AgsC/wIBAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAH5Af8CAAHWAf8CAAGBAf8DQAH9A2IB
|
JwL/AgsC/wIBAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAH5Af8CAAHWAf8CAAGBAf8DQAH9A2IB
|
||||||
4QNjAfYDgAH+A6sB/wOZAf8DkAH/A44B/wOOAf8DjgH/A44B/wOOAf8DjgH/A40B/wN/Af8DVQH/A0AB
|
4QNjAfYDgAH+A6sB/wOZAf8DkAH/A44B/wOOAf8DjgH/A44B/wOOAf8DjgH/A40B/wN/Af8DVQH/A0AB
|
||||||
/QNeAeIBSAFjAUgB9gFxAasBcQH+AUIB/wFCAf8BGQH/ARkB/wEEAf8BBAH/AQAB/wEAAf8BAAH/AQAB
|
/QNeAeIBSAFjAUgB9gGAAYUBgAH+AUIB/wFCAf8BGQH/ARkB/wEEAf8BBAH/AQAB/wEAAf8BAAH/AQAB
|
||||||
/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/QEAAf8BAAHkAQAB/wEAAZgBAAH/A0AB
|
/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/QEAAf8BAAHkAQAB/wEAAZgBAAH/A0AB
|
||||||
/QNeAeIBSAJjAfYBcQKrAf4BQgP/ARkD/wEEA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL9Af8B
|
/QNeAeIBSAJjAfYBgAKFAf4BQgP/ARkD/wEEA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL9Af8B
|
||||||
AALkAf8BAAKYAf8DQAH9A14B4gJIAWMB9gJxAasB/gJCAv8CGQL/AgQC/wIAAv8CAAL/AgAC/wIAAv8C
|
AALkAf8BAAKYAf8DQAH9A14B4gJIAWMB9gKAAYUB/gJCAv8CGQL/AgQC/wIAAv8CAAL/AgAC/wIAAv8C
|
||||||
AAL/AgAC/wIAAf0B/wIAAeQB/wIAAZgB/wNAAf0DXgHiA2EB1gN+AfwDuAH/A6MB/wOTAf8DjgH/A44B
|
AAL/AgAC/wIAAf0B/wIAAeQB/wIAAZgB/wNAAf0DXgHiA2EB1gN+AfwDuAH/A6MB/wOTAf8DjgH/A44B
|
||||||
/wOOAf8DjgH/A44B/wOOAf8DjQH/A4IB/wNcAf8DTQH6A1oBxwFcAWEBXAHWAWQBgwFkAfwBXwH/AV8B
|
/wOOAf8DjgH/A44B/wOOAf8DjQH/A4IB/wNcAf8DTQH6A1oBxwFcAWEBXAHWAWQBfgFkAfwBXwH/AV8B
|
||||||
/wEvAf8BLwH/AQwB/wEMAf8BAQH/AQEB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
|
/wEvAf8BLwH/AQwB/wEMAf8BAQH/AQEB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
|
||||||
/wEAAf8BAAH+AQAB/wEAAeoBAAH/AQABpQEAAf8BSAFNAUgB+gNaAccBXAJhAdYBZAKDAfwBXwP/AS8D
|
/wEAAf8BAAH+AQAB/wEAAeoBAAH/AQABpQEAAf8DTQH6A1oBxwFcAmEB1gFkAn4B/AFfA/8BLwP/AQwD
|
||||||
/wEMA/8BAQP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL+Af8BAALqAf8BAAKlAf8BSAJNAfoDWgHHAlwB
|
/wEBA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAAv4B/wEAAuoB/wEAAqUB/wNNAfoDWgHHAlwBYQHWAmQB
|
||||||
YQHWAmQBgwH8Al8C/wIvAv8CDAL/AgEC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAB/gH/AgAB6gH/AgAB
|
fgH8Al8C/wIvAv8CDAL/AgEC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAB/gH/AgAB6gH/AgABpQH/A00B
|
||||||
pQH/AkgBTQH6A1oBxwNQAZoDbQH5A8UB/wOyAf8DnAH/A5EB/wOOAf8DjgH/A44B/wOOAf8DjwH/A44B
|
+gNaAccDUAGaA2oB+QPFAf8DsgH/A5wB/wORAf8DjgH/A44B/wOOAf8DjgH/A48B/wOOAf8DgwH/A2AB
|
||||||
/wODAf8DYAH/A1oB8gNMAZADUAGaAWoBfwFqAfkBfAH/AXwB/wFRAf8BUQH/AR8B/wEfAf8BBwH/AQcB
|
/wNaAfIDTAGQA1ABmgNqAfkBfAH/AXwB/wFRAf8BUQH/AR8B/wEfAf8BBwH/AQcB/wEBAf8BAQH/AQAB
|
||||||
/wEBAf8BAQH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQIB/wECAf8BAgH+AQIB/wEAAesBAAH/AQAB
|
/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQIB/wECAf8BAgH+AQIB/wEAAesBAAH/AQABrQEAAf8BWgFrAVoB
|
||||||
rQEAAf8BWgFrAVoB8gNMAZADUAGaAWoCfwH5AXwD/wFRA/8BHwP/AQcD/wEBA/8BAAP/AQAD/wEAA/8B
|
8gNMAZADUAGaA2oB+QF8A/8BUQP/AR8D/wEHA/8BAQP/AQAD/wEAA/8BAAP/AQID/wECAv4B/wEAAusB
|
||||||
AgP/AQIC/gH/AQAC6wH/AQACrQH/AVoCawHyA0wBkANQAZoCagF/AfkCfAL/AlEC/wIfAv8CBwL/AgEC
|
/wEAAq0B/wFaAmsB8gNMAZADUAGaA2oB+QJ8Av8CUQL/Ah8C/wIHAv8CAQL/AgAC/wIAAv8CAAL/AgIC
|
||||||
/wIAAv8CAAL/AgAC/wICAv8CAgH+Af8CAAHrAf8CAAGtAf8CWgFrAfIDTAGQAy8BSQNsAesDgAH+A8YB
|
/wICAf4B/wIAAesB/wIAAa0B/wJaAWsB8gNMAZADLwFJA2wB6wOAAf4DxgH/A64B/wOcAf8DkwH/A5AB
|
||||||
/wOuAf8DnAH/A5MB/wOQAf8DjwH/A5AB/wOTAf8DkwH/A4UB/wNAAf0DYAHgAy0BRQMvAUkDbAHrAYAB
|
/wOPAf8DkAH/A5MB/wOTAf8DhQH/A0AB/QNgAeADLQFFAy8BSQNsAesBgAGFAYAB/gF/Af8BfwH/AUkB
|
||||||
qwGAAf4BfwH/AX8B/wFJAf8BSQH/AR8B/wEfAf8BDAH/AQwB/wEFAf8BBQH/AQMB/wEDAf8BBQH/AQUB
|
/wFJAf8BHwH/AR8B/wEMAf8BDAH/AQUB/wEFAf8BAwH/AQMB/wEFAf8BBQH/AQoB/wEKAf8BCgH+AQoB
|
||||||
/wEKAf8BCgH/AQoB/gEKAf8BAQHtAQEB/wFAAbYBQAH9AWABZgFgAeADLQFFAy8BSQNsAesBgAKrAf4B
|
/wEBAe0BAQH/AUABtgFAAf0BYAFmAWAB4AMtAUUDLwFJA2wB6wGAAoUB/gF/A/8BSQP/AR8D/wEMA/8B
|
||||||
fwP/AUkD/wEfA/8BDAP/AQUD/wEDA/8BBQP/AQoD/wEKAv4B/wEBAu0B/wFAArYB/QFgAmYB4AMtAUUD
|
BQP/AQMD/wEFA/8BCgP/AQoC/gH/AQEC7QH/AUACtgH9AWACZgHgAy0BRQMvAUkDbAHrAoABhQH+An8C
|
||||||
LwFJA2wB6wKAAasB/gJ/Av8CSQL/Ah8C/wIMAv8CBQL/AgMC/wIFAv8CCgL/AgoB/gH/AgEB7QH/AkAB
|
/wJJAv8CHwL/AgwC/wIFAv8CAwL/AgUC/wIKAv8CCgH+Af8CAQHtAf8CQAG2Af0CYAFmAeADLQFFAwMB
|
||||||
tgH9AmABZgHgAy0BRQMDAQQDVgGuA24B9QPZAf8DywH/A7cB/wOnAf8DnQH/A5oB/wOcAf8DnwH/A5sB
|
BANWAa4DbgH1A9kB/wPLAf8DtwH/A6cB/wOdAf8DmgH/A5wB/wOfAf8DmwH/A4kB/wNoAfADUgGjAwMB
|
||||||
/wOJAf8DaAHwA1IBowMDAQQDAwEEA1YBrgNuAfUBqAH/AagB/wGJAf8BiQH/AVwB/wFcAf8BNwH/ATcB
|
BAMDAQQDVgGuA24B9QGoAf8BqAH/AYkB/wGJAf8BXAH/AVwB/wE3Af8BNwH/ASIB/wEiAf8BGwH/ARsB
|
||||||
/wEiAf8BIgH/ARsB/wEbAf8BHwH/AR8B/wEmAf8BJgH/AR0B/wEdAf8BBQHzAQUB/wFeAWgBXgHwA1IB
|
/wEfAf8BHwH/ASYB/wEmAf8BHQH/AR0B/wEFAfMBBQH/AV4BaAFeAfADUgGjAwMBBAMDAQQDVgGuA24B
|
||||||
owMDAQQDAwEEA1YBrgNuAfUBqAP/AYkD/wFcA/8BNwP/ASID/wEbA/8BHwP/ASYD/wEdA/8BBQLzAf8B
|
9QGoA/8BiQP/AVwD/wE3A/8BIgP/ARsD/wEfA/8BJgP/AR0D/wEFAvMB/wFeAmgB8ANSAaMDAwEEAwMB
|
||||||
XgJoAfADUgGjAwMBBAMDAQQDVgGuA24B9QKoAv8CiQL/AlwC/wI3Av8CIgL/AhsC/wIfAv8CJgL/Ah0C
|
BANWAa4DbgH1AqgC/wKJAv8CXAL/AjcC/wIiAv8CGwL/Ah8C/wImAv8CHQL/AgUB8wH/Al4BaAHwA1IB
|
||||||
/wIFAfMB/wJeAWgB8ANSAaMDAwEEBAADHAEnA10BxwNjAfYDiwH+A9cB/wPMAf8DwgH/A7sB/wO3Af8D
|
owMDAQQEAAMcAScDXQHHA2MB9gOAAf4D1wH/A8wB/wPCAf8DuwH/A7cB/wOxAf8DgAH+A2gB9ANZAbwD
|
||||||
sQH/A4AB/gNoAfQDWQG8AxsBJggAAxwBJwNdAccDYwH2AYABqwGAAf4BpQH/AaUB/wGLAf8BiwH/AXQB
|
GwEmCAADHAEnA10BxwNjAfYBgAGFAYAB/gGlAf8BpQH/AYsB/wGLAf8BdAH/AXQB/wFmAf8BZgH/AVwB
|
||||||
/wF0Af8BZgH/AWYB/wFcAf8BXAH/AU4B/wFOAf8BWgGrAVoB/gFTAWgBUwH0AVcBWQFXAbwDGwEmCAAD
|
/wFcAf8BTgH/AU4B/wFtAYUBbQH+AVMBaAFTAfQBVwFZAVcBvAMbASYIAAMcAScDXQHHA2MB9gGAAoUB
|
||||||
HAEnA10BxwNjAfYBgAKrAf4BpQP/AYsD/wF0A/8BZgP/AVwD/wFOA/8BWgKrAf4BUwJoAfQBVwJZAbwD
|
/gGlA/8BiwP/AXQD/wFmA/8BXAP/AU4D/wFtAoUB/gFTAmgB9AFXAlkBvAMbASYIAAMcAScDXQHHA2MB
|
||||||
GwEmCAADHAEnA10BxwNjAfYCgAGrAf4CpQL/AosC/wJ0Av8CZgL/AlwC/wJOAv8CWgGrAf4CUwFoAfQC
|
9gKAAYUB/gKlAv8CiwL/AnQC/wJmAv8CXAL/Ak4C/wJtAYUB/gJTAWgB9AJXAVkBvAMbASYMAAMhATAD
|
||||||
VwFZAbwDGwEmDAADIQEwA1kBtgNiAe4DfQH6A74B/QPUAf8DzAH/A74B/QNqAfkDbAHrA1UBrAMfASwQ
|
WQG2A2IB7gN9AfoDvgH9A9QB/wPMAf8DvgH9A2oB+QNsAesDVQGsAx8BLBAAAyEBMANZAbYDYgHuA30B
|
||||||
AAMhATADWQG2A2IB7gN9AfoBrgG+Aa4B/QGfAf8BnwH/AYwB/wGMAf8BTAG+AUwB/QFoAX8BaAH5AWEB
|
+gGuAb4BrgH9AZ8B/wGfAf8BjAH/AYwB/wFAAb4BQAH9AWgBagFoAfkBYQFsAWEB6wNVAawDHwEsEAAD
|
||||||
bAFhAesDVQGsAx8BLBAAAyEBMANZAbYDYgHuA30B+gGuAr4B/QGfA/8BjAP/AUwCvgH9AWgCfwH5AWEC
|
IQEwA1kBtgNiAe4DfQH6Aa4CvgH9AZ8D/wGMA/8BQAK+Af0BaAJqAfkBYQJsAesDVQGsAx8BLBAAAyEB
|
||||||
bAHrA1UBrAMfASwQAAMhATADWQG2A2IB7gN9AfoCrgG+Af0CnwL/AowC/wJMAb4B/QJoAX8B+QJhAWwB
|
MANZAbYDYgHuA30B+gKuAb4B/QKfAv8CjAL/AkABvgH9AmgBagH5AmEBbAHrA1UBrAMfASwUAAMGAQcD
|
||||||
6wNVAawDHwEsFAADBgEHAzYBWANVAawDZgHlA34B/AOBAfsDZQHiA1MBpwMzAVEDBgEHGAADBgEHAzYB
|
NgFYA1UBrANmAeUDfgH8A18B+wNlAeIDUwGnAzMBUQMGAQcYAAMGAQcDNgFYA1UBrANmAeUDfgH8AV8B
|
||||||
WANVAawDZgHlAX4BgwF+AfwBXwGMAV8B+wNlAeIDUwGnAzMBUQMGAQcYAAMGAQcDNgFYA1UBrANmAeUB
|
cwFfAfsDZQHiA1MBpwMzAVEDBgEHGAADBgEHAzYBWANVAawDZgHlA34B/AFfAnMB+wNlAeIDUwGnAzMB
|
||||||
fgKDAfwBXwKMAfsDZQHiA1MBpwMzAVEDBgEHGAADBgEHAzYBWANVAawDZgHlAn4BgwH8Al8BjAH7A2UB
|
UQMGAQcYAAMGAQcDNgFYA1UBrANmAeUDfgH8Al8BcwH7A2UB4gNTAacDMwFRAwYBBwwAAUIBTQE+BwAB
|
||||||
4gNTAacDMwFRAwYBBwwAAUIBTQE+BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYAA/+BAAHgAQcB
|
PgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYAA/+BAAHgAQcB4AEHAeABBwHgAQcBwAEDAcABAwHAAQMB
|
||||||
4AEHAeABBwHgAQcBwAEDAcABAwHAAQMBwAEDAYABAQGAAQEBgAEBAYABAVAAAYABAQGAAQEBgAEBAYAB
|
wAEDAYABAQGAAQEBgAEBAYABAVAAAYABAQGAAQEBgAEBAYABAQHAAQMBwAEDAcABAwHAAQMB4AEHAeAB
|
||||||
AQHAAQMBwAEDAcABAwHAAQMB4AEHAeABBwHgAQcB4AEHCw==
|
BwHgAQcB4AEHCw==
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="ilGames.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="ilGames.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
@ -290,8 +311,8 @@
|
|||||||
<value>
|
<value>
|
||||||
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
|
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
|
||||||
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
|
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
|
||||||
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAKCUAAAJNU0Z0AUkBTAIBAQMB
|
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAJCUAAAJNU0Z0AUkBTAIBAQMB
|
||||||
AAEQAQIBEAECASABAAEgAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABgAMAASADAAEBAQABIAYAAUB6
|
AAGoAQIBqAECASABAAEgAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABgAMAASADAAEBAQABIAYAAUB6
|
||||||
AANcAecBCAEKAQAB/wMqAUAMAAMqAUADNgFXAz8BbAM/AWwDPwFsAz8BbAM/AWwDPwFsAz8BbAM/AWwD
|
AANcAecBCAEKAQAB/wMqAUAMAAMqAUADNgFXAz8BbAM/AWwDPwFsAz8BbAM/AWwDPwFsAz8BbAM/AWwD
|
||||||
PwFsAz8BbAM/AWwDPwFsAz8BbAM/AWwDPwFsAz8BbAI7AToBYgMzAVEDGAEhVAADUwGiA1sBwCAAA1QB
|
PwFsAz8BbAM/AWwDPwFsAz8BbAM/AWwDPwFsAz8BbAI7AToBYgMzAVEDGAEhVAADUwGiA1sBwCAAA1QB
|
||||||
pgNZAbzwAAMhATADRgGAFAABFQEfAQQB/wENARUBAAH/AQgBCgEAAf8BCAEKAQAB/wwAA0QBegNTAacC
|
pgNZAbzwAAMhATADRgGAFAABFQEfAQQB/wENARUBAAH/AQgBCgEAAf8BCAEKAQAB/wwAA0QBegNTAacC
|
||||||
@ -377,7 +398,7 @@
|
|||||||
UgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFaAZQB
|
UgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFaAZQB
|
||||||
EAH/AVoBlAEQAf8BWgGbARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZYBFgH/AVoBlAEYAf8B
|
EAH/AVoBlAEQAf8BWgGbARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZYBFgH/AVoBlAEYAf8B
|
||||||
XQGXARgB/wFjAZwBGAH/AWMBpQEXAf8BYwGlARcB/wFwAbMBIAH/ASsBUAEEAf8IAAMnAToCUwFRAaIB
|
XQGXARgB/wFjAZwBGAH/AWMBpQEXAf8BYwGlARcB/wFwAbMBIAH/ASsBUAEEAf8IAAMnAToCUwFRAaIB
|
||||||
gwFfASEB+wJlAVwB5wJcAVoBxAJDAUIBdQMxAU0CQAE/AW4CUQFQAZ8CZQFgAeMB/wF4AQAC/wF4AQAB
|
YQFfASEB+wJlAVwB5wJcAVoBxAJDAUIBdQMxAU0CQAE/AW4CUQFQAZ8CZQFgAeMB/wF4AQAC/wF4AQAB
|
||||||
/wJRAVABnwMSARgcAAMZASIDTgGVAlsBXgHNAlYBVwGyA0QBegMdASkDBgEIBAIEATAAA18B0ANiAe4g
|
/wJRAVABnwMSARgcAAMZASIDTgGVAlsBXgHNAlYBVwGyA0QBegMdASkDBgEIBAIEATAAA18B0ANiAe4g
|
||||||
AANhAdQDYwHpvAABSgGEAQYB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B
|
AANhAdQDYwHpvAABSgGEAQYB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B
|
||||||
ZwGpARcB/wFSAYwBCAH/AUoBhAEGAf8BSgGEAQYB/wFSAYwBEAH/AVoBlAEQAf8BWgGXARAB/wFaAZwB
|
ZwGpARcB/wFSAYwBCAH/AUoBhAEGAf8BSgGEAQYB/wFSAYwBEAH/AVoBlAEQAf8BWgGXARAB/wFaAZwB
|
||||||
@ -397,152 +418,131 @@
|
|||||||
YgHclAABSgGMAQAB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AWcBnQEnAf8BCAEKAQAB
|
YgHclAABSgGMAQAB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AWcBnQEnAf8BCAEKAQAB
|
||||||
/wEKAQ8BAAH/AUIBdwEDAf8BUgGMARAB/wFaAZwBEAH/ASUBQQEFAf8EAAM6AWABCAEKAQAB/wEIAQoB
|
/wEKAQ8BAAH/AUIBdwEDAf8BUgGMARAB/wFaAZwBEAH/ASUBQQEFAf8EAAM6AWABCAEKAQAB/wEIAQoB
|
||||||
AAH/BAADRgGAA0YBgANGAYAcAAMKAQ0DIgExAzQBVANEAXgCUQFQAZ8CYQFdAc8CagFeAe0CZQFdAewC
|
AAH/BAADRgGAA0YBgANGAYAcAAMKAQ0DIgExAzQBVANEAXgCUQFQAZ8CYQFdAc8CagFeAe0CZQFdAewC
|
||||||
aAFeAfABgwFfASEB+wH/AXgBAAL/AXgBAAH/AlEBUAGfAxIBGBwAAwYBCAMYASEDMQFNAkwBTQGRAlgB
|
aAFeAfABYQFfASEB+wH/AXgBAAL/AXgBAAH/AlEBUAGfAxIBGBwAAwYBCAMYASEDMQFNAkwBTQGRAlgB
|
||||||
WgG9Al0BYQHRAlkBXAHDAlEBUwGiAz0BZwIZARoBIwMMAQ8DQAFvA1UBrQNVAa0DVQGtA1UBrQNVAa0D
|
WgG9Al0BYQHRAlkBXAHDAlEBUwGiAz0BZwIZARoBIwMMAQ8DQAFvA1UBrQNVAa0DVQGtA1UBrQNVAa0D
|
||||||
VQGtA1UBrQNVAa0DVQGtA2gB8AN9AfoDVQGtA1UBrQNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNwAfED
|
VQGtA1UBrQNVAa0DVQGtA2gB8AN9AfoDVQGtA1UBrQNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNwAfED
|
||||||
fAH4A1UBrQNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNVAa0DVQGtA0cBgZQAATsBbQECAf8BUgGMAQgB
|
fAH4A1UBrQNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNVAa0DVQGtA0cBgZQAATsBbQECAf8BUgGMAQgB
|
||||||
/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFTAY4BEAH/AQ8BGwEAAf8BIwFDAQAB/wFSAYwBEAH/AVIB
|
/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFTAY4BEAH/AQ8BGwEAAf8BIwFDAQAB/wFSAYwBEAH/AVIB
|
||||||
jAEQAf8BewG9ATAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB
|
jAEQAf8BewG9ATAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB
|
||||||
/wEIAQoBAAH/KAADAwEEAwkBCwMiATEDOAFbAk8BTgGXAl8BXAHIAmYBXwHlAm8BUQH3Ab4BRQFAAf0B
|
/wEIAQoBAAH/KAADAwEEAwkBCwMiATEDOAFbAk8BTgGXAl8BXAHIAmYBXwHlAm8BUQH3Ab4CQAH9Af8B
|
||||||
/wF4AQAC/wF4AQAB/wJRAVABnwMSARgcAAQBAwIBAwMVARwDNQFWAksBTAGPAlwBXwHIAl0BYwHfAmAB
|
eAEAAv8BeAEAAf8CUQFQAZ8DEgEYHAAEAQMCAQMDFQEcAzUBVgJLAUwBjwJcAV8ByAJdAWMB3wJgAWUB
|
||||||
ZQHjAlIBUwGlAzQBUwMcAScoAANfAdADYgHuIAADYQHUA2MB6bwAAQgBCgEAAf8BUgGMAQgB/wFSAYwB
|
4wJSAVMBpQM0AVMDHAEnKAADXwHQA2IB7iAAA2EB1ANjAem8AAEIAQoBAAH/AVIBjAEIAf8BUgGMAQgB
|
||||||
CAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AU4BggEPAf8BSgGEAQYB/wFSAYwBEAH/AWMBpQEXAf8B
|
/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFOAYIBDwH/AUoBhAEGAf8BUgGMARAB/wFjAaUBFwH/AQgB
|
||||||
CAEKAQAB/wEIAQoBAAH/ARMBIwEAAf8BQgFzAQYB/wEgAT8BAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoB
|
CgEAAf8BCAEKAQAB/wETASMBAAH/AUIBcwEGAf8BIAE/AQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB
|
||||||
AAH/AQgBCgEAAf8BCAEKAQAB/yAABAEDAwEEAwwBEAMYASADKQE9Az4BagJXAVYBtQJmAV8B5QJvAVEB
|
/wEIAQoBAAH/AQgBCgEAAf8gAAQBAwMBBAMMARADGAEgAykBPQM+AWoCVwFWAbUCZgFfAeUCbwFRAfcB
|
||||||
9wH/AXgBAAL/AXgBAAH/AlEBUAGfAxIBGCAABAEDBwEJAxQBGwMqAUADQwF2A1UBrwJaAWMB6QJbAV8B
|
/wF4AQAC/wF4AQAB/wJRAVABnwMSARggAAQBAwcBCQMUARsDKgFAA0MBdgNVAa8CWgFjAekCWwFfAdAC
|
||||||
0AJQAVEBnwMzAVEoAANfAdADYgHuIAADYQHUA2MB6cAAAUIBcwEGAf8BUgGMAQgB/wFSAYwBCAH/AVIB
|
UAFRAZ8DMwFRKAADXwHQA2IB7iAAA2EB1ANjAenAAAFCAXMBBgH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB
|
||||||
jAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFKAYQBBgH/ARABHgEAAf8BMQFaAQAB
|
CAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BSgGEAQYB/wEQAR4BAAH/ATEBWgEAAf8B
|
||||||
/wFNAYQBDQH/AVoBnAEQAf8BWgGcARAB/wFSAYwBCAH/ARABHgEAAf8BCAEKAQAB/wEIAQoBAAH/A0YB
|
TQGEAQ0B/wFaAZwBEAH/AVoBnAEQAf8BUgGMAQgB/wEQAR4BAAH/AQgBCgEAAf8BCAEKAQAB/wNGAYAs
|
||||||
gCwAAwIBAwMLAQ4DIAEuA0MBdgJXAVUBsQJmAWAB4AJjAUgB9gFtAWoBQQH5AlEBUAGcAxIBFwwABAED
|
AAMCAQMDCwEOAyABLgNDAXYCVwFVAbECZgFgAeACYwFIAfYCagFBAfkCUQFQAZwDEgEXDAAEAQMMARAD
|
||||||
DAEQAxcBHwMdASgDHQEoAwwBDwgAAw8BFAImAScBOQJHAUgBgwNiAeECXAFlAecDXgHSAj8BQAFuKAAD
|
FwEfAx0BKAMdASgDDAEPCAADDwEUAiYBJwE5AkcBSAGDA2IB4QJcAWUB5wNeAdICPwFAAW4oAANfAdAD
|
||||||
XwHQA2IB7iAAA2EB1ANjAenEAAFJAYkBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B
|
YgHuIAADYQHUA2MB6cQAAUkBiQEAAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB
|
||||||
UgGMARAB/wFSAYwBEAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwB
|
EAH/AVIBjAEQAf8BUgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8B
|
||||||
EAH/AVoBnAEQAf8BWgGUARgB/wFCAXMBBgH/AQoBDgEAAf8wAAQBAwMBBAMMAQ8DHgEqAzoBYQJZAVcB
|
WgGcARAB/wFaAZQBGAH/AUIBcwEGAf8BCgEOAQAB/zAABAEDAwEEAwwBDwMeASoDOgFhAlkBVwG5AmMB
|
||||||
uQJjAVsB5ANiAe4CTwFOAZcDEgEXDAADAgEDAyEBLwM2AVkCQgFDAXUCQQFCAXMDHgErCAADBAEFAwwB
|
WwHkA2IB7gJPAU4BlwMSARcMAAMCAQMDIQEvAzYBWQJCAUMBdQJBAUIBcwMeASsIAAMEAQUDDAEPAzgB
|
||||||
DwM4AVwCXQFgAc4CXQFlAewCWQFnAe8DRgF/KAADXwHQA2IB7iAAA2EB1ANjAenIAAE6AWsBAAH/AVIB
|
XAJdAWABzgJdAWUB7AJZAWcB7wNGAX8oAANfAdADYgHuIAADYQHUA2MB6cgAAToBawEAAf8BUgGMAQgB
|
||||||
jAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBlAEQAf8BWgGcARAB
|
/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BWgGUARAB/wFaAZwBEAH/AVoB
|
||||||
/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZQBGAH/AVoBlAEYAf8BYwGlARcB/wEZASwBAwH/OAAD
|
nAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBlAEYAf8BWgGUARgB/wFjAaUBFwH/ARkBLAEDAf84AAMCAQMD
|
||||||
AgEDAwgBCgMgAS0CQQFAAXECTQFMAZEDUAGaAjsBOgFiAwwBDwwAAwMBBAMrAUEDRAF6A1MBpwNVAa0D
|
CAEKAyABLQJBAUABcQJNAUwBkQNQAZoCOwE6AWIDDAEPDAADAwEEAysBQQNEAXoDUwGnA1UBrQM3AVoD
|
||||||
NwFaAxgBIAMJAQsDBgEHAw0BEQM5AV8CXQFhAdECWQFnAe8CYAFvAfMCRgFHAYEoAANfAdADYgHuIAAD
|
GAEgAwkBCwMGAQcDDQERAzkBXwJdAWEB0QJZAWcB7wJgAW8B8wJGAUcBgSgAA18B0ANiAe4gAANhAdQD
|
||||||
YQHUA2MB6cwAASwBVQEAAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoB
|
YwHpzAABLAFVAQAB/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BWgGUARAB
|
||||||
lAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZQBGAH/AVoBlAEYAf8BIQFBAQAB
|
/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBlAEYAf8BWgGUARgB/wEhAUEBAAH/QAAE
|
||||||
/0AABAIDBwEJAxAEFQEcAhYBFQEdAw8BEwMCAQMMAAMDAQQDMANLAUwBjwJbAV0BygJbAWEB3gNOAZQD
|
AgMHAQkDEAQVARwCFgEVAR0DDwETAwIBAwwAAwMBBAMwA0sBTAGPAlsBXQHKAlsBYQHeA04BlAM0AVMD
|
||||||
NAFTAxUBHAMNAREDHgErAkMBRAF3Al0BYwHfAmUBcAHxAloBYwHpA0QBeygAA18B0ANiAe4gAANhAdQD
|
FQEcAw0BEQMeASsCQwFEAXcCXQFjAd8CZQFwAfECWgFjAekDRAF7KAADXwHQA2IB7iAAA2EB1ANjAenI
|
||||||
YwHpyAABEgEiAQAB/wFMAYYBBgH/AVIBjAEIAf8BWgGcARAB/wFQAYoBCAH/AVIBjAEQAf8BWgGUARAB
|
AAESASIBAAH/AUwBhgEGAf8BUgGMAQgB/wFaAZwBEAH/AVABigEIAf8BUgGMARAB/wFaAZQBEAH/AVoB
|
||||||
/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAERAf8BaQGrAR8B/wEIAQoBAAH/bAAD
|
nAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcAREB/wFpAasBHwH/AQgBCgEAAf9sAAMCAQMD
|
||||||
AgEDAyEBLwM6AWEDVQGtAl8BYwHaA1oBvwJQAVEBnwNEAXoCQQFCAXIDSQGFAlYBVwGyAl4BagHtAmAB
|
IQEvAzoBYQNVAa0CXwFjAdoDWgG/AlABUQGfA0QBegJBAUIBcgNJAYUCVgFXAbICXgFqAe0CYAFkAdsC
|
||||||
ZAHbAlUBVwGxAzgBWygAA18B0ANiAe4gAANhAdQDYwHpyAABEAEeAQAB/wFIAX0BBwH/AVkBkwETAf8B
|
VQFXAbEDOAFbKAADXwHQA2IB7iAAA2EB1ANjAenIAAEQAR4BAAH/AUgBfQEHAf8BWQGTARMB/wFVAYgB
|
||||||
VQGIARgB/wgAASEBQQEAAf8BQgF7AQAB/wFSAYwBCAH/AVUBkQEIAf8BOQFmAQQB/wNZAe94AAMGAQgD
|
GAH/CAABIQFBAQAB/wFCAXsBAAH/AVIBjAEIAf8BVQGRAQgB/wE5AWYBBAH/A1kB73gAAwYBCAMXAR8D
|
||||||
FwEfA0QBewJZAVwBxgJbAWMB5AJTAWgB9ANiAe4DYgHuAmUBcAHxAkgBYwH2AisBfgH8AlkBXAG+Az4B
|
RAF7AlkBXAHGAlsBYwHkAlMBaAH0A2IB7gNiAe4CZQFwAfECSAFjAfYCKwF+AfwCWQFcAb4DPgFrAyQB
|
||||||
awMkATQoAANfAdADYgHuIAADYQHUA2MB6dAAAR4BOgEAAf+cAAQCAwkBDAMqAz8BQAFuA04BlgJWAVgB
|
NCgAA18B0ANiAe4gAANhAdQDYwHp0AABHgE6AQAB/5wABAIDCQEMAyoDPwFAAW4DTgGWAlYBWAGzAlkB
|
||||||
swJZAVwBwQJaAV0BxwJaAV0BxwJXAVkBuQJRAVIBpAJAAUEBcQMlATYDEwEZKAADXwHQA2IB7iAAA2EB
|
XAHBAloBXQHHAloBXQHHAlcBWQG5AlEBUgGkAkABQQFxAyUBNgMTARkoAANfAdADYgHuIAADYQHUA2MB
|
||||||
1ANjAen/AHkABAEDCwEOAyYBOAM5AV4DRgF9AkoBSwGLA0oBiQM+AWsDKgE/AxcBHwMCAQMsAANTAaID
|
6f8AeQAEAQMLAQ4DJgE4AzkBXgNGAX0CSgFLAYsDSgGJAz4BawMqAT8DFwEfAwIBAywAA1MBogNaAb8g
|
||||||
WgG/IAADVAGmA1kBu6gAAUIBTQE+BwABPgMAASgDAAGAAwABIAMAAQEBAAEBBgABAhYAA/8BAAP/AccC
|
AANUAaYDWQG7qAABQgFNAT4HAAE+AwABKAMAAYADAAEgAwABAQEAAQEGAAECFgAD/wEAA/8BxwIAAQcC
|
||||||
AAEHAv8BzwHzAf8EAAL/Ac8BhwIAAQcC/wHPAfMB/wQAAf8B/gEAAQcCAAEHAv8BzwHzAf8EAAH/AfwB
|
/wHPAfMB/wQAAv8BzwGHAgABBwL/Ac8B8wH/BAAB/wH+AQABBwIAAQcC/wHPAfMB/wQAAf8B/AEAAQcC
|
||||||
AAEHAgABBwL/Ac8B8wH/BAAB/wH4AQABDwIAAQcC/wHPAfMB/wQAAf8B8AEAAQcCAAEHAv8BzwHzAf8E
|
AAEHAv8BzwHzAf8EAAH/AfgBAAEPAgABBwL/Ac8B8wH/BAAB/wHwAQABBwIAAQcC/wHPAfMB/wQAAf8B
|
||||||
AAH/AeABAAEDAgABBwL/Ac8B8wH/BAAB/wHAAQABAQH8AQMD/wHPAfMB/wQAAf8BwAEAAQEB/AEDA/8B
|
4AEAAQMCAAEHAv8BzwHzAf8EAAH/AcABAAEBAfwBAwP/Ac8B8wH/BAAB/wHAAQABAQH8AQMD/wHPAfMB
|
||||||
zwHzAf8EAAH/AeACAAH8AQMB4AEfCAAB/wH8ASABAAH8AQMB4AEfCAAB/wH+AeABAAH8AQMB4AEfCAAB
|
/wQAAf8B4AIAAfwBAwHgAR8IAAH/AfwBIAEAAfwBAwHgAR8IAAH/Af4B4AEAAfwBAwHgAR8IAAH/AcAC
|
||||||
/wHAAgAB/AEDAeABHwH/Ac8B8wH/BAAB/wGAAgAB/AEDAeABHwH/Ac8B8wH/BAAB/wMAAfwBAwHgAR8B
|
AAH8AQMB4AEfAf8BzwHzAf8EAAH/AYACAAH8AQMB4AEfAf8BzwHzAf8EAAH/AwAB/AEDAeABHwH/Ac8B
|
||||||
/wHPAfMB/wQAAf4CAAEBAQABAwHgAR8B/wHPAfMB/wQAAfwCAAEBAQABAwH4AR8B/wHPAfMB/wQAAfgC
|
8wH/BAAB/gIAAQEBAAEDAeABHwH/Ac8B8wH/BAAB/AIAAQEBAAEDAfgBHwH/Ac8B8wH/BAAB+AIAAQEB
|
||||||
AAEBAQABAwH4AR8B/wHPAfMB/wQAAfgCAAEDAQABAwH4AQMB/wHPAfMB/wQAAfgCAAEHAQABAwH4AQMI
|
AAEDAfgBHwH/Ac8B8wH/BAAB+AIAAQMBAAEDAfgBAwH/Ac8B8wH/BAAB+AIAAQcBAAEDAfgBAwgAAfgC
|
||||||
AAH4AgABDwEAAQMB+AkAAfgBAAFEAX8BAAEDAfgJAAH4AQABAQH/AYABAwH4AQAB/wHPAfMB/wQAAfgC
|
AAEPAQABAwH4CQAB+AEAAUQBfwEAAQMB+AkAAfgBAAEBAf8BgAEDAfgBAAH/Ac8B8wH/BAAB+AIAAX8B
|
||||||
AAF/AYABAwH8AQAB/wHPAfMB/wQAAfwCAAF/AfABAwGBAYAB/wHPAfMB/wQAAf4CAAH/AfABAwGBAYAB
|
gAEDAfwBAAH/Ac8B8wH/BAAB/AIAAX8B8AEDAYEBgAH/Ac8B8wH/BAAB/gIAAf8B8AEDAYEBgAH/Ac8B
|
||||||
/wHPAfMB/wQAAf8CAAH/AfwBAwGAAQAB/wHPAfMB/wQAAf8BgAEBAf8B/gEDAYABAAH/Ac8B8wH/BAAB
|
8wH/BAAB/wIAAf8B/AEDAYABAAH/Ac8B8wH/BAAB/wGAAQEB/wH+AQMBgAEAAf8BzwHzAf8EAAH/AQAB
|
||||||
/wEAAQMD/wGAAQAB/wHPAfMB/wQAAf8BDAEPA/8BwAEAAf8BzwHzAf8EAAH/Ad8E/wHAAQAB/wHPAfMB
|
AwP/AYABAAH/Ac8B8wH/BAAB/wEMAQ8D/wHAAQAB/wHPAfMB/wQAAf8B3wT/AcABAAH/Ac8B8wH/BAAG
|
||||||
/wQABv8B8AEBAf8BzwHzAf8EAAs=
|
/wHwAQEB/wHPAfMB/wQACw==
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="ilStoreThumbnails.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="ilStoreThumbnails.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>12, 128</value>
|
<value>12, 128</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<metadata name="ilTabIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="ilProfilePics.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>20, 44</value>
|
<value>17, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<data name="ilTabIcons.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
<data name="ilProfilePics.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
<value>
|
<value>
|
||||||
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
|
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
|
||||||
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
|
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
|
||||||
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAshIAAAJNU0Z0AUkBTAIBAQQB
|
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA0A0AAAJNU0Z0AUkBTAMBAQAB
|
||||||
AAEQAQMBEAEDARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASD/
|
MAECATABAgEgAQABIAEABP8BIQEACP8BQgFNATYHAAE2AwABKAMAAYADAAEgAwABAQEAASAGAAFAEgAD
|
||||||
AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/ACIAA2cB7wJnAVkB7wFnAV0BWQHvAWcBWwFZAe8B
|
rQH/A7oB/wO6Af8DuQH/A7oB/wO6Af8D2gX/A/wB/wP+Df8D/QH/A/wR/wP8Af8D/g3/A/0B/wPZAf8D
|
||||||
ZwFbAVkB7wFnAlkB7wFnAWQBWQHvA2cB7wNnAe8DZwHvA2cB7wNnAe8DZwHvA2cB7wNnAe8DZwHvAwcB
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af//AIEAA58B/wO6Af8DugH/A7oB/wO6Af8DugH/A9oJ/wP9Af8D
|
||||||
CQMqAT8DRQF8A1kBuwNjAd8DaAH0A4AB/gOBAf8DgQH/A4EB/wOAAf4DaAH0A2MB3wNaAboDRAF6AycB
|
/g3/A/0B/wP9Ef8D/AH/A/4N/wPaAf8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af//AIEAA6IB/wO6Af8D
|
||||||
OjgAAzMBUQNuAfUIAAM3AVoDWAG4A2MB3wJjAV0B3wFiAl0B3wNdAd8DXQHfAWECXQHfA2MB3wNjAd8D
|
ugH/A7oB/wO6Af8DugH/A9oN/wP8Af8D/iX/A/wN/wPaAf8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af//
|
||||||
VQGsAzABSwgAA/gB/wG5AZUBPAH/AYMBfQFuAf8BhAF9AWwB/wGqAYQBJwH/AawBewEAAf8BzAG8AZQB
|
AIEAA6UB/wO6Af8DugH/A7oB/wO6Af8DugH/A9kR/wP+Ff8D/R3/A9oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
/wN+Af8DfgH/A34B/wN+Af8DfgH/A34B/wN+Af8DfgH/A44B/wNDAXUDXQHMA3wB+AOBAf8DgQH/A4EB
|
ugH/A7oB//8AgQADpAH/A7kB/wO6Af8DugH/A7oB/wO6Af8D2QH/A/wV/wP+Df8D/QH/A/0R/wP+Af8D
|
||||||
/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A3wB+ANUAag4AAMSARgDPwFtBAADOwFiA10B
|
/gH/A9oB/wO6Af8DugH/A7kB/wO6Af8DugH/A7oB//8AgQADoQH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
xQNoAfQBnwFlATEB/wGXAVMBFwH/AZYBSwEJAf8BkwFGAQEB/wGMAUMBAwH/AX0BQAELAf8BawFAARoB
|
2gH/A/4B/wP9Ef8D/AH/A/4N/wP9Af8D/RH/A/wB/wPZAf8DugH/A7oB/wO6Af8DuQH/A7oB/wO6Af//
|
||||||
/wFuAVABNgH/A2gB8ANaAbcDNAFUBAAE/wGXAYsBbQH/AoEBgAH/AYIBgQGAAf8BmAGIAWAB/wHKAZAB
|
AIEAA58B/wO6Af8DugH/A7oB/wO6Af8DugH/A9oF/wP9Af8D/RH/A/0B/wP+Df8D/QH/A/0R/wPZAf8D
|
||||||
AAH/Ad0BzAGfAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOTAf8DagHtA30B+gOBAf8D
|
ugH/A7oB/wO6Af8DugH/A7kB/wO6Af//AIEAA7EB/wO6Af8DugH/A7oB/wO6Af8DugH/A9MJ/wP+Ff8D
|
||||||
gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvNAADXwHTAz0B
|
/AH/A/4h/wPTAf8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af//AIEAA7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
ZwQAAzUBVQNdAccCbgFaAfUBuAFlARsB/wG5AVgBAgH/AckBXwEAAf8B2AFlAQAB/wHcAWcBAAH/AdYB
|
uQH/A8AB/wP9Df8D/hH/A/4V/wP9Bf8D/QH/A8AB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQAD
|
||||||
ZAEAAf8BwwFcAQAB/wGiAUwBAAH/AXwBOwEDAf8BbgFGASMB/wNoAfADWgG3AzABSgT/AYYBhAF9Af8D
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A9oN/wP+Af8D/RX/A/4N/wP9Af8D/AH/A9oB/wO6Af8D
|
||||||
gQH/A4EB/wGHAYMBegH/Ac8BlAEAAf8B3gHMAZ8B/wPgAf8D4AH/A+AB/wPgAf8D4AH/A+AB/wPgAf8D
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af//AIEAA7oB/wO5Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
4AH/A7wB/wNjAd8DbgH1A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
|
3Q3/A/0B/wP9Ef8D/QH/A/4N/wPcAf8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQAD
|
||||||
gQH/A4EB/wNVAa80AANaAcIDNAFTBAADXAHEAnwBXAH4AdQBcQEYAf8B1wFlAQAB/wHlAWwBAAH/AfIB
|
ugH/A7oB/wO5Af8DuQH/A7oB/wO6Af8DugH/A7oB/wO5Af8DyQH/A+wB/wP+Bf8D/gH/A/wR/wP9Af8D
|
||||||
cgEAAf8B+gF1AQAB/wH8AXYBAAH/AfoBdgEAAf8B8wFyAQAB/wHiAWsBAAH/Ab0BWQEAAf8BhwFAAQAB
|
/QH/A+wB/wPKAf8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af//AIEAA7oB/wO6Af8D
|
||||||
/wFxAUgBIwH/A2gB8ANWAasE/wGLAYYBegH/A4EB/wOBAf8BjgGGAXEB/wHPAZQBAAH/Ad4BzAGfIf8D
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7kB/wO6Af8DwQH/A9IB/wPfAf8D5gH/A+oB/wPrAf8D
|
||||||
ygH/AzYBWANbAcADbgH1A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
|
5wH/A98B/wPSAf8DwAH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af//
|
||||||
aAH0A1IBpBAAAw0BEQM/AWwDUwGnAVwCWQG+AVgCVgGzAUgCRwGDAyEBMAQAA28B8wM6AWAIAAH+Ad0B
|
AIEAA7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
wQH/Ae0BgAEgAf8B7QFxAQIB/wHzAXMBAAH/AfoBdgEAAf8B/gF4AQAC/wF7AQgC/wGIAScC/wGiAVMB
|
vQH/A8cB/wPGAf8DvQH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
/wH+AYEBFwH/AfwBeAEEAf8B7AFvAQAB/wHBAVsBAAH/AYYBQQEDAf8BeAFWATYB/wNjAd8E/wGsAZYB
|
ugH/A7oB/wO6Af//AIEAA7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
YAH/AYMBggF/Af8BhQGCAX0B/wGzAZMBRAH/Ac8BlAEAAf8B3gHMAZ8B/wOwAf8DsAH/A7AB/wOwAf8D
|
ugH/A8IB/wPnAf8D/QX/A/4B/wP6Af8D5gH/A8IB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
sAH/A7AB/wOwAf8DsAH/A6gB/wMCAQMDGgEjAzgBXANUAagDYgHXA3AB8QOAAf4DgQH/A4EB/wOBAf8D
|
ugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
gQH9A2gB8ANhAdQDUwGlAzYBWQMYASAIAAMaASQDUgGgAmMBSAH2AaIBcwEAAf8BrgF8AQAB/wGwAX0B
|
ugH/A7oB/wPIAf8D+QH/A/0N/wP9Af8D/QH/A/oB/wPIAf8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
AAH/AagBeAEAAf8BlQFqAQAB/wKAAWIB/gFcAlkBxgNXAbUDFgEeCAAB/wGyAW8B/wH9AYABEQH/AfwB
|
ugH/A7oB/wO5Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
dwEBAf8B/QF3AQAC/wF4AQAC/wF/AQ8C/wGSATsC/wGzAYMC/wHqAeAC/wGQAT0C/wF7AQoB/wH8AXcB
|
ugH/A74B/wP4Bf8D/AH/A/4N/wP9Af8D/AH/A/gB/wO+Af8DugH/A7oB/wO6Af8DuQH/A7oB/wO6Af8D
|
||||||
AAH/AeUBbAEAAf8BsQFUAQAB/wGEAUsBGgH/A2MB3wT/AdkBqgE3Af8BvgGYATgB/wHAAZgBNgH/AdwB
|
ugH/A7oB/wO5Af8DugH//wCBAAO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7kB/wO6Af8D
|
||||||
ogEUAf8BzwGUAQAB/wHeAcwBnwH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DkwH/RAAD
|
2w3/A/0B/wP9Df8D/QH/A/4B/wPbAf8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
IAEtAmMBWgHpAb8BiAEAAf8BzQGVAQoB/wGwAYgBJwH/AXMBZAE/Af8BTQFLAUcB/wFOAUsBQgH/AWYB
|
ugH//wCBAAO6Af8DugH/A7oB/wO6Af8DugH/A7kB/wO6Af8DugH/A7oB/wO6Af8D8BH/A/wB/wP+Ef8D
|
||||||
VwExAf8BmgF0ARcB/wGkAXYBAwH/AXABTwEAAf8DQwF2BAEEAAH/AZoBQgL/AYMBFQH/Af4BegEEAv8B
|
8AH/A7oB/wO6Af8DugH/A7oB/wO5Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8D
|
||||||
eAEAAv8BeAEAAv8BlQE/Av8BygGuAv8B2gHGAv8B7QHlAv8BlgFJAv8BfAENAf8B/gF4AQAB/wH0AXMB
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A/gB/wP9Jf8D+AH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
AAH/AdABYgEAAf8BmgFOAQoB/wFjAl0B3wT/AeEBrgExAf8BvQGXATsB/wHAAZgBNQH/AeMBpQEKAf8B
|
ugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
zwGUAQAB/wHeAcwBnwH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DrwH/CAADAgEDAwgB
|
ugH/A/QB/wP9Af8D/BH/A/4B/wP+Cf8D9QH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
CgMhAS8DMQFOAz0BaANDAXYDRAF6A0MBdQM9AWcDMQFNAyABLgMHAQkEAggAAmMBWgHpAdkBmgEAAf8B
|
ugH/A7oB//8AgQADugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A+UF/wP+Af8D
|
||||||
2gGjARwB/wKOAYwB/wOKAf8DlwH/A5sB/wORAf8DdAH/A0gB/wFDAUIBPwH/AbUBgwEHAf8BegFXAQAB
|
/BH/A/wB/wP9Bf8D5QH/A7oB/wO5Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQAD
|
||||||
/wM2AVgEAAH/AZUBNwL/AYkBHwL/AX0BCAL/AXgBAAL/AXgBAAL/AagBXAL/AeABzQL/AaEBZgL/AdgB
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DuQH/A8gB/wP+Bf8D/gH/A/wR/wP9Af8D
|
||||||
xQL/AbkBlAL/AYcBIwL/AXgBAAH/AfsBdgEAAf8B4gFqAQAB/wGvAVQBAwH/AWMCXQHfBP8BuwGdAVMB
|
/QH/A8gB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7kB/wO6Af//AIEAA7oB/wO6Af8D
|
||||||
/wGIAYQBeQH/AYwBhQF0Af8BxAGZATAB/wHPAZQBAAH/Ad4BzAGfIf8DygH/BAADEwEaAzkBXQNZAbwD
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D3Qn/A/4V/wPcAf8DugH/A7oB/wO6Af8D
|
||||||
ZAHbA2oB7QNjAfYDXwH7A4EB/QNfAfsDYwH2A2UB7ANjAdoDWgG6AzgBXAMTARoDQwF2AekBpwECAf8B
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
6QGrARIB/wHQAcoBuwH/A6wB/wNdAf8DTAH/A0sB/wNEAf8DDwH/A7MB/wNmAf8BVAFMAToB/wGuAX0B
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D2QH/A/wJ/wP+Bf8D/AH/A9kB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
BAH/A10BzAQAAf8BoAFJAv8BkgExAv8BgQERAv8BeQEDAv8BeAEAAv8BqAFcAv8B4AHNAv8BoQFmAv8B
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
2AHFAv8BwAGfAv8BiQEnAv8BeAEAAf8B/gF4AQAB/wHsAW8BAAH/Ab8BWgECAf8BYwJdAd8E/wGUAYoB
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A8AB/wPWAf8D4gH/A+EB/wPVAf8DwAH/A7oB/wO6Af8D
|
||||||
cwH/A4EB/wOBAf8BmgGKAWMB/wHPAZQBAAH/Ad4BzAGfAf8D0AH/A9AB/wPQAf8D0AH/A9AB/wPQAf8D
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8D
|
||||||
0AH/A9AB/wO1Af8DGgEkA1YBrgNoAfQDgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
|
ugH/A7oB/wO6Af8DugH/A7kB/wO6Af8DugH/A7oB/wO6Af8DugH/A7kB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
gQH/A4EB/wNrAfIDUgGhAmoBYQHmAe0BrQEQAf8B9AHQAXYB/wP6Af8D+gH/A30B/wN/Af8DgAH/A4AB
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQAD
|
||||||
/wN+Af8DhAH/A7sB/wNqAf8BqAGAARwB/wJjAUgB9gQAAf8BswFvAv8BngFIAv8BiAEeAv8BfAEHAv8B
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO5Af8D
|
||||||
eAEAAv8BmAFDAv8BzgG0Av8B1wHAAv8B6gHgAv8BnQFXAv8BfgERAv8BeAEAAv8BeAEAAf8B8AFxAQAB
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO5Af8D
|
||||||
/wHLAWQBCQH/AWMBYQFdAd8E/wGGAYMBfgH/A4EB/wOBAf8BhgGDAXsB/wHPAZQBAAH/Ad4BzAGfAf8D
|
uQH/A7oB//8AgQADugH/A7oB/wO6Af8DuQH/A7oB/wO6Af8DugH/A7oB/wO5Af8DugH/A7oB/wO6Af8D
|
||||||
gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOTAf8DVwGyA2UB5wOBAf8DgQH/A4EB/wOBAf8D
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO5Af8D
|
||||||
gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvA2IB7gHvAbQBIQH/AfcB3AGXCf8D
|
ugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8DugH/A7kB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
kQH/A4gB/wOHAf8DhwH/A4EB/wNXAf8D5gH/A6MB/wG2AZEBNgH/AmoBQQH5BAAB/wHMAZ8C/wGsAWMC
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DuQH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
/wGTATMC/wGBAREC/wF5AQIC/wGCARYC/wGaAUsC/wGuAXgC/wGlAVcC/wGBARcC/wF5AQQC/wF4AQAC
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
/wF4AQAB/wHwAXEBAAH/AdUBcQEXAf8CYwFdAd8E/wGLAYYBeQH/A4EB/wOBAf8BjgGGAXEB/wHPAZQB
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
AAH/Ad4BzAGfAf8DoQH/A6EB/wOhAf8DoQH/A6EB/wOhAf8DoQH/A6EB/wOhAf8DbwHzA18B+wOBAf8D
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQADugH/A7oB/wO6Af8D
|
||||||
gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvA0sBjQHwAb4B
|
ugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8D
|
||||||
PwH/AfQBzQFsIf8D+wH/A9AB/wHXAacBMQH/AmEBXQHRBAAB/wHpAdUC/wG8AYEC/wGkAVQC/wGOASoC
|
ugH/A7oB/wO6Af8DugH/A7kB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB//8AgQAB
|
||||||
/wF/AQ0C/wF5AQIC/wF7AQkC/wGCAR0C/wF4AQAC/wF4AQAC/wF4AQEC/wF6AQQC/wF6AQMB/wHzAXQB
|
QgFNAT4HAAE+AwABKAMAAYADAAEgAwABAQEAAQEGAAECFgAD//8A/wADAAs=
|
||||||
AwH/AeIBhAEyAf8DYwHfBP8BpwGUAWcB/wGDAYIBfwH/AYUBgwF+Af8BsAGUAU4B/wHTAZcBAgH/AeAB
|
|
||||||
zgGfAf8D5wH/A+cB/wPnAf8D5wH/A+cB/wPnAf8D5wH/A+cB/wPAAf8DZAHbA2gB9AOBAf8DgQH/A4EB
|
|
||||||
/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvAwcBCQNiAe4B8QG8ATsB
|
|
||||||
/wH6AeoBwgH/A9wB/wN3Af8DaAH/A2gB/wNoAf8DMgn/AfIB3QGpAf8B6gGpAQgB/wM+AWoEAANeAdID
|
|
||||||
agH5Af8BuwF9Av8BowFSAv8BkAEsAv8BggETAv8BfQEIAv8BegEEAv8BeQECAv8BegEEAv8BfQEJAv8B
|
|
||||||
gAEPAv8BfwENAf8B+AGGASAB/wNoAfQDWAG4BP8B1wGxAVIB/wGaAY8BdAH/AaABkgFtAf8B4AGvATcB
|
|
||||||
/wHnAakBEAH/AesB1QGgAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOTAf8DPAFkA18B
|
|
||||||
yQN9AfoDgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wN9AfoDVQGqBAAD
|
|
||||||
MwFRA2gB8AHzAcYBWAH/AfoB5wG4Fv8B/gH7Af8B+QHiAaoB/wHvAbgBLQH/A04BlgQCBAADPAFmA2MB
|
|
||||||
1QN8AfgB/wG+AYUC/wGqAV8C/wGZAT4C/wGNAScC/wGGARoC/wGDARUC/wGFARkC/wGKASIC/wGNASgC
|
|
||||||
/wGTATMB/wJuAWgB9QNdAcUDNgFZBP8B9AHNAWwB/wH0AcsBZgH/AfQBywFlAf8B9AHLAWUB/wHxAcEB
|
|
||||||
SQH/AfkB4wGsAf8DiQH/A4kB/wOJAf8DiQH/A4kB/wOJAf8DiQH/A4kB/wOaAf8DBgEIAzEBTANQAZsD
|
|
||||||
ZQHsA30B+gOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DfQH6A2oB7QNQAZsDLwFJCAADIgExA18B
|
|
||||||
yQJ9AWcB+gHzAcoBZQH/AfkB4QGmAf8B+wHtAcwB/wH7AewByAH/AfgB3QGbAf8DgAH+AmUBXgHiAz0B
|
|
||||||
aAQBDAADQgFyA2MB1QNqAfkB/wHJAZkC/wG8AX8C/wGuAWYC/wGkAVMC/wGfAUoC/wGfAUsC/wGjAVEC
|
|
||||||
/wGnAVgB/wN8AfgDXQHHAzsBYgQAQP8IAAMFAQYDEgEXAzoBYANRAZ8DXwHTA2cB7wNjAfYDYgHuA14B
|
|
||||||
0gNRAZ4DOQFfAxEBFgMFAQYUAAMPARMDRwGCA2QB2wJ+AW8B/ANnAeoDVAGoAygBOxwAAzwBZQNeAdIB
|
|
||||||
/wHvAeAC/wHcAbwC/wHNAZ8C/wHBAYoC/wG7AX8C/wG/AYYC/wHNAaEC/wHpAdYB/wNcAcQDNQFVCAAB
|
|
||||||
QgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/4UAAf8B/AHAAQMEAAH/AfwBgAEBBAAB
|
|
||||||
/wH5BgAB/wH5BgAB8AETBgABwAEDBAAC/wGAAQEEAAHAAQEBgAEBBAABgAIAAQEHAAEBBwABAQcAAQEH
|
|
||||||
AAEBBgABgAEBBgABwAEDAYABAQIAAcABAQHwAR8BwAEDCw==
|
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="ctxmChangeStatus.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="ctxmChangeStatus.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
|||||||
@ -26,6 +26,7 @@ namespace qtc_net_client_2.Forms
|
|||||||
public partial class Profile : Form
|
public partial class Profile : Form
|
||||||
{
|
{
|
||||||
private UserInformationDto _userInformationDto;
|
private UserInformationDto _userInformationDto;
|
||||||
|
private ImageFactory _imgFactory = new();
|
||||||
private IApiService _apiService;
|
private IApiService _apiService;
|
||||||
private IGatewayService _gatewayService;
|
private IGatewayService _gatewayService;
|
||||||
|
|
||||||
@ -85,7 +86,7 @@ namespace qtc_net_client_2.Forms
|
|||||||
cosmetic = new Bitmap(ms);
|
cosmetic = new Bitmap(ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
CreateProfileImage(precenseImage, pfp, cosmetic);
|
pbUserPfp.Image = _imgFactory.CreateProfileImage(precenseImage, pfp, cosmetic);
|
||||||
precenseImage.Dispose();
|
precenseImage.Dispose();
|
||||||
pfp?.Dispose();
|
pfp?.Dispose();
|
||||||
cosmetic?.Dispose();
|
cosmetic?.Dispose();
|
||||||
@ -181,6 +182,9 @@ namespace qtc_net_client_2.Forms
|
|||||||
|
|
||||||
private async void btnAddContact_Click_Remove(object sender, EventArgs e)
|
private async void btnAddContact_Click_Remove(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
var msgBoxResult = MessageBox.Show("Are You Sure You Want To Remove This User From Your Contacts?", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
|
||||||
|
if (msgBoxResult == DialogResult.No) return;
|
||||||
|
|
||||||
var result = await _apiService.RemoveContactFromCurrentUser(_userInformationDto.Id);
|
var result = await _apiService.RemoveContactFromCurrentUser(_userInformationDto.Id);
|
||||||
if (result.Success)
|
if (result.Success)
|
||||||
{
|
{
|
||||||
@ -207,6 +211,9 @@ namespace qtc_net_client_2.Forms
|
|||||||
|
|
||||||
private async void btnDecline_Click(object sender, EventArgs e)
|
private async void btnDecline_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
var msgBoxResult = MessageBox.Show("Are You Sure You Want To Decline This Request?", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
|
||||||
|
if (msgBoxResult == DialogResult.No) return;
|
||||||
|
|
||||||
var result = await _apiService.RemoveContactFromCurrentUser(_userInformationDto.Id);
|
var result = await _apiService.RemoveContactFromCurrentUser(_userInformationDto.Id);
|
||||||
if (result.Success)
|
if (result.Success)
|
||||||
{
|
{
|
||||||
@ -221,6 +228,9 @@ namespace qtc_net_client_2.Forms
|
|||||||
|
|
||||||
private async void btnCancelRequest_Click(object sender, EventArgs e)
|
private async void btnCancelRequest_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
var msgBoxResult = MessageBox.Show("Are You Sure You Want To Cancel This Request?", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
|
||||||
|
if (msgBoxResult == DialogResult.No) return;
|
||||||
|
|
||||||
var result = await _apiService.RemoveContactFromCurrentUser(_userInformationDto.Id);
|
var result = await _apiService.RemoveContactFromCurrentUser(_userInformationDto.Id);
|
||||||
if (result.Success)
|
if (result.Success)
|
||||||
{
|
{
|
||||||
@ -238,32 +248,5 @@ namespace qtc_net_client_2.Forms
|
|||||||
Close();
|
Close();
|
||||||
frmDirectMessage.Show();
|
frmDirectMessage.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CreateProfileImage(Bitmap precenseImage, Bitmap? pfp = null, Bitmap? cosmetic = null)
|
|
||||||
{
|
|
||||||
Bitmap combined = new Bitmap(139, 138);
|
|
||||||
|
|
||||||
using Graphics g = Graphics.FromImage(combined);
|
|
||||||
g.Clear(Color.Transparent);
|
|
||||||
g.CompositingMode = CompositingMode.SourceOver;
|
|
||||||
|
|
||||||
if (pfp != null)
|
|
||||||
{
|
|
||||||
pfp.MakeTransparent();
|
|
||||||
g.DrawImage(pfp, 4, 6, 128, 128);
|
|
||||||
}
|
|
||||||
else g.DrawImage(pbUserPfp.Image, 4, 6, 128, 128);
|
|
||||||
|
|
||||||
if (cosmetic != null)
|
|
||||||
{
|
|
||||||
cosmetic.MakeTransparent();
|
|
||||||
g.DrawImage(cosmetic, 0, 0, 139, 138);
|
|
||||||
}
|
|
||||||
|
|
||||||
precenseImage.MakeTransparent();
|
|
||||||
g.DrawImage(precenseImage, 104, 0, 35, 35);
|
|
||||||
|
|
||||||
pbUserPfp.Image = combined;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,6 +17,7 @@ namespace qtc_net_client_2.Forms
|
|||||||
public partial class ProfileEdit : Form
|
public partial class ProfileEdit : Form
|
||||||
{
|
{
|
||||||
IApiService _apiService;
|
IApiService _apiService;
|
||||||
|
private int currentCosmetic = 0;
|
||||||
public ProfileEdit(IApiService apiService)
|
public ProfileEdit(IApiService apiService)
|
||||||
{
|
{
|
||||||
_apiService = apiService;
|
_apiService = apiService;
|
||||||
@ -65,11 +66,13 @@ namespace qtc_net_client_2.Forms
|
|||||||
|
|
||||||
cbCosmetic.DataSource = items;
|
cbCosmetic.DataSource = items;
|
||||||
cbCosmetic.SelectedIndex = cbCosmetic.Items.IndexOf(items.FirstOrDefault(e => (int?)e.Value == _apiService.CurrentUser.ActiveProfileCosmetic));
|
cbCosmetic.SelectedIndex = cbCosmetic.Items.IndexOf(items.FirstOrDefault(e => (int?)e.Value == _apiService.CurrentUser.ActiveProfileCosmetic));
|
||||||
|
currentCosmetic = cbCosmetic.Items.IndexOf(items.FirstOrDefault(e => (int?)e.Value == _apiService.CurrentUser.ActiveProfileCosmetic));
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void btnSave_Click(object sender, EventArgs e)
|
private async void btnSave_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
ComboBoxItem? selectedItem = (ComboBoxItem?)cbCosmetic.SelectedItem;
|
ComboBoxItem? selectedItem = (ComboBoxItem?)cbCosmetic.SelectedItem;
|
||||||
|
int selectedItemId = 0;
|
||||||
|
|
||||||
// update user info
|
// update user info
|
||||||
UserUpdateInformationDto userUpdateInformationDto = new UserUpdateInformationDto
|
UserUpdateInformationDto userUpdateInformationDto = new UserUpdateInformationDto
|
||||||
@ -82,7 +85,7 @@ namespace qtc_net_client_2.Forms
|
|||||||
|
|
||||||
if (selectedItem != null)
|
if (selectedItem != null)
|
||||||
{
|
{
|
||||||
int selectedItemId = (int?)selectedItem.Value ?? 0;
|
selectedItemId = (int?)selectedItem.Value ?? 0;
|
||||||
userUpdateInformationDto.ProfileCosmeticId = selectedItemId;
|
userUpdateInformationDto.ProfileCosmeticId = selectedItemId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,7 +93,8 @@ namespace qtc_net_client_2.Forms
|
|||||||
|
|
||||||
if (res.Success)
|
if (res.Success)
|
||||||
{
|
{
|
||||||
DialogResult = DialogResult.OK;
|
if (currentCosmetic != selectedItemId) DialogResult = DialogResult.Yes; // trigger ui refresh
|
||||||
|
else DialogResult = DialogResult.OK;
|
||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@ -87,10 +87,12 @@ namespace qtc_net_client_2.Forms
|
|||||||
};
|
};
|
||||||
|
|
||||||
await _apiService.UpdateUserInformationAsync(updateDto);
|
await _apiService.UpdateUserInformationAsync(updateDto);
|
||||||
|
DialogResult = DialogResult.Yes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else MessageBox.Show("We Weren't Able To Complete Your Purchase.\nYou May Not Have Enough Funds For This Item.", "Oops.", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
else MessageBox.Show("We Weren't Able To Complete Your Purchase.\nYou May Not Have Enough Funds For This Item.", "Oops.", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
|
||||||
|
DialogResult = DialogResult.OK;
|
||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
14
qtc-net-client-2/Properties/Resources.Designer.cs
generated
14
qtc-net-client-2/Properties/Resources.Designer.cs
generated
@ -19,7 +19,7 @@ namespace qtc_net_client_2.Properties {
|
|||||||
// class via a tool like ResGen or Visual Studio.
|
// class via a tool like ResGen or Visual Studio.
|
||||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
// with the /str option, or rebuild your VS project.
|
// with the /str option, or rebuild your VS project.
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
internal class Resources {
|
internal class Resources {
|
||||||
@ -81,7 +81,7 @@ namespace qtc_net_client_2.Properties {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to 6.3.3.
|
/// Looks up a localized string similar to 6.5.5.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal static string AssemblyVersion {
|
internal static string AssemblyVersion {
|
||||||
get {
|
get {
|
||||||
@ -269,6 +269,16 @@ namespace qtc_net_client_2.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap RoomsChatIcon {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("RoomsChatIcon", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -173,7 +173,7 @@
|
|||||||
<value>..\Icons\MessageIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\Icons\MessageIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AssemblyVersion" xml:space="preserve">
|
<data name="AssemblyVersion" xml:space="preserve">
|
||||||
<value>6.3.3</value>
|
<value>6.5.5</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cobalt_sittingatputer" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="cobalt_sittingatputer" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\cobalt_sittingatputer.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\Resources\cobalt_sittingatputer.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
@ -193,4 +193,7 @@
|
|||||||
<data name="DefaultPfp" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="DefaultPfp" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\DefaultPfp.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\Resources\DefaultPfp.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="RoomsChatIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Icons\RoomsChatIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@ -1,17 +0,0 @@
|
|||||||
using Meziantou.Framework.Win32;
|
|
||||||
|
|
||||||
namespace qtc_net_client_2.Services
|
|
||||||
{
|
|
||||||
public class CredentialService()
|
|
||||||
{
|
|
||||||
public void SaveAccessToken(string username, string accessToken) => CredentialManager.WriteCredential("QtC.NET", username, accessToken, $"Access Token For User {username} On QtC.NET", CredentialPersistence.LocalMachine);
|
|
||||||
|
|
||||||
public string? GetAccessToken()
|
|
||||||
{
|
|
||||||
var credential = CredentialManager.ReadCredential("QtC.NET");
|
|
||||||
if (credential == null) return null;
|
|
||||||
|
|
||||||
return credential.Password;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
40
qtc-net-client-2/Services/ImageFactory.cs
Normal file
40
qtc-net-client-2/Services/ImageFactory.cs
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
using qtc_net_client_2.Properties;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace qtc_net_client_2.Services
|
||||||
|
{
|
||||||
|
public class ImageFactory
|
||||||
|
{
|
||||||
|
public Bitmap CreateProfileImage(Bitmap? precenseImage = null, Bitmap? pfp = null, Bitmap? cosmetic = null)
|
||||||
|
{
|
||||||
|
Bitmap combined = new Bitmap(139, 138);
|
||||||
|
|
||||||
|
using Graphics g = Graphics.FromImage(combined);
|
||||||
|
g.Clear(Color.Transparent);
|
||||||
|
g.CompositingMode = CompositingMode.SourceOver;
|
||||||
|
|
||||||
|
pfp ??= Resources.DefaultPfp;
|
||||||
|
|
||||||
|
g.DrawImage(pfp, 4, 6, 128, 128);
|
||||||
|
|
||||||
|
if (cosmetic != null)
|
||||||
|
{
|
||||||
|
cosmetic.MakeTransparent();
|
||||||
|
g.DrawImage(cosmetic, 0, 0, 139, 138);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(precenseImage != null)
|
||||||
|
{
|
||||||
|
precenseImage.MakeTransparent();
|
||||||
|
g.DrawImage(precenseImage, 104, 0, 35, 35);
|
||||||
|
}
|
||||||
|
|
||||||
|
return combined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -18,7 +18,6 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Meziantou.Framework.Win32.CredentialManager" Version="1.7.6" />
|
|
||||||
<PackageReference Include="NAudio" Version="2.2.1" />
|
<PackageReference Include="NAudio" Version="2.2.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user