mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
142 lines
5.7 KiB
C#
142 lines
5.7 KiB
C#
|
|
using System;
|
||
|
|
using System.ComponentModel;
|
||
|
|
using System.IO;
|
||
|
|
using System.Reflection;
|
||
|
|
using DiscImageChef.CommonTypes.Interop;
|
||
|
|
using DiscImageChef.Console;
|
||
|
|
using Eto.Drawing;
|
||
|
|
using Eto.Forms;
|
||
|
|
using Eto.Serialization.Xaml;
|
||
|
|
using PlatformID = DiscImageChef.CommonTypes.Interop.PlatformID;
|
||
|
|
using Version = DiscImageChef.CommonTypes.Interop.Version;
|
||
|
|
|
||
|
|
namespace DiscImageChef.Gui
|
||
|
|
{
|
||
|
|
public class frmConsole : Form
|
||
|
|
{
|
||
|
|
public frmConsole()
|
||
|
|
{
|
||
|
|
XamlReader.Load(this);
|
||
|
|
|
||
|
|
grdMessages.DataStore = ConsoleHandler.Entries;
|
||
|
|
grdMessages.Columns.Add(new GridColumn
|
||
|
|
{
|
||
|
|
DataCell = new TextBoxCell {Binding = Binding.Property<LogEntry, string>(r => $"{r.Timestamp}")},
|
||
|
|
HeaderText = "Time",
|
||
|
|
Sortable = true
|
||
|
|
});
|
||
|
|
grdMessages.Columns.Add(new GridColumn
|
||
|
|
{
|
||
|
|
DataCell = new TextBoxCell {Binding = Binding.Property<LogEntry, string>(r => r.Type)},
|
||
|
|
HeaderText = "Type",
|
||
|
|
Sortable = true
|
||
|
|
});
|
||
|
|
grdMessages.Columns.Add(new GridColumn
|
||
|
|
{
|
||
|
|
DataCell = new TextBoxCell {Binding = Binding.Property<LogEntry, string>(r => r.Module)},
|
||
|
|
HeaderText = "Module",
|
||
|
|
Sortable = true
|
||
|
|
});
|
||
|
|
grdMessages.Columns.Add(new GridColumn
|
||
|
|
{
|
||
|
|
DataCell = new TextBoxCell {Binding = Binding.Property<LogEntry, string>(r => r.Message)},
|
||
|
|
HeaderText = "Message",
|
||
|
|
Sortable = true
|
||
|
|
});
|
||
|
|
|
||
|
|
grdMessages.AllowMultipleSelection = false;
|
||
|
|
grdMessages.CellFormatting += (sender, e) =>
|
||
|
|
{
|
||
|
|
if(((LogEntry)e.Item).Type.ToLower() != "error") return;
|
||
|
|
|
||
|
|
e.BackgroundColor = Colors.Red;
|
||
|
|
e.ForegroundColor = Colors.Black;
|
||
|
|
};
|
||
|
|
grdMessages.AllowColumnReordering = true;
|
||
|
|
|
||
|
|
chkDebug.Checked = ConsoleHandler.Debug;
|
||
|
|
Closing += OnClosing;
|
||
|
|
}
|
||
|
|
|
||
|
|
void OnClosing(object sender, CancelEventArgs e)
|
||
|
|
{
|
||
|
|
// Otherwise if this closes it does not stop hearing events from collection, preventing console to keep working.
|
||
|
|
grdMessages.DataStore = null;
|
||
|
|
}
|
||
|
|
|
||
|
|
protected void OnChkDebugChecked(object sender, EventArgs e)
|
||
|
|
{
|
||
|
|
ConsoleHandler.Debug = chkDebug.Checked.Value;
|
||
|
|
}
|
||
|
|
|
||
|
|
protected void OnBtnClearClicked(object sender, EventArgs e)
|
||
|
|
{
|
||
|
|
ConsoleHandler.Entries.Clear();
|
||
|
|
}
|
||
|
|
|
||
|
|
protected void OnBtnSaveClicked(object sender, EventArgs e)
|
||
|
|
{
|
||
|
|
SaveFileDialog dlgSave = new SaveFileDialog {CheckFileExists = true};
|
||
|
|
dlgSave.Filters.Add(new FileFilter {Extensions = new[] {"log"}, Name = "Log files"});
|
||
|
|
DialogResult result = dlgSave.ShowDialog(this);
|
||
|
|
if(result != DialogResult.Ok) return;
|
||
|
|
|
||
|
|
try
|
||
|
|
{
|
||
|
|
FileStream logFs = new FileStream(dlgSave.FileName, FileMode.Create, FileAccess.ReadWrite);
|
||
|
|
StreamWriter logSw = new StreamWriter(logFs);
|
||
|
|
|
||
|
|
logSw.WriteLine("Log saved at {0}", DateTime.Now);
|
||
|
|
|
||
|
|
PlatformID platId = DetectOS.GetRealPlatformID();
|
||
|
|
string platVer = DetectOS.GetVersion();
|
||
|
|
AssemblyInformationalVersionAttribute assemblyVersion =
|
||
|
|
Attribute.GetCustomAttribute(typeof(DicConsole).Assembly,
|
||
|
|
typeof(AssemblyInformationalVersionAttribute)) as
|
||
|
|
AssemblyInformationalVersionAttribute;
|
||
|
|
|
||
|
|
logSw.WriteLine("################# System information #################");
|
||
|
|
logSw.WriteLine("{0} {1} ({2}-bit)", DetectOS.GetPlatformName(platId, platVer), platVer,
|
||
|
|
Environment.Is64BitOperatingSystem ? 64 : 32);
|
||
|
|
if(DetectOS.IsMono) logSw.WriteLine("Mono {0}", Version.GetMonoVersion());
|
||
|
|
else logSw.WriteLine(".NET Framework {0}", Environment.Version);
|
||
|
|
|
||
|
|
logSw.WriteLine();
|
||
|
|
|
||
|
|
logSw.WriteLine("################# Program information ################");
|
||
|
|
logSw.WriteLine("DiscImageChef {0}", assemblyVersion?.InformationalVersion);
|
||
|
|
logSw.WriteLine("Running in {0}-bit", Environment.Is64BitProcess ? 64 : 32);
|
||
|
|
logSw.WriteLine("Running GUI mode using {0}", Application.Instance.Platform.ID);
|
||
|
|
#if DEBUG
|
||
|
|
logSw.WriteLine("DEBUG version");
|
||
|
|
#endif
|
||
|
|
logSw.WriteLine("Command line: {0}", Environment.CommandLine);
|
||
|
|
logSw.WriteLine();
|
||
|
|
|
||
|
|
logSw.WriteLine("################# Console ################");
|
||
|
|
foreach(LogEntry entry in ConsoleHandler.Entries)
|
||
|
|
if(entry.Type != "Info")
|
||
|
|
logSw.WriteLine("{0}: ({1}) {2}", entry.Timestamp, entry.Type.ToLower(), entry.Message);
|
||
|
|
else
|
||
|
|
logSw.WriteLine("{0}: {1}", entry.Timestamp, entry.Message);
|
||
|
|
|
||
|
|
logSw.Close();
|
||
|
|
logFs.Close();
|
||
|
|
}
|
||
|
|
catch(Exception exception)
|
||
|
|
{
|
||
|
|
MessageBox.Show("Exception {0} trying to save logfile, details has been sent to console.",
|
||
|
|
exception.Message);
|
||
|
|
DicConsole.ErrorWriteLine("Console", exception.Message);
|
||
|
|
DicConsole.ErrorWriteLine("Console", exception.StackTrace);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#region XAML controls
|
||
|
|
GridView grdMessages;
|
||
|
|
CheckBox chkDebug;
|
||
|
|
Button btnClear;
|
||
|
|
Button btnSave;
|
||
|
|
#endregion
|
||
|
|
}
|
||
|
|
}
|