diff --git a/Content.Client/Fax/UI/FaxBoundUi.cs b/Content.Client/Fax/UI/FaxBoundUi.cs index ef6661b3ef..9b57595d7b 100644 --- a/Content.Client/Fax/UI/FaxBoundUi.cs +++ b/Content.Client/Fax/UI/FaxBoundUi.cs @@ -1,15 +1,22 @@ +using System.IO; +using System.Threading.Tasks; using Content.Shared.Fax; using JetBrains.Annotations; using Robust.Client.GameObjects; +using Robust.Client.UserInterface; namespace Content.Client.Fax.UI; [UsedImplicitly] public sealed class FaxBoundUi : BoundUserInterface { + [Dependency] private readonly IFileDialogManager _fileDialogManager = default!; + [ViewVariables] private FaxWindow? _window; + private bool _dialogIsOpen = false; + public FaxBoundUi(EntityUid owner, Enum uiKey) : base(owner, uiKey) { } @@ -22,12 +29,33 @@ public sealed class FaxBoundUi : BoundUserInterface _window.OpenCentered(); _window.OnClose += Close; + _window.FileButtonPressed += OnFileButtonPressed; _window.CopyButtonPressed += OnCopyButtonPressed; _window.SendButtonPressed += OnSendButtonPressed; _window.RefreshButtonPressed += OnRefreshButtonPressed; _window.PeerSelected += OnPeerSelected; } + private async void OnFileButtonPressed() + { + if (_dialogIsOpen) + return; + + _dialogIsOpen = true; + var filters = new FileDialogFilters(new FileDialogFilters.Group("txt")); + await using var file = await _fileDialogManager.OpenFile(filters); + _dialogIsOpen = false; + + if (_window == null || _window.Disposed || file == null) + { + return; + } + + using var reader = new StreamReader(file); + var content = await reader.ReadToEndAsync(); + SendMessage(new FaxFileMessage(content[..Math.Min(content.Length, FaxFileMessageValidation.MaxContentSize)], _window.OfficePaper)); + } + private void OnSendButtonPressed() { SendMessage(new FaxSendMessage()); diff --git a/Content.Client/Fax/UI/FaxWindow.xaml b/Content.Client/Fax/UI/FaxWindow.xaml index 1e6ef23376..ce22b0e412 100644 --- a/Content.Client/Fax/UI/FaxWindow.xaml +++ b/Content.Client/Fax/UI/FaxWindow.xaml @@ -19,6 +19,14 @@ + +