protected PluginEntryVM(PluginPackageInfoCR plugin, LoadProgress load) { Plugin = plugin; Plugin.PropertyChanged += Plugin_PropertyChanged; // Filter the dict to remove empty entries FilteredSupportedAlgorithms = new Dictionary <string, List <string> >(); foreach (var kvp in Plugin.SupportedDevicesAlgorithms) { if (kvp.Value == null || kvp.Value.Count <= 0) { continue; } FilteredSupportedAlgorithms[kvp.Key] = kvp.Value; } Load = load; Load.PropertyChanged += Install_PropertyChanged; Progress = new Progress <Tuple <PluginInstallProgressState, int> >(status => { var(state, progress) = status; string statusText = GetStateProgressText(state, progress); Load.IsInstalling = state < PluginInstallProgressState.FailedDownloadingPlugin; Load.Report((statusText, progress)); }); MinerPluginsManager.InstallAddProgress(plugin.PluginUUID, Progress); }
protected PluginEntryVM(PluginPackageInfoCR plugin, LoadProgress load) { Plugin = plugin; // Filter the dict to remove empty entries FilteredSupportedAlgorithms = new Dictionary <string, List <string> >(); foreach (var kvp in Plugin.SupportedDevicesAlgorithms) { if (kvp.Value == null || kvp.Value.Count <= 0) { continue; } FilteredSupportedAlgorithms[kvp.Key] = kvp.Value; } Load = load; Load.PropertyChanged += Install_PropertyChanged; Progress = new Progress <Tuple <PluginInstallProgressState, int> >(status => { var(state, progress) = status; string statusText; switch (state) { case PluginInstallProgressState.Pending: statusText = Tr("Pending Install"); break; case PluginInstallProgressState.DownloadingMiner: statusText = Tr("Downloading Miner: {0} %", $"{progress:F2}"); break; case PluginInstallProgressState.DownloadingPlugin: statusText = Tr("Downloading Plugin: {0} %", $"{progress:F2}"); break; case PluginInstallProgressState.ExtractingMiner: statusText = Tr("Extracting Miner: {0} %", $"{progress:F2}"); break; case PluginInstallProgressState.ExtractingPlugin: statusText = Tr("Extracting Plugin: {0} %", $"{progress:F2}"); break; default: statusText = Tr("Pending Install"); break; } Load.IsInstalling = state < PluginInstallProgressState.FailedDownloadingPlugin; Load.Report((statusText, progress)); }); MinerPluginsManager.InstallAddProgress(plugin.PluginUUID, Progress); }
private void FormShown(object sender, EventArgs e) { // TODO blocking make it async MinerPluginsManager.CrossReferenceInstalledWithOnline(); var rankedUUIDs = MinerPluginsManager.RankedPlugins.Select(plugin => plugin.PluginUUID).ToList(); //// update existing that are not in a task //var ignoreActive = GetActiveTasks(); //foreach (var controlsPair in _pluginInfoDetails.Values) //{ // var uuid = controlsPair.Item.PluginUUID; // if (ignoreActive.Contains(uuid)) continue; // var plugin = MinerPluginsManager.Plugins[uuid]; // setPluginInfoItem(controlsPair.Item, plugin); // setPluginInfoDetails(controlsPair.Details, plugin); //} var newPlugins = MinerPluginsManager.RankedPlugins.Where(plugin => _pluginInfoDetailControls.ContainsKey(plugin.PluginUUID) == false).ToList(); var lastSingleItemRow = rankedUUIDs.Count % 2 == 1; // create and add new plugins foreach (var plugin in newPlugins) { var controlsPair = new PluginControlPair { Item = new PluginInfoItem(), Details = CreatePluginInfoDetails() }; controlsPair.Item.OnButtonCancel = (s1, e1) => MinerPluginsManager.TryCancelInstall(plugin.PluginUUID); controlsPair.Details.OnButtonCancel = (s1, e1) => MinerPluginsManager.TryCancelInstall(plugin.PluginUUID); controlsPair.Progress = CreateProgressForPluginControlPair(controlsPair); // add control pairs _pluginInfoDetailControls.Add(plugin.PluginUUID, controlsPair); Controls.Add(controlsPair.Details); setPluginInfoItem(controlsPair.Item, plugin); setPluginInfoDetails(controlsPair.Details, plugin); // add append if any exists MinerPluginsManager.InstallAddProgress(plugin.PluginUUID, controlsPair.Progress); } // get row count var rowsNeeded = rankedUUIDs.Count / 2 + rankedUUIDs.Count % 2; var rowsAdded = flowLayoutPanelPluginsLV.Controls.Count; // we have new rows if (rowsAdded < rowsNeeded) { for (int add = 0; add < rowsNeeded - rowsAdded; add++) { var pluginRowItem = new PluginInfoItemRow(); flowLayoutPanelPluginsLV.Controls.Add(pluginRowItem); } } // we have too many else if (rowsAdded > rowsNeeded) { var toRemoveCount = rowsAdded - rowsNeeded; for (int remove = 0; remove < toRemoveCount; remove++) { var lastIndex = flowLayoutPanelPluginsLV.Controls.Count - 1; var lastRow = flowLayoutPanelPluginsLV.Controls[lastIndex] as PluginInfoItemRow; if (lastRow != null) { lastRow.RemovePluginInfoItem1(); lastRow.RemovePluginInfoItem2(); } flowLayoutPanelPluginsLV.Controls.RemoveAt(lastIndex); } } for (int item = 0; item < rankedUUIDs.Count; item++) { var uuid = rankedUUIDs[item]; var rowIndex = (item / 2); var isFirst = (item % 2) == 0; var controlsPair = _pluginInfoDetailControls[uuid]; var row = flowLayoutPanelPluginsLV.Controls[rowIndex] as PluginInfoItemRow; if (row == null) { continue; } if (isFirst) { row.SetPluginInfoItem1(controlsPair.Item); } else { row.SetPluginInfoItem2(controlsPair.Item); } } if (lastSingleItemRow) { var lastIndex = flowLayoutPanelPluginsLV.Controls.Count - 1; var lastRow = flowLayoutPanelPluginsLV.Controls[lastIndex] as PluginInfoItemRow; if (lastRow != null) { lastRow.RemovePluginInfoItem2(); } } }