PowerToys/src/modules/launcher/PowerLauncher/ReportWindow.xaml.cs

88 lines
2.9 KiB
C#

// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Globalization;
using System.IO;
using System.IO.Abstractions;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Documents;
using System.Windows.Media.Imaging;
using PowerLauncher.Helper;
using Wox.Infrastructure.Image;
using Wox.Plugin.Logger;
namespace PowerLauncher
{
internal partial class ReportWindow
{
private static readonly IFileSystem FileSystem = new FileSystem();
private static readonly IFile File = FileSystem.File;
public ReportWindow(Exception exception)
{
InitializeComponent();
BitmapImage image = GetImageFromPath(ImageLoader.ErrorIconPath);
if (image != null)
{
Icon = image;
}
ErrorTextbox.Document.Blocks.FirstBlock.Margin = new Thickness(0);
SetException(exception);
}
private void SetException(Exception exception)
{
string path = Log.CurrentLogDirectory;
var directory = new DirectoryInfo(path);
var log = directory.GetFiles().OrderByDescending(f => f.LastWriteTime).FirstOrDefault();
LogFilePathBox.Text = log?.FullName;
StringBuilder content = new StringBuilder();
content.AppendLine(ErrorReporting.RuntimeInfo());
// Using CurrentCulture since this is displayed to user in the report window
content.AppendLine($"Date: {DateTime.Now.ToString(CultureInfo.CurrentCulture)}");
content.AppendLine("Exception:");
content.AppendLine(exception.ToString());
var paragraph = new Paragraph();
paragraph.Inlines.Add(content.ToString());
ErrorTextbox.Document.Blocks.Add(paragraph);
}
// Function to get the Bitmap Image from the path
private static BitmapImage GetImageFromPath(string path)
{
if (File.Exists(path))
{
MemoryStream memoryStream = new MemoryStream();
byte[] fileBytes = File.ReadAllBytes(path);
memoryStream.Write(fileBytes, 0, fileBytes.Length);
memoryStream.Position = 0;
var image = new BitmapImage();
image.BeginInit();
image.StreamSource = memoryStream;
image.EndInit();
return image;
}
else
{
return null;
}
}
private void RepositoryHyperlink_Click(object sender, RoutedEventArgs e)
{
var uri = (sender as Hyperlink).NavigateUri.ToString();
Wox.Infrastructure.Helper.OpenInShell(uri);
}
}
}