diff --git a/ChatTwo/PayloadHandler.cs b/ChatTwo/PayloadHandler.cs index 3bbf2d5..312d19d 100755 --- a/ChatTwo/PayloadHandler.cs +++ b/ChatTwo/PayloadHandler.cs @@ -417,7 +417,7 @@ public sealed class PayloadHandler { GameFunctions.GameFunctions.OpenPartyFinder(); break; case UriPayload uri: - TryOpenURI(uri.Uri); + WrapperUtil.TryOpenURI(uri.Uri); break; default: RightClickPayload(chunk, payload); @@ -671,7 +671,7 @@ public sealed class PayloadHandler { ImGui.Separator(); if (ImGui.Selectable(Language.Context_OpenInBrowser)) - TryOpenURI(uri.Uri); + WrapperUtil.TryOpenURI(uri.Uri); if (ImGui.Selectable(Language.Context_CopyLink)) { @@ -679,18 +679,4 @@ public sealed class PayloadHandler { WrapperUtil.AddNotification(Language.Context_CopyLinkNotification, NotificationType.Info); } } - - private void TryOpenURI(Uri uri) - { - try - { - Plugin.Log.Debug($"Opening URI {uri} in default browser"); - Dalamud.Utility.Util.OpenLink(uri.ToString()); - } - catch (Exception ex) - { - Plugin.Log.Error($"Error opening URI: {ex}"); - WrapperUtil.AddNotification(Language.Context_OpenInBrowserError, NotificationType.Error); - } - } } diff --git a/ChatTwo/Resources/Language.Designer.cs b/ChatTwo/Resources/Language.Designer.cs index 76db480..a14e860 100755 --- a/ChatTwo/Resources/Language.Designer.cs +++ b/ChatTwo/Resources/Language.Designer.cs @@ -3606,7 +3606,7 @@ namespace ChatTwo.Resources { } /// - /// Looks up a localized string similar to Controls:. + /// Looks up a localized string similar to Control Panel:. /// internal static string Webinterface_Controls { get { @@ -3623,6 +3623,15 @@ namespace ChatTwo.Resources { } } + /// + /// Looks up a localized string similar to URL:. + /// + internal static string Webinterface_Controls_Url { + get { + return ResourceManager.GetString("Webinterface_Controls_Url", resourceCulture); + } + } + /// /// Looks up a localized string similar to Authcode:. /// diff --git a/ChatTwo/Resources/Language.resx b/ChatTwo/Resources/Language.resx index 24bd86a..2aafa83 100644 --- a/ChatTwo/Resources/Language.resx +++ b/ChatTwo/Resources/Language.resx @@ -581,11 +581,14 @@ Reset your password and invalidate all session tokens. - Controls: + Control Panel: Active: + + URL: + none set diff --git a/ChatTwo/Ui/SettingsTabs/Webinterface.cs b/ChatTwo/Ui/SettingsTabs/Webinterface.cs index 6ee978f..a3145c6 100644 --- a/ChatTwo/Ui/SettingsTabs/Webinterface.cs +++ b/ChatTwo/Ui/SettingsTabs/Webinterface.cs @@ -16,9 +16,7 @@ internal sealed class Webinterface(Plugin plugin, Configuration mutable) : ISett public void Draw(bool changed) { - ImGuiUtil.WrappedTextWithColor(ImGuiColors.DalamudWhite, "On checking 'Enabled' this will enable and load up Chat2's built-in web interface, which will allow devices on your network to access in-game chat. This feature may be used to allow a phone or another computer to see Chat2 activity, switch channels, and send messages as though you were typing in FFXIV itself."); - ImGui.Spacing(); - ImGuiUtil.WrappedTextWithColor(ImGuiColors.HealerGreen, "Note: This will require at least a semi-modern browser in order to function correctly."); + ImGuiUtil.WrappedTextWithColor(ImGuiColors.DalamudWhite, "After checking 'Enabled' and clicking 'Start' this will load up Chat2's built-in web interface, which will allow devices on your network to access in-game chat. This feature may be used to allow a phone or another computer to see Chat2 activity, switch channels, and send messages as though you were typing in FFXIV itself."); ImGui.Spacing(); ImGuiUtil.WrappedTextWithColor(ImGuiColors.DalamudOrange, "For reasons of account security, this feature is not intended for use outside of your local network, you have been warned!"); @@ -29,7 +27,7 @@ internal sealed class Webinterface(Plugin plugin, Configuration mutable) : ISett { ImGuiUtil.WrappedTextWithColor(ImGuiColors.DalamudViolet, "- Forward the port used (9000)"); ImGuiUtil.WrappedTextWithColor(ImGuiColors.DalamudViolet, "- Share your authentication code with anyone else"); - ImGuiUtil.WrappedTextWithColor(ImGuiColors.DalamudViolet, "- Expect multi-boxing to work with this (only first client is tracked and utilised)"); + ImGuiUtil.WrappedTextWithColor(ImGuiColors.DalamudViolet, "- Expect multi-boxing to work with this (only first client works)"); } ImGui.Spacing(); ImGuiUtil.WrappedTextWithColor(ImGuiColors.DalamudOrange, "No support will be provided if any of the 'Do Not' clauses aren't respected and adhered to appropriately."); @@ -43,8 +41,6 @@ internal sealed class Webinterface(Plugin plugin, Configuration mutable) : ISett if (!Mutable.WebinterfaceEnabled) return; - - ImGui.Separator(); ImGui.Spacing(); ImGuiUtil.OptionCheckbox(ref Mutable.WebinterfaceAutoStart, Language.Options_WebinterfaceAutoStart_Name, Language.Options_WebinterfaceAutoStart_Description); @@ -63,7 +59,7 @@ internal sealed class Webinterface(Plugin plugin, Configuration mutable) : ISett Plugin.ServerCore.InvalidateSessions(); } - ImGuiUtil.WrappedTextWithColor(ImGuiColors.HealerGreen, Language.Webinterface_Controls); + ImGui.TextUnformatted(Language.Webinterface_Controls); using (ImRaii.PushIndent(10.0f)) { ImGui.TextUnformatted(Language.Webinterface_Controls_Active); @@ -76,6 +72,27 @@ internal sealed class Webinterface(Plugin plugin, Configuration mutable) : ISett ImGui.TextUnformatted(isActive ? FontAwesomeIcon.Check.ToIconString() : FontAwesomeIcon.Times.ToIconString()); } + Uri? uri; + try { + uri = new Uri($"http://{System.Net.Dns.GetHostName()}:{Mutable.WebinterfacePort}/"); + } + catch(Exception) + { + uri = null; + } + + ImGui.TextUnformatted(Language.Webinterface_Controls_Url); + ImGui.SameLine(); + if (uri is not null) + { + if (ImGui.Selectable(uri.AbsoluteUri)) + WrapperUtil.TryOpenURI(uri); + } + else + { + ImGui.TextUnformatted("Unable to resolve hostname."); + } + using (ImRaii.Disabled(isActive || Plugin.ServerCore.IsStopping())) { if (ImGui.Button(Language.Webinterface_Button_Start)) @@ -113,6 +130,9 @@ internal sealed class Webinterface(Plugin plugin, Configuration mutable) : ISett } } } + ImGui.Spacing(); + ImGui.Spacing(); + ImGuiUtil.WrappedTextWithColor(ImGuiColors.HealerGreen, "Note: This will require at least a semi-modern browser in order to function correctly."); } } diff --git a/ChatTwo/Util/WrapperUtil.cs b/ChatTwo/Util/WrapperUtil.cs index cb0c199..a5f3703 100644 --- a/ChatTwo/Util/WrapperUtil.cs +++ b/ChatTwo/Util/WrapperUtil.cs @@ -1,4 +1,5 @@ -using Dalamud.Interface.ImGuiNotification; +using ChatTwo.Resources; +using Dalamud.Interface.ImGuiNotification; namespace ChatTwo.Util; @@ -9,6 +10,20 @@ public static class WrapperUtil Plugin.Notification.AddNotification(new Notification { Content = content, Type = type, Minimized = minimized }); } + public static void TryOpenURI(Uri uri) + { + try + { + Plugin.Log.Debug($"Opening URI {uri} in default browser"); + Dalamud.Utility.Util.OpenLink(uri.ToString()); + } + catch (Exception ex) + { + Plugin.Log.Error($"Error opening URI: {ex}"); + AddNotification(Language.Context_OpenInBrowserError, NotificationType.Error); + } + } + public static IEnumerable<(T Value, int Index)> WithIndex(this IEnumerable list) => list.Select((x, i) => (x, i)); } \ No newline at end of file