From 240bf9e9d72a2513fb72d4e6f6fa3c2720f2a909 Mon Sep 17 00:00:00 2001 From: AlanMoonbase Date: Sun, 22 Jun 2025 15:38:41 -0700 Subject: [PATCH] Fix Profile Pic Icon Size In Contacts List Ensure Profile Form Is Disposed On Close (https://git.alanmoon.net/Moonbase/qtc-net-server/issues/1) --- qtc-net-client-2/Forms/Main.Designer.cs | 5 +- qtc-net-client-2/Forms/Main.cs | 12 ++-- qtc-net-client-2/Forms/Main.resx | 78 +++++++++++----------- qtc-net-client-2/Forms/Profile.Designer.cs | 1 + qtc-net-client-2/Forms/Profile.cs | 24 +++++-- 5 files changed, 68 insertions(+), 52 deletions(-) diff --git a/qtc-net-client-2/Forms/Main.Designer.cs b/qtc-net-client-2/Forms/Main.Designer.cs index da4cb21..0adef81 100644 --- a/qtc-net-client-2/Forms/Main.Designer.cs +++ b/qtc-net-client-2/Forms/Main.Designer.cs @@ -93,18 +93,19 @@ // lvContacts.LargeImageList = ilProfilePics; lvContacts.Location = new Point(0, 0); + lvContacts.MultiSelect = false; lvContacts.Name = "lvContacts"; lvContacts.Size = new Size(250, 507); lvContacts.SmallImageList = ilProfilePics; lvContacts.TabIndex = 1; lvContacts.UseCompatibleStateImageBehavior = false; - lvContacts.View = View.List; + lvContacts.View = View.SmallIcon; lvContacts.DoubleClick += lvContacts_DoubleClick; // // ilProfilePics // ilProfilePics.ColorDepth = ColorDepth.Depth32Bit; - ilProfilePics.ImageSize = new Size(16, 16); + ilProfilePics.ImageSize = new Size(32, 32); ilProfilePics.TransparentColor = Color.Transparent; // // tbpRooms diff --git a/qtc-net-client-2/Forms/Main.cs b/qtc-net-client-2/Forms/Main.cs index 19cdd23..1384459 100644 --- a/qtc-net-client-2/Forms/Main.cs +++ b/qtc-net-client-2/Forms/Main.cs @@ -141,11 +141,13 @@ namespace qtc_net_client_2 if (selectedUser != null) { // get user info and open profile dialog - var res = await _apiService.GetUserInformationAsync(OnlineUsers.FirstOrDefault(e => e.Username == selectedUser)!.Id); + var user = OnlineUsers.FirstOrDefault(e => e.Username == selectedUser); + var res = await _apiService.GetUserInformationAsync(user!.Id); + var pfpRes = await _apiService.GetUserProfilePic(user!.Id); if (res.Data != null && res.Success) { - Profile frmProfile = new Profile(res.Data, _apiService, _gatewayService); + Profile frmProfile = new Profile(res.Data, pfpRes, _apiService, _gatewayService); frmProfile.ShowDialog(); } } @@ -174,11 +176,13 @@ namespace qtc_net_client_2 if (selectedUser.Contains('[')) selectedUser = selectedUser.Split('[', options: StringSplitOptions.TrimEntries)[0]; // get user info and open profile dialog - var res = await _apiService.GetUserInformationAsync(Contacts.FirstOrDefault(e => e.Username == selectedUser)!.Id); + var user = Contacts.FirstOrDefault(e => e.Username == selectedUser); + var res = await _apiService.GetUserInformationAsync(user!.Id); + var pfpRes = await _apiService.GetUserProfilePic(user!.Id); if (res.Data != null && res.Success) { - Profile frmProfile = new Profile(res.Data, _apiService, _gatewayService); + Profile frmProfile = new Profile(res.Data, pfpRes, _apiService, _gatewayService); frmProfile.ShowDialog(); } } diff --git a/qtc-net-client-2/Forms/Main.resx b/qtc-net-client-2/Forms/Main.resx index aa6b87b..646548f 100644 --- a/qtc-net-client-2/Forms/Main.resx +++ b/qtc-net-client-2/Forms/Main.resx @@ -127,45 +127,45 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu - SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA8AgAAAJNU0Z0AUkBTAIBAQIB - AAGIAQABiAEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAARADAAEBAQABIAYAARAS - AANtAe8BawFnAVYB7wFnAV0BVgHvAWcBWwFWAe8BZwFbAVYB7wFnAVkBVgHvAWcBZAFZAe8DZwHvA2cB - 7wNnAe8DZwHvA2cB7wNnAe8DZwHvA2cB7wNnAe84AAMzAVEDhQH1gAAD+AH/AbkBlQE8Af8BgwF9AW4B - /wGEAX0BbAH/AaoBhAEnAf8BrAF7AQAB/wHMAbwBlAH/A34B/wN+Af8DfgH/A34B/wN+Af8DfgH/A34B - /wN+Af8DjgH/OAADEgEYAz8BbYAABP8BlwGLAW0B/wKBAYAB/wGCAYEBgAH/AZgBiAFgAf8BygGQAQAB - /wHdAcwBnwH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DkwH/NAADXwHTAz0BZ4QABP8B - hgGEAX0B/wOBAf8DgQH/AYcBgwF6Af8BzwGUAQAB/wHeAcwBnwH/A+AB/wPgAf8D4AH/A+AB/wPgAf8D - 4AH/A+AB/wPgAf8DvAH/NAADWgHCAzQBU4QABP8BiwGGAXoB/wOBAf8DgQH/AY4BhgFxAf8BzwGUAQAB - /wHeAcwBnyH/A8oB/xAAAw0BEQM/AWwDUwGnAVwCWQG+AVgCVgGzAUgCRwGDAyEBMAQAA4EB8wM6AWCI - AAT/AawBlgFgAf8BgwGCAX8B/wGFAYIBfQH/AbMBkwFEAf8BzwGUAQAB/wHeAcwBnwH/A7AB/wOwAf8D - sAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DqAH/CAADGgEkA1IBoAFxAWMBPwH2AaIBcwEAAf8BrgF8AQAB - /wGwAX0BAAH/AagBeAEAAf8BlQFqAQAB/wGAAWUBEQH+AVwCWQHGA1cBtQMWAR6IAAT/AdkBqgE3Af8B - vgGYATgB/wHAAZgBNgH/AdwBogEUAf8BzwGUAQAB/wHeAcwBnwH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D - gQH/A4EB/wOBAf8DkwH/BAADIAEtAWYBYwFaAekBvwGIAQAB/wHNAZUBCgH/AbABiAEnAf8BcwFkAT8B - /wFNAUsBRwH/AU4BSwFCAf8BZgFXATEB/wGaAXQBFwH/AaQBdgEDAf8BcAFPAQAB/wNDAXYEAYQABP8B - 4QGuATEB/wG9AZcBOwH/AcABmAE1Af8B4wGlAQoB/wHPAZQBAAH/Ad4BzAGfAf8DwAH/A8AB/wPAAf8D - wAH/A8AB/wPAAf8DwAH/A8AB/wOvAf8EAAFoAWMBWgHpAdkBmgEAAf8B2gGjARwB/wKOAYwB/wOKAf8D - lwH/A5sB/wORAf8DdAH/A0gB/wFDAUIBPwH/AbUBgwEHAf8BegFXAQAB/wM2AViEAAT/AbsBnQFTAf8B - iAGEAXkB/wGMAYUBdAH/AcQBmQEwAf8BzwGUAQAB/wHeAcwBnyH/A8oB/wNDAXYB6QGnAQIB/wHpAasB - EgH/AdABygG7Af8DrAH/A10B/wNMAf8DSwH/A0QB/wMPAf8DswH/A2YB/wFUAUwBOgH/Aa4BfQEEAf8D - XQHMhAAE/wGUAYoBcwH/A4EB/wOBAf8BmgGKAWMB/wHPAZQBAAH/Ad4BzAGfAf8D0AH/A9AB/wPQAf8D - 0AH/A9AB/wPQAf8D0AH/A9AB/wO1Af8CagFhAeYB7QGtARAB/wH0AdABdgH/A/oB/wP6Af8DfQH/A38B - /wOAAf8DgAH/A34B/wOEAf8DuwH/A2oB/wGoAYABHAH/AXIBYwE/AfaEAAT/AYYBgwF+Af8DgQH/A4EB - /wGGAYMBewH/Ac8BlAEAAf8B3gHMAZ8B/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A5MB - /wFvAWwBYAHuAe8BtAEhAf8B9wHcAZcJ/wORAf8DiAH/A4cB/wOHAf8DgQH/A1cB/wPmAf8DowH/AbYB - kQE2Af8BigFqATIB+YQABP8BiwGGAXkB/wOBAf8DgQH/AY4BhgFxAf8BzwGUAQAB/wHeAcwBnwH/A6EB - /wOhAf8DoQH/A6EB/wOhAf8DoQH/A6EB/wOhAf8DoQH/A0sBjQHwAb4BPwH/AfQBzQFsIf8D+wH/A9AB - /wHXAacBMQH/AmEBXQHRhAAE/wGnAZQBZwH/AYMBggF/Af8BhQGDAX4B/wGwAZQBTgH/AdMBlwECAf8B - 4AHOAZ8B/wPnAf8D5wH/A+cB/wPnAf8D5wH/A+cB/wPnAf8D5wH/A8AB/wMHAQkBbwFtAWIB7gHxAbwB - OwH/AfoB6gHCAf8D3AH/A3cB/wNoAf8DaAH/A2gB/wMyCf8B8gHdAakB/wHqAakBCAH/Az4BaoQABP8B - 1wGxAVIB/wGaAY8BdAH/AaABkgFtAf8B4AGvATcB/wHnAakBEAH/AesB1QGgAf8DgQH/A4EB/wOBAf8D - gQH/A4EB/wOBAf8DgQH/A4EB/wOTAf8EAAMzAVEBcwFtAWgB8AHzAcYBWAH/AfoB5wG4Fv8B/gH7Af8B - +QHiAaoB/wHvAbgBLQH/A04BlgQChAAE/wH0Ac0BbAH/AfQBywFmAf8B9AHLAWUB/wH0AcsBZQH/AfEB - wQFJAf8B+QHjAawB/wOJAf8DiQH/A4kB/wOJAf8DiQH/A4kB/wOJAf8DiQH/A5oB/wgAAyIBMQNfAckB - qgGZAWcB+gHzAcoBZQH/AfkB4QGmAf8B+wHtAcwB/wH7AewByAH/AfgB3QGbAf8B0AGiAWIB/gJlAV4B - 4gM9AWgEAYgAQP8QAAMPARMDRwGCA2QB2wG+AawBbwH8AWgCZwHqA1QBqAMoATuUAAFCAU0BPgcAAT4D - AAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/AwAB/wH8BgAB/wH8BgAB/wH5BgAB/wH5BgAB8AETBgAB - wAEDBgABgAEBBgABgAEBBwABAQcAAQEHAAEBBwABAQcAAQEGAAGAAQEGAAHAAQMGAAHwAR8EAAs= + SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA5ggAAAJNU0Z0AUkBTAIBAQIB + AAGoAQABqAEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAARADAAEBAQABIAYAARAS + AANnAe8CZwFZAe8BZwFdAVkB7wFnAVsBWQHvAWcBWwFZAe8BZwJZAe8BZwFkAVkB7wNnAe8DZwHvA2cB + 7wNnAe8DZwHvA2cB7wNnAe8DZwHvA2cB7zgAAzMBUQN8AfWAAAP4Af8BuQGVATwB/wGDAX0BbgH/AYQB + fQFsAf8BqgGEAScB/wGsAXsBAAH/AcwBvAGUAf8DfgH/A34B/wN+Af8DfgH/A34B/wN+Af8DfgH/A34B + /wOOAf84AAMSARgDPwFtgAAE/wGXAYsBbQH/AoEBgAH/AYIBgQGAAf8BmAGIAWAB/wHKAZABAAH/Ad0B + zAGfAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOTAf80AANfAdMDPQFnhAAE/wGGAYQB + fQH/A4EB/wOBAf8BhwGDAXoB/wHPAZQBAAH/Ad4BzAGfAf8D4AH/A+AB/wPgAf8D4AH/A+AB/wPgAf8D + 4AH/A+AB/wO8Af80AANaAcIDNAFThAAE/wGLAYYBegH/A4EB/wOBAf8BjgGGAXEB/wHPAZQBAAH/Ad4B + zAGfIf8DygH/EAADDQERAz8BbANTAacBXAJZAb4BWAJWAbMBSAJHAYMDIQEwBAADdgHzAzoBYIgABP8B + rAGWAWAB/wGDAYIBfwH/AYUBggF9Af8BswGTAUQB/wHPAZQBAAH/Ad4BzAGfAf8DsAH/A7AB/wOwAf8D + sAH/A7AB/wOwAf8DsAH/A7AB/wOoAf8IAAMaASQDUgGgAWkBYwFIAfYBogFzAQAB/wGuAXwBAAH/AbAB + fQEAAf8BqAF4AQAB/wGVAWoBAAH/AYABaQEVAf4BXAJZAcYDVwG1AxYBHogABP8B2QGqATcB/wG+AZgB + OAH/AcABmAE2Af8B3AGiARQB/wHPAZQBAAH/Ad4BzAGfAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D + gQH/A4EB/wOTAf8EAAMgAS0CYwFaAekBvwGIAQAB/wHNAZUBCgH/AbABiAEnAf8BcwFkAT8B/wFNAUsB + RwH/AU4BSwFCAf8BZgFXATEB/wGaAXQBFwH/AaQBdgEDAf8BcAFPAQAB/wNDAXYEAYQABP8B4QGuATEB + /wG9AZcBOwH/AcABmAE1Af8B4wGlAQoB/wHPAZQBAAH/Ad4BzAGfAf8DwAH/A8AB/wPAAf8DwAH/A8AB + /wPAAf8DwAH/A8AB/wOvAf8EAAJjAVoB6QHZAZoBAAH/AdoBowEcAf8CjgGMAf8DigH/A5cB/wObAf8D + kQH/A3QB/wNIAf8BQwFCAT8B/wG1AYMBBwH/AXoBVwEAAf8DNgFYhAAE/wG7AZ0BUwH/AYgBhAF5Af8B + jAGFAXQB/wHEAZkBMAH/Ac8BlAEAAf8B3gHMAZ8h/wPKAf8DQwF2AekBpwECAf8B6QGrARIB/wHQAcoB + uwH/A6wB/wNdAf8DTAH/A0sB/wNEAf8DDwH/A7MB/wNmAf8BVAFMAToB/wGuAX0BBAH/A10BzIQABP8B + lAGKAXMB/wOBAf8DgQH/AZoBigFjAf8BzwGUAQAB/wHeAcwBnwH/A9AB/wPQAf8D0AH/A9AB/wPQAf8D + 0AH/A9AB/wPQAf8DtQH/AmoBYQHmAe0BrQEQAf8B9AHQAXYB/wP6Af8D+gH/A30B/wN/Af8DgAH/A4AB + /wN+Af8DhAH/A7sB/wNqAf8BqAGAARwB/wFrAWMBSAH2hAAE/wGGAYMBfgH/A4EB/wOBAf8BhgGDAXsB + /wHPAZQBAAH/Ad4BzAGfAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOTAf8BawFoAWIB + 7gHvAbQBIQH/AfcB3AGXCf8DkQH/A4gB/wOHAf8DhwH/A4EB/wNXAf8D5gH/A6MB/wG2AZEBNgH/AYYB + agE+AfmEAAT/AYsBhgF5Af8DgQH/A4EB/wGOAYYBcQH/Ac8BlAEAAf8B3gHMAZ8B/wOhAf8DoQH/A6EB + /wOhAf8DoQH/A6EB/wOhAf8DoQH/A6EB/wNLAY0B8AG+AT8B/wH0Ac0BbCH/A/sB/wPQAf8B1wGnATEB + /wJhAV0B0YQABP8BpwGUAWcB/wGDAYIBfwH/AYUBgwF+Af8BsAGUAU4B/wHTAZcBAgH/AeABzgGfAf8D + 5wH/A+cB/wPnAf8D5wH/A+cB/wPnAf8D5wH/A+cB/wPAAf8DBwEJAWsBaQFiAe4B8QG8ATsB/wH6AeoB + wgH/A9wB/wN3Af8DaAH/A2gB/wNoAf8DMgn/AfIB3QGpAf8B6gGpAQgB/wM+AWqEAAT/AdcBsQFSAf8B + mgGPAXQB/wGgAZIBbQH/AeABrwE3Af8B5wGpARAB/wHrAdUBoAH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D + gQH/A4EB/wOBAf8DkwH/BAADMwFRAWsBaQFoAfAB8wHGAVgB/wH6AecBuBb/Af4B+wH/AfkB4gGqAf8B + 7wG4AS0B/wNOAZYEAoQABP8B9AHNAWwB/wH0AcsBZgH/AfQBywFlAf8B9AHLAWUB/wHxAcEBSQH/AfkB + 4wGsAf8DiQH/A4kB/wOJAf8DiQH/A4kB/wOJAf8DiQH/A4kB/wOaAf8IAAMiATEDXwHJAaIBjQFnAfoB + 8wHKAWUB/wH5AeEBpgH/AfsB7QHMAf8B+wHsAcgB/wH4Ad0BmwH/AcgBmgFmAf4CZQFeAeIDPQFoBAGI + AED/EAADDwETA0cBggNkAdsBtgGhAW8B/ANnAeoDVAGoAygBO5QAAUIBTQE+BwABPgMAASgDAAFAAwAB + EAMAAQEBAAEBBQABgBcAA/8DAAH/AfwGAAH/AfwGAAH/AfkGAAH/AfkGAAHwARMGAAHAAQMGAAGAAQEG + AAGAAQEHAAEBBwABAQcAAQEHAAEBBwABAQYAAYABAQYAAcABAwYAAfABHwQACw== diff --git a/qtc-net-client-2/Forms/Profile.Designer.cs b/qtc-net-client-2/Forms/Profile.Designer.cs index 6e5e97e..877d33b 100644 --- a/qtc-net-client-2/Forms/Profile.Designer.cs +++ b/qtc-net-client-2/Forms/Profile.Designer.cs @@ -227,6 +227,7 @@ Name = "Profile"; StartPosition = FormStartPosition.CenterParent; Text = "QtC.NET Client - User Profile"; + FormClosed += Profile_FormClosed; Load += frmProfile_Load; ((System.ComponentModel.ISupportInitialize)pbUserPfp).EndInit(); ((System.ComponentModel.ISupportInitialize)pbUserStatus).EndInit(); diff --git a/qtc-net-client-2/Forms/Profile.cs b/qtc-net-client-2/Forms/Profile.cs index 29f044e..6365490 100644 --- a/qtc-net-client-2/Forms/Profile.cs +++ b/qtc-net-client-2/Forms/Profile.cs @@ -21,22 +21,27 @@ namespace qtc_net_client_2.Forms UserInformationDto _userInformationDto; IApiService _apiService; IGatewayService _gatewayService; - public Profile(UserInformationDto userInfo, IApiService apiService, IGatewayService gatewayService) + + ServiceResponse? pfpRes; + public Profile(UserInformationDto userInfo, ServiceResponse? pfp, IApiService apiService, IGatewayService gatewayService) { _userInformationDto = userInfo; _apiService = apiService; _gatewayService = gatewayService; + pfpRes = pfp; + InitializeComponent(); } private async void frmProfile_Load(object sender, EventArgs e) { + var contactsList = await _apiService.GetCurrentUserContacts(); + lblUsername.Text = _userInformationDto.Username; lblCurrencyAmount.Text = _userInformationDto.CurrencyAmount.ToString(); rtxtBio.Text = _userInformationDto.Bio; - var pfpRes = await _apiService.GetUserProfilePic(_userInformationDto.Id); - if (pfpRes.Success && pfpRes.Data != null) + if (pfpRes != null && pfpRes.Success && pfpRes.Data != null) { using (var ms = new MemoryStream(pfpRes.Data)) { @@ -46,7 +51,7 @@ namespace qtc_net_client_2.Forms } var userStatus = (UserStatus)_userInformationDto.Status; - switch(userStatus) + switch (userStatus) { case UserStatus.Online: pbUserStatus.Image = Resources.OnlineIcon; @@ -70,10 +75,9 @@ namespace qtc_net_client_2.Forms } else btnAddContact.Visible = true; - var contactsResult = await _apiService.GetCurrentUserContacts(); - if (contactsResult.Success && contactsResult.Data != null) + if (contactsList != null && contactsList.Success && contactsList.Data != null) { - var contact = contactsResult.Data.FirstOrDefault(e => e.UserId == _userInformationDto.Id || e.OwnerId == _userInformationDto.Id); + var contact = contactsList.Data.FirstOrDefault(e => e.UserId == _userInformationDto.Id || e.OwnerId == _userInformationDto.Id); if (contact != null) { if (contact.OwnerId == _apiService.CurrentUser.Id) @@ -135,6 +139,12 @@ namespace qtc_net_client_2.Forms } } + private void Profile_FormClosed(object sender, FormClosedEventArgs e) + { + _userInformationDto = null!; // ignoring warning since this is just disposing the form + pfpRes = null; + } + private async void btnAddContact_Click_Add(object sender, EventArgs e) { var result = await _apiService.AddContactToCurrentUser(_userInformationDto.Id);