/// <summary> /// Driver download progress /// </summary> /// <param name="progressType"></param> /// <param name="iTotalDownloaded"></param> /// <param name="iTotalSize"></param> /// <param name="iRetCode"></param> /// <param name="iPercentageCompleted"></param> /// <param name="progress"></param> /// <returns></returns> public bool downloadProgressCallback( DUSDKHandler.PROGRESS_TYPE progressType, long iTotalDownloaded, long iTotalSize, int iRetCode, int iPercentageCompleted, int progress ) { if (iTotalDownloaded >= 0 && iTotalSize > 0) { if (CurrentDispatcher.Thread != null) { CurrentDispatcher.BeginInvoke((Action)(() => { Progress = progress; })); } } return true; }
/// <summary> /// receives the progress of driver scan /// </summary> /// <param name="progressType"></param> /// <param name="data"></param> /// <param name="currentItemPos"></param> /// <param name="nTotalDriversToScan"></param> /// <param name="progress"></param> /// <returns></returns> public bool progressCallback(DUSDKHandler.PROGRESS_TYPE progressType, IntPtr data, int currentItemPos, int nTotalDriversToScan, int progress) { // here we will get the progress of driver scan. DriverData? dd = null; string driverName = string.Empty; string category = string.Empty; string VersionInstalled = string.Empty; string VersionUpdated = string.Empty; DateTime dtInstalled; if (data != IntPtr.Zero) { dd = (DriverData)Marshal.PtrToStructure( (IntPtr)(data.ToInt64() + currentItemPos * Marshal.SizeOf(typeof(DriverData))), typeof(DriverData) ); } switch (progressType) { case DUSDKHandler.PROGRESS_TYPE.PROGRESS_SIZE_SCAN_DATA: nTotalDrivers = nTotalDriversToScan; driverData = new DriverData[nTotalDriversToScan]; UserUpdates = new Dictionary<int, DriverData>(); break; case DUSDKHandler.PROGRESS_TYPE.PROGRESS_SCANNING: if (data != IntPtr.Zero && !bIsStopped) { driverData[currentItemPos] = (DriverData)dd; DeviceInfo item = new DeviceInfo( null, //driverData[currentItemPos].nDbCategoryID.ToString(), driverData[currentItemPos].category, driverData[currentItemPos].driverName, driverData[currentItemPos].installInf, driverData[currentItemPos].version, currentItemPos.ToString(), driverData[currentItemPos].hardwareId, driverData[currentItemPos].CompatibleIdIndex.ToString() ); dtInstalled = DateTime.FromFileTime(driverData[currentItemPos].ulDateTimeQuadPart); item.InstalledDriverDate = dtInstalled.ToShortDateString(); if (CurrentDispatcher.Thread != null) { CurrentDispatcher.Invoke((MethodInvoker)delegate { ScanStatusText = item.DeviceName; var excludedDevice = ExcludedDevices.FirstOrDefault(d => d.Id == item.Id); if (excludedDevice != null) { item.IsExcluded = excludedDevice.IsExcluded; } if (!item.IsExcluded) { DevicesForScanning.Add(item); } AllDevices.Add(item); } , null); } } break; case DUSDKHandler.PROGRESS_TYPE.PROGRESS_RETRIEVING_UPDATES_DATA: if (CurrentDispatcher.Thread != null) { CurrentDispatcher.Invoke((MethodInvoker)delegate { ScanStatusText = string.Empty; ScanStatusTitle = WPFLocalizeExtensionHelpers.GetUIString("ContactingServer"); }, null); } break; //case DUSDKHandler.PROGRESS_TYPE.PROGRESS_RETRIEVING_UPDATES_FAILED_INET: // break; case DUSDKHandler.PROGRESS_TYPE.PROGRESS_FILTERING_UPDATES: // this.UIThread(() => label3.Text = "Getting driver updates ... "); if (data != IntPtr.Zero && !bIsStopped) { // get driver update information DriverData DriverUpdate = (DriverData)Marshal.PtrToStructure( (IntPtr)(data.ToInt64() + currentItemPos * Marshal.SizeOf(typeof(DriverData))), typeof(DriverData) ); if (CurrentDispatcher.Thread != null) { CurrentDispatcher.Invoke((MethodInvoker)delegate { DeviceInfo deviceInfo = DevicesForScanning.Where(wh => wh.Id == currentItemPos.ToString()).FirstOrDefault(); if (deviceInfo != null) { deviceInfo.NeedsUpdate = true; deviceInfo.SelectedForUpdate = true; deviceInfo.NewDriverDate = DateTime.FromFileTime(DriverUpdate.ulDateTimeQuadPart).ToShortDateString(); deviceInfo.DownloadLink = DriverUpdate.libURL; deviceInfo.InstallCommand = DriverUpdate.SetupLaunchParam; } UserUpdates.Add(currentItemPos, DriverUpdate); } , null); } } break; case DUSDKHandler.PROGRESS_TYPE.PROGRESS_SCANNED: //if (CurrentDispatcher.Thread != null) //{ // CurrentDispatcher.BeginInvoke((Action)(() => // { // ScanStatusTitle = WPFLocalizeExtensionHelpers.GetUIString("ScanCompleted"); // ScanStatusText = ""; // })); //} break; case DUSDKHandler.PROGRESS_TYPE.PROGRESS_UPDATE_STARTED_FOR_SINGLE: { if (data != IntPtr.Zero && dd.HasValue) { if (CurrentDispatcher.Thread != null) { CurrentDispatcher.BeginInvoke((Action)(() => { DownloadedDrivers.Add(new DownloadingDriverModel(WPFLocalizeExtensionHelpers.GetUIString("InstallingDriver"), devicesForUpdate[currentItemPos])); ScanStatusTitle = WPFLocalizeExtensionHelpers.GetUIString("InstallingDriver"); //Progress = 0; })); } } } break; case DUSDKHandler.PROGRESS_TYPE.PROGRESS_UPDATE_END_FOR_SINGLE: { if (data != IntPtr.Zero && dd.HasValue) { if (CurrentDispatcher.Thread != null) { CurrentDispatcher.BeginInvoke((Action)(() => { //ScanStatusTitle = ScanStatusText = WPFLocalizeExtensionHelpers.GetUIString("UpdateCompleted") + " " + ((DriverData)dd).driverName; })); } } } break; case DUSDKHandler.PROGRESS_TYPE.PROGRESS_UPDATE_SUCCESSFUL: { if (data != IntPtr.Zero && dd.HasValue) { if (CurrentDispatcher.Thread != null) { CurrentDispatcher.BeginInvoke((Action)(() => { ScanFinishTitle = String.Format("{0} " + WPFLocalizeExtensionHelpers.GetUIString("OutdatedDriversUpdated"), devicesForUpdate.Count()); Status = ScanStatus.UpdateFinished; ScanStatusTitle = ScanFinishTitle; ScanStatusText = string.Empty; })); } } } break; case DUSDKHandler.PROGRESS_TYPE.PROGRESS_UPDATE_FAILED: { if (data != IntPtr.Zero && dd.HasValue) { if (CurrentDispatcher.Thread != null) { CurrentDispatcher.BeginInvoke((Action)(() => { ScanStatusTitle = WPFLocalizeExtensionHelpers.GetUIString("UpdateFailed") + " " + ((DriverData)dd).driverName; ScanStatusText = string.Empty; })); } } } break; case DUSDKHandler.PROGRESS_TYPE.PROGRESS_DOWNLOAD_STARTED_FOR_SINGLE: { if (data != IntPtr.Zero && dd.HasValue) { if (CurrentDispatcher.Thread != null) { CurrentDispatcher.BeginInvoke((Action)(() => { DownloadedDrivers.Add(new DownloadingDriverModel(WPFLocalizeExtensionHelpers.GetUIString("DownloadingDriver"), devicesForUpdate[currentItemPos])); ScanStatusTitle = WPFLocalizeExtensionHelpers.GetUIString("DownloadingDriver"); ScanStatusText = ((DriverData)dd).driverName; })); } } } break; case DUSDKHandler.PROGRESS_TYPE.PROGRESS_DOWNLOAD_END_FOR_SINGLE: { if (data != IntPtr.Zero && dd.HasValue) { if (CurrentDispatcher.Thread != null) { CurrentDispatcher.BeginInvoke((Action)(() => { ScanStatusText = WPFLocalizeExtensionHelpers.GetUIString("DownloadComplete") + " " + ((DriverData)dd).driverName; })); } } } break; case DUSDKHandler.PROGRESS_TYPE.PROGRESS_DOWNLOAD_END_FOR_SINGLE_UNREG: { // download failed as user is unregistered } break; case DUSDKHandler.PROGRESS_TYPE.PROGRESS_DOWNLOAD_END_FOR_SINGLE_INET_ERROR: { // download failed because of Internet Error } break; default: break; } if (progress > 0) { if (CurrentDispatcher.Thread != null) { CurrentDispatcher.BeginInvoke((Action)(() => { Progress = progress; })); } } return true; }