/*************************************************************************** The Disc Image Chef ---------------------------------------------------------------------------- Filename : Plugins.cs Version : 1.0 Author(s) : Natalia Portillo Component : Plugins Revision : $Revision$ Last change by : $Author$ Date : $Date$ --[ Description ] ---------------------------------------------------------- Base methods for plugins. --[ License ] -------------------------------------------------------------- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ---------------------------------------------------------------------------- Copyright (C) 2011-2014 Claunia.com ****************************************************************************/ //$Id$ using System; using System.Collections.Generic; using System.Reflection; using DiscImageChef.ImagePlugins; using DiscImageChef.PartPlugins; using DiscImageChef.Filesystems; using DiscImageChef.Console; namespace DiscImageChef { public class PluginBase { public Dictionary PluginsList; public Dictionary PartPluginsList; public Dictionary ImagePluginsList; public PluginBase() { PluginsList = new Dictionary(); PartPluginsList = new Dictionary(); ImagePluginsList = new Dictionary(); } public void RegisterAllPlugins() { Assembly assembly; assembly = Assembly.GetAssembly(typeof(ImagePlugin)); foreach (Type type in assembly.GetTypes()) { try { if (type.IsSubclassOf(typeof(ImagePlugin))) { ImagePlugin plugin = (ImagePlugin)type.GetConstructor(Type.EmptyTypes).Invoke(new object[] { }); RegisterImagePlugin(plugin); } } catch (Exception exception) { DicConsole.ErrorWriteLine("Exception {0}", exception); } } assembly = Assembly.GetAssembly(typeof(PartPlugin)); foreach (Type type in assembly.GetTypes()) { try { if (type.IsSubclassOf(typeof(PartPlugin))) { PartPlugin plugin = (PartPlugin)type.GetConstructor(Type.EmptyTypes).Invoke(new object[] { }); RegisterPartPlugin(plugin); } } catch (Exception exception) { DicConsole.ErrorWriteLine("Exception {0}", exception); } } assembly = Assembly.GetAssembly(typeof(Filesystem)); foreach (Type type in assembly.GetTypes()) { try { if (type.IsSubclassOf(typeof(Filesystem))) { Filesystem plugin = (Filesystem)type.GetConstructor(Type.EmptyTypes).Invoke(new object[] { }); RegisterPlugin(plugin); } } catch (Exception exception) { DicConsole.ErrorWriteLine("Exception {0}", exception); } } } void RegisterImagePlugin(ImagePlugin plugin) { if (!ImagePluginsList.ContainsKey(plugin.Name.ToLower())) { ImagePluginsList.Add(plugin.Name.ToLower(), plugin); } } void RegisterPlugin(Filesystem plugin) { if (!PluginsList.ContainsKey(plugin.Name.ToLower())) { PluginsList.Add(plugin.Name.ToLower(), plugin); } } void RegisterPartPlugin(PartPlugin partplugin) { if (!PartPluginsList.ContainsKey(partplugin.Name.ToLower())) { PartPluginsList.Add(partplugin.Name.ToLower(), partplugin); } } } }