80 lines
2.1 KiB
C#
80 lines
2.1 KiB
C#
using System.Reflection;
|
|
|
|
namespace skyscraper8.AnagramViewer
|
|
{
|
|
internal static class Program
|
|
{
|
|
/// <summary>
|
|
/// The main entry point for the application.
|
|
/// </summary>
|
|
[STAThread]
|
|
static void Main(string[] args)
|
|
{
|
|
// To customize application configuration such as set high DPI settings or default font,
|
|
// see https://aka.ms/applicationconfiguration.
|
|
ApplicationConfiguration.Initialize();
|
|
|
|
if (args.Length == 0)
|
|
{
|
|
MessageBox.Show("Invalid function call!");
|
|
return;
|
|
}
|
|
|
|
FileInfo fi = new FileInfo(args[0]);
|
|
if (!fi.Exists)
|
|
{
|
|
MessageBox.Show("Couldn't find {0}!", args[0]);
|
|
return;
|
|
}
|
|
|
|
FileStream fileStream = fi.OpenRead();
|
|
BufferedStream bufferedStream = new BufferedStream(fileStream, 2048);
|
|
|
|
IFileTypeHandler usableHandler = null;
|
|
DataType determiendDataType = DataType.Unknown;
|
|
Type fileHandlerType = typeof(IFileTypeHandler);
|
|
Assembly assembly = fileHandlerType.Assembly;
|
|
Type[] types = assembly.GetTypes();
|
|
foreach (Type typeCandidate in types)
|
|
{
|
|
if (!typeCandidate.IsAssignableTo(fileHandlerType))
|
|
continue;
|
|
|
|
if (typeCandidate.IsInterface)
|
|
continue;
|
|
|
|
bufferedStream.Position = 0;
|
|
IFileTypeHandler instance = (IFileTypeHandler)Activator.CreateInstance(typeCandidate);
|
|
DataType checkDataType = instance.CheckDataType(bufferedStream);
|
|
if (checkDataType != DataType.Unknown)
|
|
{
|
|
usableHandler = instance;
|
|
determiendDataType = checkDataType;
|
|
bufferedStream.Position = 0;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (usableHandler == null)
|
|
{
|
|
MessageBox.Show(String.Format("Don't know what type of file {0} is.", fi.FullName));
|
|
return;
|
|
}
|
|
|
|
Form finalForm = null;
|
|
switch (determiendDataType)
|
|
{
|
|
case DataType.Image:
|
|
Image asImage = usableHandler.AsImage(bufferedStream);
|
|
finalForm = new ImageViewer(asImage);
|
|
break;
|
|
default:
|
|
MessageBox.Show(String.Format("Don't know how to handle files of type {0}", determiendDataType.ToString()));
|
|
return;
|
|
}
|
|
|
|
finalForm.Text = String.Format("Anagram Viewer - [{0}]", fi.Name);
|
|
Application.Run(finalForm);
|
|
}
|
|
}
|
|
} |