42f6b670e0
Fix zlib compression corrupting the file. Fix sarc and msbt format descriptions. Adjust when a file in an IArchiveFile gets saved. Porgress on MTA 0X50 compression type. not finished atm. Start on ICompressionFormat interface. Will soon be the way compression formats are all handled.
152 lines
5.0 KiB
C#
152 lines
5.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Switch_Toolbox.Library
|
|
{
|
|
public class FileManager
|
|
{
|
|
public FileManager()
|
|
{
|
|
|
|
}
|
|
|
|
public static IFileMenuExtension[] GetMenuExtensions()
|
|
{
|
|
//Add plugin and main application menu extensions
|
|
List<IFileMenuExtension> types = new List<IFileMenuExtension>();
|
|
foreach (IFileFormat fileFormat in GetFileFormats())
|
|
{
|
|
foreach (Type type in fileFormat.Types)
|
|
{
|
|
Type[] interfaces_array = type.GetInterfaces();
|
|
for (int i = 0; i < interfaces_array.Length; i++)
|
|
{
|
|
if (interfaces_array[i] == typeof(IFileMenuExtension))
|
|
{
|
|
types.Add((IFileMenuExtension)Activator.CreateInstance(type));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return types.ToArray();
|
|
}
|
|
|
|
public static IFileMenuExtension GetMenuExtensions(IFileFormat fileFormat)
|
|
{
|
|
foreach (Type type in fileFormat.Types)
|
|
{
|
|
Type[] interfaces_array = type.GetInterfaces();
|
|
for (int i = 0; i < interfaces_array.Length; i++)
|
|
{
|
|
if (interfaces_array[i] == typeof(IFileMenuExtension))
|
|
{
|
|
return (IFileMenuExtension)Activator.CreateInstance(type);
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static IEditor<System.Windows.Forms.UserControl>[] GetEditors()
|
|
{
|
|
var editors = new List<IEditor<System.Windows.Forms.UserControl>>();
|
|
foreach (var plugin in GenericPluginLoader._Plugins)
|
|
{
|
|
foreach (Type type in plugin.Value.Types)
|
|
{
|
|
Type[] interfaces_array = type.GetInterfaces();
|
|
for (int i = 0; i < interfaces_array.Length; i++)
|
|
{
|
|
if (interfaces_array[i] == typeof(IEditor<System.Windows.Forms.UserControl>))
|
|
{
|
|
editors.Add((IEditor<System.Windows.Forms.UserControl>)Activator.CreateInstance(type));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return editors.ToArray();
|
|
}
|
|
|
|
public static VGAdudioFile[] GetVGAudioFileFormats()
|
|
{
|
|
List<VGAdudioFile> types = new List<VGAdudioFile>();
|
|
|
|
foreach (var fileFormat in GetFileFormats())
|
|
{
|
|
if (fileFormat is VGAdudioFile)
|
|
types.Add((VGAdudioFile)fileFormat);
|
|
}
|
|
|
|
return types.ToArray();
|
|
}
|
|
|
|
public static ICompressionFormat[] GetCompressionFormats()
|
|
{
|
|
//Add plugin and main application file formats
|
|
List<ICompressionFormat> types = new List<ICompressionFormat>();
|
|
LoadCompressionFormats(FormatList.GetCompressionFormats(), types);
|
|
|
|
if (GenericPluginLoader._Plugins == null)
|
|
GenericPluginLoader.LoadPlugin();
|
|
|
|
foreach (var plugin in GenericPluginLoader._Plugins)
|
|
{
|
|
LoadCompressionFormats(plugin.Value.Types, types);
|
|
}
|
|
|
|
return types.ToArray();
|
|
}
|
|
|
|
private static void LoadCompressionFormats(Type[] Types, List<ICompressionFormat> Formats)
|
|
{
|
|
foreach (Type type in Types)
|
|
{
|
|
Type[] interfaces_array = type.GetInterfaces();
|
|
for (int i = 0; i < interfaces_array.Length; i++)
|
|
{
|
|
if (interfaces_array[i] == typeof(ICompressionFormat))
|
|
{
|
|
Formats.Add((ICompressionFormat)Activator.CreateInstance(type));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static IFileFormat[] GetFileFormats()
|
|
{
|
|
//Add plugin and main application file formats
|
|
List<IFileFormat> types = new List<IFileFormat>();
|
|
LoadFileFormats(FormatList.GetFileFormats(), types);
|
|
|
|
if (GenericPluginLoader._Plugins == null)
|
|
GenericPluginLoader.LoadPlugin();
|
|
|
|
foreach (var plugin in GenericPluginLoader._Plugins)
|
|
{
|
|
LoadFileFormats(plugin.Value.Types, types);
|
|
}
|
|
|
|
return types.ToArray();
|
|
}
|
|
|
|
private static void LoadFileFormats(Type[] Types, List<IFileFormat> Formats)
|
|
{
|
|
foreach (Type type in Types)
|
|
{
|
|
Type[] interfaces_array = type.GetInterfaces();
|
|
for (int i = 0; i < interfaces_array.Length; i++)
|
|
{
|
|
if (interfaces_array[i] == typeof(IFileFormat))
|
|
{
|
|
Formats.Add((IFileFormat)Activator.CreateInstance(type));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|