Mare 0.9 (#65)
* add jwt expiry * start of 0.9 api impl * some stuff idk * some more impl * some cleanup * remove grouppair, add configuration, rework some pair drawing stuff * do some stuff * rework some ui * I don't even know anymore * add cancellationtoken * token bla * ui fixes etc * probably individual adding/removing now working fully as expected * add working report popup * I guess it's more syncshell shit or so * popup shit idk * work out most of the syncshell bullshit I guess * delete some old crap * are we actually getting closer to the end * update pair info stuff * more fixes/adjustments, idk * refactor some things * some rework * some more cleanup * cleanup * make menu buttons w i d e * better icon text buttons * add all syncshell folder and ordering fixes --------- Co-authored-by: rootdarkarchon <root.darkarchon@outlook.com>
This commit is contained in:
		
							
								
								
									
										163
									
								
								MareSynchronos/UI/Components/Popup/JoinSyncshellPopupHandler.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								MareSynchronos/UI/Components/Popup/JoinSyncshellPopupHandler.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,163 @@ | ||||
| using Dalamud.Interface.Colors; | ||||
| using Dalamud.Interface.Utility.Raii; | ||||
| using ImGuiNET; | ||||
| using MareSynchronos.API.Data.Enum; | ||||
| using MareSynchronos.API.Data.Extensions; | ||||
| using MareSynchronos.API.Dto; | ||||
| using MareSynchronos.API.Dto.Group; | ||||
| using MareSynchronos.Utils; | ||||
| using MareSynchronos.WebAPI; | ||||
| using System.Numerics; | ||||
|  | ||||
| namespace MareSynchronos.UI.Components.Popup; | ||||
|  | ||||
| internal class JoinSyncshellPopupHandler : IPopupHandler | ||||
| { | ||||
|     private readonly ApiController _apiController; | ||||
|     private readonly UiSharedService _uiSharedService; | ||||
|     private string _desiredSyncshellToJoin = string.Empty; | ||||
|     private GroupJoinInfoDto? _groupJoinInfo = null; | ||||
|     private DefaultPermissionsDto _ownPermissions = null!; | ||||
|     private string _previousPassword = string.Empty; | ||||
|     private string _syncshellPassword = string.Empty; | ||||
|  | ||||
|     public JoinSyncshellPopupHandler(UiSharedService uiSharedService, ApiController apiController) | ||||
|     { | ||||
|         _uiSharedService = uiSharedService; | ||||
|         _apiController = apiController; | ||||
|     } | ||||
|  | ||||
|     public Vector2 PopupSize => new(700, 400); | ||||
|  | ||||
|     public void DrawContent() | ||||
|     { | ||||
|         using (ImRaii.PushFont(_uiSharedService.UidFont)) | ||||
|             ImGui.TextUnformatted((_groupJoinInfo == null || !_groupJoinInfo.Success) ? "Join Syncshell" : ("Finalize join Syncshell " + _groupJoinInfo.GroupAliasOrGID)); | ||||
|         ImGui.Separator(); | ||||
|  | ||||
|         if (_groupJoinInfo == null || !_groupJoinInfo.Success) | ||||
|         { | ||||
|             UiSharedService.TextWrapped("Here you can join existing Syncshells. " + | ||||
|                 "Please keep in mind that you cannot join more than " + _apiController.ServerInfo.MaxGroupsJoinedByUser + " syncshells on this server." + Environment.NewLine + | ||||
|                 "Joining a Syncshell will pair you implicitly with all existing users in the Syncshell." + Environment.NewLine + | ||||
|                 "All permissions to all users in the Syncshell will be set to the preferred Syncshell permissions on joining, excluding prior set preferred permissions."); | ||||
|             ImGui.Separator(); | ||||
|             ImGui.TextUnformatted("Note: Syncshell ID and Password are case sensitive. MSS- is part of Syncshell IDs, unless using Vanity IDs."); | ||||
|  | ||||
|             ImGui.AlignTextToFramePadding(); | ||||
|             ImGui.TextUnformatted("Syncshell ID"); | ||||
|             ImGui.SameLine(200); | ||||
|             ImGui.InputTextWithHint("##syncshellId", "Full Syncshell ID", ref _desiredSyncshellToJoin, 20); | ||||
|  | ||||
|             ImGui.AlignTextToFramePadding(); | ||||
|             ImGui.TextUnformatted("Syncshell Password"); | ||||
|             ImGui.SameLine(200); | ||||
|             ImGui.InputTextWithHint("##syncshellpw", "Password", ref _syncshellPassword, 20, ImGuiInputTextFlags.Password); | ||||
|             using (ImRaii.Disabled(string.IsNullOrEmpty(_desiredSyncshellToJoin) || string.IsNullOrEmpty(_syncshellPassword))) | ||||
|             { | ||||
|                 if (UiSharedService.IconTextButton(Dalamud.Interface.FontAwesomeIcon.Plus, "Join Syncshell")) | ||||
|                 { | ||||
|                     _groupJoinInfo = _apiController.GroupJoin(new GroupPasswordDto(new API.Data.GroupData(_desiredSyncshellToJoin), _syncshellPassword)).Result; | ||||
|                     _previousPassword = _syncshellPassword; | ||||
|                     _syncshellPassword = string.Empty; | ||||
|                 } | ||||
|             } | ||||
|             if (_groupJoinInfo != null && !_groupJoinInfo.Success) | ||||
|             { | ||||
|                 UiSharedService.ColorTextWrapped("Failed to join the Syncshell. This is due to one of following reasons:" + Environment.NewLine + | ||||
|                     "- The Syncshell does not exist or the password is incorrect" + Environment.NewLine + | ||||
|                     "- You are already in that Syncshell or are banned from that Syncshell" + Environment.NewLine + | ||||
|                     "- The Syncshell is at capacity or has invites disabled" + Environment.NewLine, ImGuiColors.DalamudYellow); | ||||
|             } | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             ImGui.TextUnformatted("You are about to join the Syncshell " + _groupJoinInfo.GroupAliasOrGID + " by " + _groupJoinInfo.OwnerAliasOrUID); | ||||
|             ImGui.Dummy(new(2)); | ||||
|             ImGui.TextUnformatted("This Syncshell staff has set the following suggested Syncshell permissions:"); | ||||
|             ImGui.TextUnformatted("- Sounds "); | ||||
|             UiSharedService.BooleanToColoredIcon(!_groupJoinInfo.GroupPermissions.IsPreferDisableSounds()); | ||||
|             ImGui.TextUnformatted("- Animations"); | ||||
|             UiSharedService.BooleanToColoredIcon(!_groupJoinInfo.GroupPermissions.IsPreferDisableAnimations()); | ||||
|             ImGui.TextUnformatted("- VFX"); | ||||
|             UiSharedService.BooleanToColoredIcon(!_groupJoinInfo.GroupPermissions.IsPreferDisableVFX()); | ||||
|  | ||||
|             if (_groupJoinInfo.GroupPermissions.IsPreferDisableSounds() != _ownPermissions.DisableGroupSounds | ||||
|                 || _groupJoinInfo.GroupPermissions.IsPreferDisableVFX() != _ownPermissions.DisableGroupVFX | ||||
|                 || _groupJoinInfo.GroupPermissions.IsPreferDisableAnimations() != _ownPermissions.DisableGroupAnimations) | ||||
|             { | ||||
|                 ImGui.Dummy(new(2)); | ||||
|                 UiSharedService.ColorText("Your current preferred default Syncshell permissions deviate from the suggested permissions:", ImGuiColors.DalamudYellow); | ||||
|                 if (_groupJoinInfo.GroupPermissions.IsPreferDisableSounds() != _ownPermissions.DisableGroupSounds) | ||||
|                 { | ||||
|                     ImGui.AlignTextToFramePadding(); | ||||
|                     ImGui.TextUnformatted("- Sounds"); | ||||
|                     UiSharedService.BooleanToColoredIcon(!_ownPermissions.DisableGroupSounds); | ||||
|                     ImGui.SameLine(200); | ||||
|                     ImGui.TextUnformatted("Suggested"); | ||||
|                     UiSharedService.BooleanToColoredIcon(!_groupJoinInfo.GroupPermissions.IsPreferDisableSounds()); | ||||
|                     ImGui.SameLine(); | ||||
|                     using var id = ImRaii.PushId("suggestedSounds"); | ||||
|                     if (UiSharedService.IconTextButton(Dalamud.Interface.FontAwesomeIcon.ArrowRight, "Apply suggested")) | ||||
|                     { | ||||
|                         _ownPermissions.DisableGroupSounds = _groupJoinInfo.GroupPermissions.IsPreferDisableSounds(); | ||||
|                     } | ||||
|                 } | ||||
|                 if (_groupJoinInfo.GroupPermissions.IsPreferDisableAnimations() != _ownPermissions.DisableGroupAnimations) | ||||
|                 { | ||||
|                     ImGui.AlignTextToFramePadding(); | ||||
|                     ImGui.TextUnformatted("- Animations"); | ||||
|                     UiSharedService.BooleanToColoredIcon(!_ownPermissions.DisableGroupAnimations); | ||||
|                     ImGui.SameLine(200); | ||||
|                     ImGui.TextUnformatted("Suggested"); | ||||
|                     UiSharedService.BooleanToColoredIcon(!_groupJoinInfo.GroupPermissions.IsPreferDisableAnimations()); | ||||
|                     ImGui.SameLine(); | ||||
|                     using var id = ImRaii.PushId("suggestedAnims"); | ||||
|                     if (UiSharedService.IconTextButton(Dalamud.Interface.FontAwesomeIcon.ArrowRight, "Apply suggested")) | ||||
|                     { | ||||
|                         _ownPermissions.DisableGroupAnimations = _groupJoinInfo.GroupPermissions.IsPreferDisableAnimations(); | ||||
|                     } | ||||
|                 } | ||||
|                 if (_groupJoinInfo.GroupPermissions.IsPreferDisableVFX() != _ownPermissions.DisableGroupVFX) | ||||
|                 { | ||||
|                     ImGui.AlignTextToFramePadding(); | ||||
|                     ImGui.TextUnformatted("- VFX"); | ||||
|                     UiSharedService.BooleanToColoredIcon(!_ownPermissions.DisableGroupVFX); | ||||
|                     ImGui.SameLine(200); | ||||
|                     ImGui.TextUnformatted("Suggested"); | ||||
|                     UiSharedService.BooleanToColoredIcon(!_groupJoinInfo.GroupPermissions.IsPreferDisableVFX()); | ||||
|                     ImGui.SameLine(); | ||||
|                     using var id = ImRaii.PushId("suggestedVfx"); | ||||
|                     if (UiSharedService.IconTextButton(Dalamud.Interface.FontAwesomeIcon.ArrowRight, "Apply suggested")) | ||||
|                     { | ||||
|                         _ownPermissions.DisableGroupVFX = _groupJoinInfo.GroupPermissions.IsPreferDisableVFX(); | ||||
|                     } | ||||
|                 } | ||||
|                 UiSharedService.TextWrapped("Note: you do not need to apply the suggested Syncshell permissions, they are solely suggestions by the staff of the Syncshell."); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 UiSharedService.TextWrapped("Your default syncshell permissions on joining are in line with the suggested Syncshell permissions through the owner."); | ||||
|             } | ||||
|             ImGui.Dummy(new(2)); | ||||
|             if (UiSharedService.IconTextButton(Dalamud.Interface.FontAwesomeIcon.Plus, "Finalize and join " + _groupJoinInfo.GroupAliasOrGID)) | ||||
|             { | ||||
|                 GroupUserPreferredPermissions joinPermissions = GroupUserPreferredPermissions.NoneSet; | ||||
|                 joinPermissions.SetDisableSounds(_ownPermissions.DisableGroupSounds); | ||||
|                 joinPermissions.SetDisableAnimations(_ownPermissions.DisableGroupAnimations); | ||||
|                 joinPermissions.SetDisableVFX(_ownPermissions.DisableGroupVFX); | ||||
|                 _ = _apiController.GroupJoinFinalize(new GroupJoinDto(_groupJoinInfo.Group, _previousPassword, joinPermissions)); | ||||
|                 ImGui.CloseCurrentPopup(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void Open() | ||||
|     { | ||||
|         _desiredSyncshellToJoin = string.Empty; | ||||
|         _syncshellPassword = string.Empty; | ||||
|         _previousPassword = string.Empty; | ||||
|         _groupJoinInfo = null; | ||||
|         _ownPermissions = _apiController.DefaultPermissions.DeepClone()!; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 rootdarkarchon
					rootdarkarchon