mirror of
https://github.com/BlossomiShymae/Needlework.Net.git
synced 2025-12-06 18:20:47 +01:00
Use dialog instead of window for oopsies
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace Needlework.Net.Messages
|
namespace Needlework.Net.Messages
|
||||||
{
|
{
|
||||||
public class OopsiesWindowRequestedMessage(string text) : ValueChangedMessage<string>(text)
|
public class OopsiesDialogRequestedMessage(string text) : ValueChangedMessage<string>(text)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
using CommunityToolkit.Mvvm.Messaging.Messages;
|
|
||||||
|
|
||||||
namespace Needlework.Net.Messages
|
|
||||||
{
|
|
||||||
public class OopsiesWindowCanceledMessage(object? data) : ValueChangedMessage<object?>(data)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -55,9 +55,6 @@
|
|||||||
<Compile Update="Views\EndpointView.axaml.cs">
|
<Compile Update="Views\EndpointView.axaml.cs">
|
||||||
<DependentUpon>EndpointView.axaml</DependentUpon>
|
<DependentUpon>EndpointView.axaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Update="Views\OopsiesWindow.axaml.cs">
|
|
||||||
<DependentUpon>OopsiesWindow.axaml</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ using Needlework.Net.ViewModels;
|
|||||||
using Projektanker.Icons.Avalonia;
|
using Projektanker.Icons.Avalonia;
|
||||||
using Projektanker.Icons.Avalonia.FontAwesome;
|
using Projektanker.Icons.Avalonia.FontAwesome;
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace Needlework.Net;
|
namespace Needlework.Net;
|
||||||
|
|
||||||
@@ -36,9 +35,9 @@ class Program
|
|||||||
var builder = new ServiceCollection();
|
var builder = new ServiceCollection();
|
||||||
|
|
||||||
builder.AddSingleton<MainWindowViewModel>();
|
builder.AddSingleton<MainWindowViewModel>();
|
||||||
builder.AddSingleton<WindowService>();
|
builder.AddSingleton<DialogService>();
|
||||||
builder.AddSingletonsFromAssemblies<PageBase>();
|
builder.AddSingletonsFromAssemblies<PageBase>();
|
||||||
|
|
||||||
builder.AddHttpClient();
|
builder.AddHttpClient();
|
||||||
|
|
||||||
var services = builder.BuildServiceProvider();
|
var services = builder.BuildServiceProvider();
|
||||||
|
|||||||
20
Needlework.Net/Services/DialogService.cs
Normal file
20
Needlework.Net/Services/DialogService.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using FluentAvalonia.UI.Controls;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Needlework.Net.Services
|
||||||
|
{
|
||||||
|
public class DialogService
|
||||||
|
{
|
||||||
|
public async Task<ContentDialogResult> ShowAsync<T>(object data)
|
||||||
|
where T : IDialog, IDisposable
|
||||||
|
{
|
||||||
|
T dialog = Activator.CreateInstance<T>();
|
||||||
|
|
||||||
|
var result = await dialog.ShowAsync(data);
|
||||||
|
dialog.Dispose();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
10
Needlework.Net/Services/IDialog.cs
Normal file
10
Needlework.Net/Services/IDialog.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
using FluentAvalonia.UI.Controls;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Needlework.Net.Services
|
||||||
|
{
|
||||||
|
public interface IDialog
|
||||||
|
{
|
||||||
|
public Task<ContentDialogResult> ShowAsync(object data);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
using CommunityToolkit.Mvvm.Messaging;
|
|
||||||
using Needlework.Net.Messages;
|
|
||||||
using Needlework.Net.ViewModels;
|
|
||||||
using Needlework.Net.Views;
|
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace Needlework.Net.Services
|
|
||||||
{
|
|
||||||
public class WindowService : IRecipient<OopsiesWindowCanceledMessage>
|
|
||||||
{
|
|
||||||
public IServiceProvider ServiceProvider { get; }
|
|
||||||
|
|
||||||
public OopsiesWindow? OopsiesWindow { get; set; }
|
|
||||||
|
|
||||||
public WindowService(IServiceProvider serviceProvider)
|
|
||||||
{
|
|
||||||
ServiceProvider = serviceProvider;
|
|
||||||
|
|
||||||
WeakReferenceMessenger.Default.Register<OopsiesWindowCanceledMessage>(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ShowOopsiesWindow(string text)
|
|
||||||
{
|
|
||||||
if (OopsiesWindow != null) OopsiesWindow!.Close();
|
|
||||||
|
|
||||||
var window = new OopsiesWindow();
|
|
||||||
window.DataContext = new OopsiesWindowViewModel(text);
|
|
||||||
window.Show(App.MainWindow!);
|
|
||||||
window.Closed += OnOopsiesWindowClosed;
|
|
||||||
OopsiesWindow = window;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OnOopsiesWindowClosed(object? sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (sender == null) return;
|
|
||||||
|
|
||||||
var window = (OopsiesWindow)sender;
|
|
||||||
window.DataContext = null;
|
|
||||||
window.Closed -= OnOopsiesWindowClosed;
|
|
||||||
OopsiesWindow = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Receive(OopsiesWindowCanceledMessage message)
|
|
||||||
{
|
|
||||||
if (OopsiesWindow is OopsiesWindow window) window.Close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -4,7 +4,6 @@ using CommunityToolkit.Mvvm.ComponentModel;
|
|||||||
using CommunityToolkit.Mvvm.Input;
|
using CommunityToolkit.Mvvm.Input;
|
||||||
using CommunityToolkit.Mvvm.Messaging;
|
using CommunityToolkit.Mvvm.Messaging;
|
||||||
using Needlework.Net.Messages;
|
using Needlework.Net.Messages;
|
||||||
using Needlework.Net.Services;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
@@ -26,12 +25,8 @@ namespace Needlework.Net.ViewModels
|
|||||||
[ObservableProperty] private string? _responseStatus = null;
|
[ObservableProperty] private string? _responseStatus = null;
|
||||||
[ObservableProperty] private string? _responseAuthorization = null;
|
[ObservableProperty] private string? _responseAuthorization = null;
|
||||||
|
|
||||||
public WindowService WindowService { get; }
|
public ConsoleViewModel() : base("Console", "terminal", -200)
|
||||||
|
|
||||||
public ConsoleViewModel(WindowService windowService) : base("Console", "terminal", -200)
|
|
||||||
{
|
{
|
||||||
WindowService = windowService;
|
|
||||||
|
|
||||||
WeakReferenceMessenger.Default.Register<DataReadyMessage>(this);
|
WeakReferenceMessenger.Default.Register<DataReadyMessage>(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,15 +57,15 @@ namespace Needlework.Net.ViewModels
|
|||||||
var response = await Connector.SendAsync(method, RequestPath, content);
|
var response = await Connector.SendAsync(method, RequestPath, content);
|
||||||
var riotAuthentication = new RiotAuthentication(processInfo.RemotingAuthToken);
|
var riotAuthentication = new RiotAuthentication(processInfo.RemotingAuthToken);
|
||||||
var responseBody = await response.Content.ReadAsByteArrayAsync();
|
var responseBody = await response.Content.ReadAsByteArrayAsync();
|
||||||
|
|
||||||
var body = responseBody.Length > 0 ? JsonSerializer.Serialize(JsonSerializer.Deserialize<object>(responseBody), App.JsonSerializerOptions) : string.Empty;
|
var body = responseBody.Length > 0 ? JsonSerializer.Serialize(JsonSerializer.Deserialize<object>(responseBody), App.JsonSerializerOptions) : string.Empty;
|
||||||
if (body.Length >= App.MaxCharacters)
|
if (body.Length >= App.MaxCharacters)
|
||||||
{
|
{
|
||||||
WindowService.ShowOopsiesWindow(body);
|
WeakReferenceMessenger.Default.Send(new OopsiesDialogRequestedMessage(body));
|
||||||
WeakReferenceMessenger.Default.Send(new ResponseUpdatedMessage(string.Empty), nameof(ConsoleViewModel));
|
WeakReferenceMessenger.Default.Send(new ResponseUpdatedMessage(string.Empty), nameof(ConsoleViewModel));
|
||||||
}
|
}
|
||||||
else WeakReferenceMessenger.Default.Send(new ResponseUpdatedMessage(body), nameof(ConsoleViewModel));
|
else WeakReferenceMessenger.Default.Send(new ResponseUpdatedMessage(body), nameof(ConsoleViewModel));
|
||||||
|
|
||||||
ResponseStatus = $"{(int)response.StatusCode} {response.StatusCode.ToString()}";
|
ResponseStatus = $"{(int)response.StatusCode} {response.StatusCode.ToString()}";
|
||||||
ResponsePath = $"https://127.0.0.1:{processInfo.AppPort}{RequestPath}";
|
ResponsePath = $"https://127.0.0.1:{processInfo.AppPort}{RequestPath}";
|
||||||
ResponseAuthorization = $"Basic {riotAuthentication.Value}";
|
ResponseAuthorization = $"Basic {riotAuthentication.Value}";
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ using Microsoft.OpenApi.Models;
|
|||||||
using Needlework.Net.Messages;
|
using Needlework.Net.Messages;
|
||||||
using Needlework.Net.Models;
|
using Needlework.Net.Models;
|
||||||
using Needlework.Net.Services;
|
using Needlework.Net.Services;
|
||||||
|
using Needlework.Net.Views;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
@@ -20,7 +21,8 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace Needlework.Net.ViewModels
|
namespace Needlework.Net.ViewModels
|
||||||
{
|
{
|
||||||
public partial class MainWindowViewModel : ObservableObject, IRecipient<DataRequestMessage>, IRecipient<HostDocumentRequestMessage>, IRecipient<OopsiesWindowRequestedMessage>, IRecipient<InfoBarUpdateMessage>
|
public partial class MainWindowViewModel
|
||||||
|
: ObservableObject, IRecipient<DataRequestMessage>, IRecipient<HostDocumentRequestMessage>, IRecipient<InfoBarUpdateMessage>, IRecipient<OopsiesDialogRequestedMessage>
|
||||||
{
|
{
|
||||||
public IAvaloniaReadOnlyList<NavigationViewItem> MenuItems { get; }
|
public IAvaloniaReadOnlyList<NavigationViewItem> MenuItems { get; }
|
||||||
[NotifyPropertyChangedFor(nameof(CurrentPage))]
|
[NotifyPropertyChangedFor(nameof(CurrentPage))]
|
||||||
@@ -31,7 +33,7 @@ namespace Needlework.Net.ViewModels
|
|||||||
[ObservableProperty] private bool _isUpdateShown = false;
|
[ObservableProperty] private bool _isUpdateShown = false;
|
||||||
|
|
||||||
public HttpClient HttpClient { get; }
|
public HttpClient HttpClient { get; }
|
||||||
public WindowService WindowService { get; }
|
public DialogService DialogService { get; }
|
||||||
public OpenApiDocumentWrapper? OpenApiDocumentWrapper { get; set; }
|
public OpenApiDocumentWrapper? OpenApiDocumentWrapper { get; set; }
|
||||||
public OpenApiDocument? HostDocument { get; set; }
|
public OpenApiDocument? HostDocument { get; set; }
|
||||||
|
|
||||||
@@ -39,7 +41,7 @@ namespace Needlework.Net.ViewModels
|
|||||||
|
|
||||||
[ObservableProperty] private ObservableCollection<InfoBarViewModel> _infoBarItems = [];
|
[ObservableProperty] private ObservableCollection<InfoBarViewModel> _infoBarItems = [];
|
||||||
|
|
||||||
public MainWindowViewModel(IEnumerable<PageBase> pages, HttpClient httpClient, WindowService windowService)
|
public MainWindowViewModel(IEnumerable<PageBase> pages, HttpClient httpClient, DialogService dialogService)
|
||||||
{
|
{
|
||||||
MenuItems = new AvaloniaList<NavigationViewItem>(pages
|
MenuItems = new AvaloniaList<NavigationViewItem>(pages
|
||||||
.OrderBy(p => p.Index)
|
.OrderBy(p => p.Index)
|
||||||
@@ -53,7 +55,7 @@ namespace Needlework.Net.ViewModels
|
|||||||
SelectedMenuItem = MenuItems[0];
|
SelectedMenuItem = MenuItems[0];
|
||||||
|
|
||||||
HttpClient = httpClient;
|
HttpClient = httpClient;
|
||||||
WindowService = windowService;
|
DialogService = dialogService;
|
||||||
|
|
||||||
WeakReferenceMessenger.Default.RegisterAll(this);
|
WeakReferenceMessenger.Default.RegisterAll(this);
|
||||||
|
|
||||||
@@ -135,11 +137,6 @@ namespace Needlework.Net.ViewModels
|
|||||||
process.Start();
|
process.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Receive(OopsiesWindowRequestedMessage message)
|
|
||||||
{
|
|
||||||
WindowService.ShowOopsiesWindow(message.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Receive(InfoBarUpdateMessage message)
|
public void Receive(InfoBarUpdateMessage message)
|
||||||
{
|
{
|
||||||
Avalonia.Threading.Dispatcher.UIThread.Post(async () => await ShowInfoBarAsync(message.Value));
|
Avalonia.Threading.Dispatcher.UIThread.Post(async () => await ShowInfoBarAsync(message.Value));
|
||||||
@@ -151,5 +148,10 @@ namespace Needlework.Net.ViewModels
|
|||||||
await Task.Delay(vm.Duration);
|
await Task.Delay(vm.Duration);
|
||||||
InfoBarItems.Remove(vm);
|
InfoBarItems.Remove(vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Receive(OopsiesDialogRequestedMessage message)
|
||||||
|
{
|
||||||
|
Avalonia.Threading.Dispatcher.UIThread.Invoke(async () => await DialogService.ShowAsync<OopsiesDialog>(message.Value));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
|
||||||
using CommunityToolkit.Mvvm.Input;
|
|
||||||
using CommunityToolkit.Mvvm.Messaging;
|
|
||||||
using Needlework.Net.Messages;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.IO;
|
|
||||||
|
|
||||||
namespace Needlework.Net.ViewModels
|
|
||||||
{
|
|
||||||
public partial class OopsiesWindowViewModel(string text) : ObservableObject
|
|
||||||
{
|
|
||||||
public string Text { get; } = text;
|
|
||||||
|
|
||||||
[RelayCommand]
|
|
||||||
private void OpenDefaultEditor()
|
|
||||||
{
|
|
||||||
var temp = Path.GetTempFileName().Replace(".tmp", ".json");
|
|
||||||
File.WriteAllText(temp, Text);
|
|
||||||
Process.Start("explorer", "\"" + temp + "\"");
|
|
||||||
CloseDialog();
|
|
||||||
}
|
|
||||||
|
|
||||||
[RelayCommand]
|
|
||||||
private void CloseDialog()
|
|
||||||
{
|
|
||||||
WeakReferenceMessenger.Default.Send(new OopsiesWindowCanceledMessage(null));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -106,7 +106,7 @@ namespace Needlework.Net.ViewModels
|
|||||||
var responseBody = responseBytes.Length > 0 ? JsonSerializer.Serialize(JsonSerializer.Deserialize<object>(responseBytes), App.JsonSerializerOptions) : string.Empty;
|
var responseBody = responseBytes.Length > 0 ? JsonSerializer.Serialize(JsonSerializer.Deserialize<object>(responseBytes), App.JsonSerializerOptions) : string.Empty;
|
||||||
if (responseBody.Length >= App.MaxCharacters)
|
if (responseBody.Length >= App.MaxCharacters)
|
||||||
{
|
{
|
||||||
WeakReferenceMessenger.Default.Send(new OopsiesWindowRequestedMessage(responseBody));
|
WeakReferenceMessenger.Default.Send(new OopsiesDialogRequestedMessage(responseBody));
|
||||||
WeakReferenceMessenger.Default.Send(new EditorUpdateMessage(new(string.Empty, "EndpointResponseEditor")));
|
WeakReferenceMessenger.Default.Send(new EditorUpdateMessage(new(string.Empty, "EndpointResponseEditor")));
|
||||||
}
|
}
|
||||||
else WeakReferenceMessenger.Default.Send(new EditorUpdateMessage(new(responseBody, "EndpointResponseEditor")));
|
else WeakReferenceMessenger.Default.Send(new EditorUpdateMessage(new(responseBody, "EndpointResponseEditor")));
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ using CommunityToolkit.Mvvm.ComponentModel;
|
|||||||
using CommunityToolkit.Mvvm.Input;
|
using CommunityToolkit.Mvvm.Input;
|
||||||
using CommunityToolkit.Mvvm.Messaging;
|
using CommunityToolkit.Mvvm.Messaging;
|
||||||
using Needlework.Net.Messages;
|
using Needlework.Net.Messages;
|
||||||
using Needlework.Net.Services;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
@@ -30,13 +29,10 @@ namespace Needlework.Net.ViewModels
|
|||||||
|
|
||||||
public WebsocketClient? Client { get; set; }
|
public WebsocketClient? Client { get; set; }
|
||||||
|
|
||||||
public WindowService WindowService { get; }
|
|
||||||
|
|
||||||
public IReadOnlyList<string> FilteredEventLog => string.IsNullOrWhiteSpace(Search) ? EventLog : [.. EventLog.Where(x => x.Contains(Search, StringComparison.InvariantCultureIgnoreCase))];
|
public IReadOnlyList<string> FilteredEventLog => string.IsNullOrWhiteSpace(Search) ? EventLog : [.. EventLog.Where(x => x.Contains(Search, StringComparison.InvariantCultureIgnoreCase))];
|
||||||
|
|
||||||
public WebsocketViewModel(WindowService windowService) : base("Event Viewer", "plug", -100)
|
public WebsocketViewModel() : base("Event Viewer", "plug", -100)
|
||||||
{
|
{
|
||||||
WindowService = windowService;
|
|
||||||
EventLog.CollectionChanged += (s, e) => OnPropertyChanged(nameof(FilteredEventLog));
|
EventLog.CollectionChanged += (s, e) => OnPropertyChanged(nameof(FilteredEventLog));
|
||||||
var thread = new Thread(InitializeWebsocket) { IsBackground = true };
|
var thread = new Thread(InitializeWebsocket) { IsBackground = true };
|
||||||
thread.Start();
|
thread.Start();
|
||||||
@@ -76,7 +72,7 @@ namespace Needlework.Net.ViewModels
|
|||||||
if (_events.TryGetValue(value, out var message))
|
if (_events.TryGetValue(value, out var message))
|
||||||
{
|
{
|
||||||
var text = JsonSerializer.Serialize(message, App.JsonSerializerOptions);
|
var text = JsonSerializer.Serialize(message, App.JsonSerializerOptions);
|
||||||
if (text.Length >= App.MaxCharacters) WindowService.ShowOopsiesWindow(text);
|
if (text.Length >= App.MaxCharacters) WeakReferenceMessenger.Default.Send(new OopsiesDialogRequestedMessage(text));
|
||||||
else WeakReferenceMessenger.Default.Send(new ResponseUpdatedMessage(text), nameof(WebsocketViewModel));
|
else WeakReferenceMessenger.Default.Send(new ResponseUpdatedMessage(text), nameof(WebsocketViewModel));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:avaloniaEdit="https://github.com/avaloniaui/avaloniaedit"
|
xmlns:avaloniaEdit="https://github.com/avaloniaui/avaloniaedit"
|
||||||
|
xmlns:ui="using:FluentAvalonia.UI.Controls"
|
||||||
|
xmlns:uip="using:FluentAvalonia.UI.Controls.Primitives"
|
||||||
xmlns:vm="using:Needlework.Net.ViewModels"
|
xmlns:vm="using:Needlework.Net.ViewModels"
|
||||||
xmlns:controls="using:Needlework.Net.Controls"
|
xmlns:controls="using:Needlework.Net.Controls"
|
||||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||||
|
|||||||
65
Needlework.Net/Views/OopsiesDialog.cs
Normal file
65
Needlework.Net/Views/OopsiesDialog.cs
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
using FluentAvalonia.UI.Controls;
|
||||||
|
using Needlework.Net.Services;
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Needlework.Net.Views
|
||||||
|
{
|
||||||
|
public class OopsiesDialog : IDialog, IDisposable
|
||||||
|
{
|
||||||
|
private bool _isDisposing;
|
||||||
|
private string? _text;
|
||||||
|
private ContentDialog _dialog;
|
||||||
|
|
||||||
|
public OopsiesDialog()
|
||||||
|
{
|
||||||
|
_dialog = new ContentDialog
|
||||||
|
{
|
||||||
|
PrimaryButtonText = "Open",
|
||||||
|
CloseButtonText = "Cancel",
|
||||||
|
Title = "Oopsies",
|
||||||
|
Content = "This response is too large to handle for performance reasons.\nIt can be viewed in an external editor or viewer.",
|
||||||
|
IsPrimaryButtonEnabled = true,
|
||||||
|
IsSecondaryButtonEnabled = false,
|
||||||
|
DefaultButton = ContentDialogButton.Primary
|
||||||
|
};
|
||||||
|
_dialog.PrimaryButtonClick += OnPrimaryButtonClick;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<ContentDialogResult> ShowAsync(object data)
|
||||||
|
{
|
||||||
|
_text = (string)data;
|
||||||
|
var result = await _dialog.ShowAsync();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnPrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
|
||||||
|
{
|
||||||
|
var temp = Path.GetTempFileName().Replace(".tmp", ".json");
|
||||||
|
File.WriteAllText(temp, _text);
|
||||||
|
Process.Start("explorer", "\"" + temp + "\"");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
Dispose(true);
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (!_isDisposing)
|
||||||
|
{
|
||||||
|
if (disposing)
|
||||||
|
{
|
||||||
|
_text = null;
|
||||||
|
_dialog.PrimaryButtonClick -= OnPrimaryButtonClick;
|
||||||
|
}
|
||||||
|
|
||||||
|
_isDisposing = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
<Window
|
|
||||||
xmlns="https://github.com/avaloniaui"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
xmlns:vm="using:Needlework.Net.ViewModels"
|
|
||||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
|
||||||
x:Class="Needlework.Net.Views.OopsiesWindow"
|
|
||||||
x:DataType="vm:OopsiesWindowViewModel"
|
|
||||||
Title="Needlework.Net - Oopsies"
|
|
||||||
WindowStartupLocation="CenterOwner"
|
|
||||||
Width="560"
|
|
||||||
Height="200">
|
|
||||||
<Grid RowDefinitions="auto,*">
|
|
||||||
<Grid ColumnDefinitions="auto,auto,*,auto"
|
|
||||||
Background="Transparent"
|
|
||||||
Height="40"
|
|
||||||
Grid.Row="0">
|
|
||||||
<Image Margin="12 4"
|
|
||||||
IsHitTestVisible="False"
|
|
||||||
Source="/Assets/app.png"
|
|
||||||
Width="18"
|
|
||||||
Height="18"
|
|
||||||
DockPanel.Dock="Left"
|
|
||||||
Grid.Column="0"/>
|
|
||||||
<TextBlock FontSize="12"
|
|
||||||
IsHitTestVisible="False"
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
Grid.Column="1">
|
|
||||||
Needlework.Net - Oopsies
|
|
||||||
</TextBlock>
|
|
||||||
</Grid>
|
|
||||||
<Grid RowDefinitions="auto,auto,auto"
|
|
||||||
ColumnDefinitions="auto,auto"
|
|
||||||
Grid.Row="1"
|
|
||||||
Grid.Column="0"
|
|
||||||
Margin="8"
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
HorizontalAlignment="Center">
|
|
||||||
<TextBlock
|
|
||||||
Grid.Row="0"
|
|
||||||
Grid.Column="0"
|
|
||||||
Grid.ColumnSpan="2">
|
|
||||||
This response is too large for Needlework.Net to handle for performance reasons.
|
|
||||||
</TextBlock>
|
|
||||||
<TextBlock
|
|
||||||
Grid.Row="1"
|
|
||||||
Grid.Column="0"
|
|
||||||
Grid.ColumnSpan="2"
|
|
||||||
Margin="0 0 0 12">
|
|
||||||
It can be viewed in an external editor or viewer.
|
|
||||||
</TextBlock>
|
|
||||||
<Button Command="{Binding OpenDefaultEditorCommand}"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
Grid.Row="2"
|
|
||||||
Grid.Column="0"
|
|
||||||
Margin="0 0 8 0">
|
|
||||||
Open
|
|
||||||
</Button>
|
|
||||||
<Button Command="{Binding CloseDialogCommand}"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
Grid.Row="2"
|
|
||||||
Grid.Column="1"
|
|
||||||
Margin="8 0 0 0">
|
|
||||||
Cancel
|
|
||||||
</Button>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</Window>
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
using FluentAvalonia.UI.Windowing;
|
|
||||||
|
|
||||||
namespace Needlework.Net.Views;
|
|
||||||
|
|
||||||
public partial class OopsiesWindow : AppWindow
|
|
||||||
{
|
|
||||||
public OopsiesWindow()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
|
|
||||||
TitleBar.ExtendsContentIntoTitleBar = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user