mirror of
https://github.com/chylex/TweetDuck.git
synced 2024-11-14 17:42:47 +01:00
85 lines
2.5 KiB
C#
85 lines
2.5 KiB
C#
using System;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
using TweetDuck.Dialogs;
|
|
using TweetDuck.Management;
|
|
using TweetLib.Core;
|
|
using TweetLib.Core.Application;
|
|
|
|
namespace TweetDuck {
|
|
sealed class Reporter : IAppErrorHandler {
|
|
private static void Exit(string message, Exception ex = null) {
|
|
try {
|
|
Process.GetCurrentProcess().Kill();
|
|
} catch {
|
|
Environment.FailFast(message, ex ?? new Exception(message));
|
|
}
|
|
}
|
|
|
|
public static void HandleEarlyFailure(string caption, string message) {
|
|
Program.SetupWinForms();
|
|
FormMessage.Error(caption, message, "Exit");
|
|
Exit(message);
|
|
}
|
|
|
|
public void HandleException(string caption, string message, bool canIgnore, Exception e) {
|
|
bool loggedSuccessfully = App.Logger.Error(e.ToString());
|
|
|
|
FormManager.RunOnUIThread(() => {
|
|
string exceptionText = e is ExpandedLogException ? e.Message + "\n\nDetails with potentially sensitive information are in the Error Log." : e.Message;
|
|
FormMessage form = new FormMessage(caption, message + "\nError: " + exceptionText, canIgnore ? MessageBoxIcon.Warning : MessageBoxIcon.Error);
|
|
|
|
Button btnExit = form.AddButton(FormMessage.Exit);
|
|
Button btnIgnore = form.AddButton(FormMessage.Ignore, DialogResult.Ignore, ControlType.Cancel);
|
|
|
|
btnIgnore.Enabled = canIgnore;
|
|
form.ActiveControl = canIgnore ? btnIgnore : btnExit;
|
|
|
|
Button btnOpenLog = new Button {
|
|
Anchor = AnchorStyles.Bottom | AnchorStyles.Left,
|
|
Enabled = loggedSuccessfully,
|
|
Font = SystemFonts.MessageBoxFont,
|
|
Location = new Point(9, 12),
|
|
Margin = new Padding(0, 0, 48, 0),
|
|
Size = new Size(106, 26),
|
|
Text = "Show Error Log",
|
|
UseVisualStyleBackColor = true
|
|
};
|
|
|
|
btnOpenLog.Click += (sender, args) => {
|
|
if (!OpenLogFile()) {
|
|
FormMessage.Error("Error Log", "Cannot open error log.", FormMessage.OK);
|
|
}
|
|
};
|
|
|
|
form.AddActionControl(btnOpenLog);
|
|
|
|
if (form.ShowDialog() != DialogResult.Ignore) {
|
|
Exit(message, e);
|
|
}
|
|
});
|
|
}
|
|
|
|
private static bool OpenLogFile() {
|
|
try {
|
|
using (Process.Start(App.Logger.LogFilePath)) {}
|
|
} catch (Exception) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public sealed class ExpandedLogException : Exception {
|
|
private readonly string details;
|
|
|
|
public ExpandedLogException(Exception source, string details) : base(source.Message, source) {
|
|
this.details = details;
|
|
}
|
|
|
|
public override string ToString() => base.ToString() + "\r\n" + details;
|
|
}
|
|
}
|
|
}
|