public UpdaterDownloadListener(UpdateWindow w, HTTPDownloader d)
 {
     window     = w;
     downloader = d;
     d.setProgressChangedEventHandler(new DownloadProgressChangedEventHandler(onProgressChanged));
     d.setNewFileDownloadingEventHandler(new NewFileDownloadingEventHandler(OnNewFile));
     d.setAllFileDownloadedEventHandler(new AllFileDownloadedEventHandler(OnAllFile));
 }
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

            m = new Mutex(false, "rom2updater");
            if (!m.WaitOne(0, false))
            {
                Application.Current.Shutdown();
            }
            if (IsProcessOpen("warlords.patcher.exe"))
            {
                Application.Current.Shutdown();
            }

            //Da fare gestione config
            string updateIndexFileName = "metaFiles/UpdaterIndex";
            string cleanerFileName     = "metaFiles/UpdateCleaner";
            string baseAddress         = "http://patcher.metin2warlords.net/";
            string argument            = "nonhofantasia";

            UpdateWindow window = new UpdateWindow();

            window.Show();
            WebClient client = new WebClient();

            client.BaseAddress = baseAddress;

            string s = client.DownloadString(updateIndexFileName);
            string c = client.DownloadString(cleanerFileName);


            CleanerExtractor ce          = new CleanerExtractor(c);
            List <PatchFile> toCleanFile = ce.extract();

            foreach (PatchFile f in toCleanFile)
            {
                string path = Path.Combine(f.BasePath, f.Name);
                if (File.Exists(path))
                {
                    File.SetAttributes(path, FileAttributes.Normal);
                    File.Delete(path);
                }
            }
            PipeDelimitedFileManifestParser p = new PipeDelimitedFileManifestParser(s);
            ObsoleteFileFinder scanner        = new ObsoleteFileFinder(p);

            scanner.Search();
            List <PatchFile> toUpdateFiles = scanner.getToUpdateFiles();
            List <PatchFile> sourceFiles   = scanner.getSourceFiles();
            string           exeName       = sourceFiles[0].Name;
            BackgroundWorker bw            = new BackgroundWorker();

            if (toUpdateFiles.Count > 0)
            {
                HTTPDownloader          downloader = new HTTPDownloader(toUpdateFiles, client, "sourceUpdater/");
                UpdaterDownloadListener listener   = new UpdaterDownloadListener(window, downloader);
                downloader.allFileDownloaded += (object ss) =>
                {
                    System.Diagnostics.Process.Start(exeName, argument);
                    Application.Current.Dispatcher.Invoke((Action)(() =>
                    {
                        window.Close();
                    }
                                                                   ));
                };

                bw.DoWork += (object se, DoWorkEventArgs es) =>
                {
                    downloader.startDownload();
                };
                bw.RunWorkerAsync();
            }


            if (bw.IsBusy == false)
            {
                System.Diagnostics.Process.Start(exeName, argument);
                window.Close();
            }
        }