private bool ImportDrivers(DriverPackage driverPackage, Driver driver, BackgroundWorker worker)
        {
            ++progressCount;

            progresPercent = progressStepPercent + Convert.ToInt32(((double)progressCount / progressTotal * 100) / progressStepCount / totalDriverPackages);

            worker.ReportProgress(
                progressStart + (progresPercent),
                string.Format("Importing Driver Package: {0}\n - importing driver ({1}/{2}) '{3} ({4})'",
                              driverPackage.Name,
                              progressCount,
                              progressTotal,
                              driver.Model,
                              driver.Version
                              )
                );

            log.Debug("Importing driver: " + driver.Model);
            // this is a great idea but throws an file hash error when adding driver to package
            if (registry.ReadBool("DriverPackageQuickMerge") && driver.CheckIfExists(ConnectionManager))
            {
                log.Debug("QuickMergeCheckIfExists: " + driver.Model);
                driverPackage.AddDriverToCategory(driver);
            }
            else if (driver.CreateObjectFromInfFile(ConnectionManager))
            {
                log.Debug("CreateObjectFromInfFile: " + driver.Model);
                // add category to driver object
                driverPackage.AddDriverToCategory(driver);
            }
            log.Debug("Done importing driver: " + driver.Model);

            refreshPackage = true;
            refreshDP      = true;

            return(true);
        }
        private bool ProcessDrivers(DriverPackage driverPackage, IResultObject driverObject, BackgroundWorker worker)
        {
            worker.ReportProgress(
                progressStart + (progresPercent),
                string.Format("Importing Driver Package: {0}\n - retriving driver '{1} ({2})'",
                              driverPackage.Name, driverObject["LocalizedDisplayName"].StringValue,
                              driverObject["DriverVersion"].StringValue
                              )
                );

            if (driverPackage.Drivers.TryGetValue(driverObject["DriverINFFile"].StringValue + driverObject["DriverVersion"].StringValue, out Driver driver))
            {
                if (driver.Version == driverObject["DriverVersion"].StringValue)
                {
                    driver.AddObject(driverObject);

                    if (driverPackage.DriverContentExists(driver))
                    {
                        driverPackage.AddDriverToCategory(driver);
                        driver.Import = false;
                    }
                }
            }
            else
            {
                worker.ReportProgress(
                    progressStart + (progresPercent),
                    string.Format("Importing Driver Package: {0}\n - removing driver: {1} ({2})",
                                  driverPackage.Name, driverObject["LocalizedDisplayName"].StringValue,
                                  driverObject["DriverVersion"].StringValue)
                    );
                // remove from driver package and category if source folder have been removed
                driverPackage.RemoveDriverFromCategory(driverObject);
                if (driverPackage.RemoveDriverFromDriverPack(driverObject))
                {
                    refreshDP = true;
                }
            }

            return(true);
        }