public override int GetHashCode()
        {
            int hash = 1;

            if (Active != false)
            {
                hash ^= Active.GetHashCode();
            }
            if (ChannelName.Length != 0)
            {
                hash ^= ChannelName.GetHashCode();
            }
            if (PluginsPath.Length != 0)
            {
                hash ^= PluginsPath.GetHashCode();
            }
            if (BuildAll != false)
            {
                hash ^= BuildAll.GetHashCode();
            }
            if (BuildMini != false)
            {
                hash ^= BuildMini.GetHashCode();
            }
            if (SelectIp != false)
            {
                hash ^= SelectIp.GetHashCode();
            }
            if (Debug != false)
            {
                hash ^= Debug.GetHashCode();
            }
            return(hash);
        }
        /// <summary>
        /// Adds the plugin xml config to the plugin class and sets status flags
        /// </summary>
        public void AddPluginFile(Plugin plugin, IPlugin pluginFile, string filePath)
        {
            //get the path info
            string pluginPath = Path.GetDirectoryName(filePath);
            string filename   = Path.GetFileName(filePath);

            //sort out backslashes as MakeRelativePath is fussy about these
            if (!PluginsPath.Trim().EndsWith(@"\"))
            {
                PluginsPath += @"\";
            }
            if (pluginPath.Trim().EndsWith(@"\"))
            {
                pluginPath.Remove(pluginPath.Length - 1, 1);
            }

            string relativePath = FileUtils.MakeRelativePath(PluginsPath, pluginPath);

            plugin.AddPluginFile(pluginFile, filename, pluginPath, relativePath);

            if (plugin.HasPluginFile)
            {
                //synch the name
                plugin.Name = plugin.PluginFile.Name;

                //remove any dot prefixes on the file extensions for consistency
                //with how file extensions are held
                for (int i = 0; i < plugin.PluginFile.FileExtensions.Length; i++)
                {
                    plugin.PluginFile.FileExtensions[i] = plugin.PluginFile.FileExtensions[i].TrimStart(new[] { '.' });
                }
            }
            else
            {
                if (String.IsNullOrEmpty(plugin.Name))
                {
                    plugin.Name = "Unknown";
                }
            }

            //set the status flags
            SetPluginStatus(plugin);
        }