This class trys to automatically find pathes to game folders etc and keeps track of them.
        private void Formsetup_Load(object sender, EventArgs e)
        {
            // ==========================================================
            // Reading XML Extension Config
            // ==========================================================
            _extConf = new ExtensionConfiguration();
            _extConf.ReadConfig();

            // ==========================================================
            // Find Pathes for Game Folders etc.
            // ==========================================================
            _pathFinder = new PathFinder();
            _pathFinder.GatherPathes();

            //Check if we know our dirs
            tb_sc1dir.Text = _pathFinder.GetPath("%SC1_INSTALL_PATH%");

            tb_sc2dir.Text = _pathFinder.GetPath("%SC2_INSTALL_PATH%");

            tb_wc3dir.Text = _pathFinder.GetPath("%WC3_INSTALL_PATH%");
        }
        private void LoaderForm_Load(object sender, EventArgs e)
        {
            // ==========================================================
            // Reading XML Extension Config
            // ==========================================================
            _extConf = new ExtensionConfiguration();
            _extConf.ReadConfig();

            // ==========================================================
            // Find Pathes for Game Folders etc.
            // ==========================================================
            _pathFinder = new PathFinder();
            _pathFinder.GatherPathes();

            // ==========================================================
            // Start Download
            // ==========================================================
            WebRequest wrGeturl = WebRequest.Create(_fileLink);

            var resp = (HttpWebResponse)wrGeturl.GetResponse();
            int statusCode = (int)resp.StatusCode;

            // ==========================================================
            // Check Status Code
            // ==========================================================
            if (statusCode == 200)
            {
                // Construct URI
                _fileUri = resp.ResponseUri;
                // ==========================================================
                // Check Extension
                // ==========================================================
                // TODO: Deal with encoded characters in the URL (such as %20)
                // resp.Headers('Content-Disposition')
                string fileName = _fileUri.Segments[_fileUri.Segments.Length - 1].Replace('+', ' ');
                string extension = Path.GetExtension(fileName);

                if (string.IsNullOrEmpty(extension))
                {
                    MessageBox.Show("The link you followed cannot be handled by Nibbler.", "Nibbler Error", MessageBoxButtons.OK);
                    Application.Exit();
                }

                extension = extension.ToLower().Substring(1);

                if (_extConf.IsValidExtension(extension))
                {
                    lblFilename.Text = fileName; // Display filename

                    //ask user if they want to download file
                    if (MessageBox.Show(string.Format("Do you want to download {0}?",fileName), "Confirm download", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        // a 'DialogResult.Yes' value was returned from the MessageBox
                        bgWorker.RunWorkerAsync();
                    }
                    else
                    {
                        Application.Exit();
                    }

                }

                else
                {
                    // No action for this Extension defined
                    // Either link is broken or someone tampered with the XML

                    // Quit application, maybe should do something better, like pop-up a message, but
                    // that would be annoying too.. so lets just exit here...
                    // or not. waiting for program to do nothing then quit is stupid
                    // show user a popup!
                    MessageBox.Show("Nibbler does not handle files of type " + extension.ToUpper() + ".", "Nibbler Error", MessageBoxButtons.OK);
                    Application.Exit();
                }
            }
        }