예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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();
                }
            }
        }