Changeset 13333 for branches/RefactorPluginInfrastructure-2522
- Timestamp:
- 11/23/15 11:32:22 (9 years ago)
- Location:
- branches/RefactorPluginInfrastructure-2522/HeuristicLab.PluginInfrastructure/3.3
- Files:
-
- 19 deleted
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/RefactorPluginInfrastructure-2522/HeuristicLab.PluginInfrastructure/3.3/Advanced/InstallationManagerForm.Designer.cs
r12012 r13333 51 51 this.localPluginsTabPage = new System.Windows.Forms.TabPage(); 52 52 this.localPluginsView = new HeuristicLab.PluginInfrastructure.Advanced.InstalledPluginsView(); 53 this.availablePluginsTabPage = new System.Windows.Forms.TabPage();54 this.remotePluginInstaller = new HeuristicLab.PluginInfrastructure.Advanced.AvailablePluginsView();55 this.uploadPluginsTabPage = new System.Windows.Forms.TabPage();56 this.pluginEditor = new HeuristicLab.PluginInfrastructure.Advanced.UploadPluginsView();57 this.manageProductsTabPage = new System.Windows.Forms.TabPage();58 this.productEditor = new HeuristicLab.PluginInfrastructure.Advanced.EditProductsView();59 53 this.logTabPage = new System.Windows.Forms.TabPage(); 60 54 this.logTextBox = new System.Windows.Forms.TextBox(); 61 this.menuStrip = new System.Windows.Forms.MenuStrip();62 this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();63 this.connectionSettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();64 55 this.toolTip = new System.Windows.Forms.ToolTip(this.components); 65 56 this.statusStrip.SuspendLayout(); 66 57 this.tabControl.SuspendLayout(); 67 58 this.localPluginsTabPage.SuspendLayout(); 68 this.availablePluginsTabPage.SuspendLayout();69 this.uploadPluginsTabPage.SuspendLayout();70 this.manageProductsTabPage.SuspendLayout();71 59 this.logTabPage.SuspendLayout(); 72 this.menuStrip.SuspendLayout();73 60 this.SuspendLayout(); 74 61 // … … 102 89 | System.Windows.Forms.AnchorStyles.Right))); 103 90 this.tabControl.Controls.Add(this.localPluginsTabPage); 104 this.tabControl.Controls.Add(this.availablePluginsTabPage);105 this.tabControl.Controls.Add(this.uploadPluginsTabPage);106 this.tabControl.Controls.Add(this.manageProductsTabPage);107 91 this.tabControl.Controls.Add(this.logTabPage); 108 92 this.tabControl.Location = new System.Drawing.Point(12, 27); … … 130 114 | System.Windows.Forms.AnchorStyles.Left) 131 115 | System.Windows.Forms.AnchorStyles.Right))); 132 this.localPluginsView.InstallationManager = null;116 // this.localPluginsView.InstallationManager = null; 133 117 this.localPluginsView.Location = new System.Drawing.Point(6, 6); 134 118 this.localPluginsView.Name = "localPluginsView"; … … 137 121 this.localPluginsView.StatusView = null; 138 122 this.localPluginsView.TabIndex = 0; 139 //140 // availablePluginsTabPage141 //142 this.availablePluginsTabPage.Controls.Add(this.remotePluginInstaller);143 this.availablePluginsTabPage.Location = new System.Drawing.Point(4, 22);144 this.availablePluginsTabPage.Name = "availablePluginsTabPage";145 this.availablePluginsTabPage.Padding = new System.Windows.Forms.Padding(3);146 this.availablePluginsTabPage.Size = new System.Drawing.Size(590, 366);147 this.availablePluginsTabPage.TabIndex = 1;148 this.availablePluginsTabPage.Text = "Available Plugins";149 this.toolTip.SetToolTip(this.availablePluginsTabPage, "Download and install new plugins");150 this.availablePluginsTabPage.UseVisualStyleBackColor = true;151 //152 // remotePluginInstaller153 //154 this.remotePluginInstaller.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)155 | System.Windows.Forms.AnchorStyles.Left)156 | System.Windows.Forms.AnchorStyles.Right)));157 this.remotePluginInstaller.InstallationManager = null;158 this.remotePluginInstaller.Location = new System.Drawing.Point(6, 6);159 this.remotePluginInstaller.Name = "remotePluginInstaller";160 this.remotePluginInstaller.PluginManager = null;161 this.remotePluginInstaller.Size = new System.Drawing.Size(578, 354);162 this.remotePluginInstaller.StatusView = null;163 this.remotePluginInstaller.TabIndex = 14;164 //165 // uploadPluginsTabPage166 //167 this.uploadPluginsTabPage.Controls.Add(this.pluginEditor);168 this.uploadPluginsTabPage.Location = new System.Drawing.Point(4, 22);169 this.uploadPluginsTabPage.Name = "uploadPluginsTabPage";170 this.uploadPluginsTabPage.Padding = new System.Windows.Forms.Padding(3);171 this.uploadPluginsTabPage.Size = new System.Drawing.Size(590, 366);172 this.uploadPluginsTabPage.TabIndex = 3;173 this.uploadPluginsTabPage.Text = "Upload Plugins";174 this.toolTip.SetToolTip(this.uploadPluginsTabPage, "Upload plugins");175 this.uploadPluginsTabPage.UseVisualStyleBackColor = true;176 //177 // pluginEditor178 //179 this.pluginEditor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)180 | System.Windows.Forms.AnchorStyles.Left)181 | System.Windows.Forms.AnchorStyles.Right)));182 this.pluginEditor.Location = new System.Drawing.Point(6, 6);183 this.pluginEditor.Name = "pluginEditor";184 this.pluginEditor.PluginManager = null;185 this.pluginEditor.Size = new System.Drawing.Size(578, 354);186 this.pluginEditor.StatusView = null;187 this.pluginEditor.TabIndex = 0;188 //189 // manageProductsTabPage190 //191 this.manageProductsTabPage.Controls.Add(this.productEditor);192 this.manageProductsTabPage.Location = new System.Drawing.Point(4, 22);193 this.manageProductsTabPage.Name = "manageProductsTabPage";194 this.manageProductsTabPage.Padding = new System.Windows.Forms.Padding(3);195 this.manageProductsTabPage.Size = new System.Drawing.Size(590, 366);196 this.manageProductsTabPage.TabIndex = 4;197 this.manageProductsTabPage.Text = "Manage Products";198 this.toolTip.SetToolTip(this.manageProductsTabPage, "Create and manage products");199 this.manageProductsTabPage.UseVisualStyleBackColor = true;200 //201 // productEditor202 //203 this.productEditor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)204 | System.Windows.Forms.AnchorStyles.Left)205 | System.Windows.Forms.AnchorStyles.Right)));206 this.productEditor.Location = new System.Drawing.Point(6, 6);207 this.productEditor.Name = "productEditor";208 this.productEditor.Size = new System.Drawing.Size(578, 354);209 this.productEditor.StatusView = null;210 this.productEditor.TabIndex = 0;211 123 // 212 124 // logTabPage … … 234 146 this.logTextBox.TabIndex = 0; 235 147 // 236 // menuStrip237 //238 this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {239 this.optionsToolStripMenuItem});240 this.menuStrip.Location = new System.Drawing.Point(0, 0);241 this.menuStrip.Name = "menuStrip";242 this.menuStrip.Size = new System.Drawing.Size(622, 24);243 this.menuStrip.TabIndex = 17;244 this.menuStrip.Text = "menuStrip1";245 //246 // optionsToolStripMenuItem247 //248 this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {249 this.connectionSettingsToolStripMenuItem});250 this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";251 this.optionsToolStripMenuItem.Size = new System.Drawing.Size(61, 20);252 this.optionsToolStripMenuItem.Text = "Options";253 //254 // connectionSettingsToolStripMenuItem255 //256 this.connectionSettingsToolStripMenuItem.Image = global::HeuristicLab.PluginInfrastructure.Resources.NetworkConnections;257 this.connectionSettingsToolStripMenuItem.Name = "connectionSettingsToolStripMenuItem";258 this.connectionSettingsToolStripMenuItem.Size = new System.Drawing.Size(190, 22);259 this.connectionSettingsToolStripMenuItem.Text = "Connection Settings...";260 this.connectionSettingsToolStripMenuItem.Click += new System.EventHandler(this.connectionSettingsToolStripMenuItem_Click);261 //262 148 // InstallationManagerForm 263 149 // … … 267 153 this.Controls.Add(this.tabControl); 268 154 this.Controls.Add(this.statusStrip); 269 this.Controls.Add(this.menuStrip);270 155 this.Icon = global::HeuristicLab.PluginInfrastructure.Resources.HeuristicLab; 271 this.MainMenuStrip = this.menuStrip;272 156 this.Name = "InstallationManagerForm"; 273 157 this.Text = "Plugin Manager"; … … 276 160 this.tabControl.ResumeLayout(false); 277 161 this.localPluginsTabPage.ResumeLayout(false); 278 this.availablePluginsTabPage.ResumeLayout(false);279 this.uploadPluginsTabPage.ResumeLayout(false);280 this.manageProductsTabPage.ResumeLayout(false);281 162 this.logTabPage.ResumeLayout(false); 282 163 this.logTabPage.PerformLayout(); 283 this.menuStrip.ResumeLayout(false);284 this.menuStrip.PerformLayout();285 164 this.ResumeLayout(false); 286 165 this.PerformLayout(); … … 293 172 private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar; 294 173 private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel; 295 private AvailablePluginsView remotePluginInstaller;296 174 private System.Windows.Forms.TabControl tabControl; 297 175 private System.Windows.Forms.TabPage localPluginsTabPage; 298 private System.Windows.Forms.TabPage availablePluginsTabPage;299 176 private System.Windows.Forms.TabPage logTabPage; 300 177 private System.Windows.Forms.TextBox logTextBox; 301 private System.Windows.Forms.MenuStrip menuStrip;302 private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem;303 private System.Windows.Forms.ToolStripMenuItem connectionSettingsToolStripMenuItem;304 private System.Windows.Forms.TabPage uploadPluginsTabPage;305 private System.Windows.Forms.TabPage manageProductsTabPage;306 private UploadPluginsView pluginEditor;307 private EditProductsView productEditor;308 178 private InstalledPluginsView localPluginsView; 309 179 private System.Windows.Forms.ToolTip toolTip; -
branches/RefactorPluginInfrastructure-2522/HeuristicLab.PluginInfrastructure/3.3/Advanced/InstallationManagerForm.cs
r12012 r13333 30 30 namespace HeuristicLab.PluginInfrastructure.Advanced { 31 31 internal partial class InstallationManagerForm : Form, IStatusView { 32 private InstallationManager installationManager;33 32 private string pluginDir; 34 33 … … 45 44 pluginDir = Application.StartupPath; 46 45 47 installationManager = new InstallationManager(pluginDir);48 installationManager.PluginInstalled += new EventHandler<PluginInfrastructureEventArgs>(installationManager_PluginInstalled);49 installationManager.PluginRemoved += new EventHandler<PluginInfrastructureEventArgs>(installationManager_PluginRemoved);50 installationManager.PluginUpdated += new EventHandler<PluginInfrastructureEventArgs>(installationManager_PluginUpdated);51 installationManager.PreInstallPlugin += new EventHandler<PluginInfrastructureCancelEventArgs>(installationManager_PreInstallPlugin);52 installationManager.PreRemovePlugin += new EventHandler<PluginInfrastructureCancelEventArgs>(installationManager_PreRemovePlugin);53 installationManager.PreUpdatePlugin += new EventHandler<PluginInfrastructureCancelEventArgs>(installationManager_PreUpdatePlugin);54 55 // show or hide controls for uploading plugins based on setting56 if (!HeuristicLab.PluginInfrastructure.Properties.Settings.Default.ShowPluginUploadControls) {57 tabControl.Controls.Remove(uploadPluginsTabPage);58 tabControl.Controls.Remove(manageProductsTabPage);59 } else {60 pluginEditor.PluginManager = pluginManager;61 }62 63 46 localPluginsView.StatusView = this; 64 47 localPluginsView.PluginManager = pluginManager; 65 localPluginsView.InstallationManager = installationManager; 66 67 remotePluginInstaller.StatusView = this; 68 remotePluginInstaller.InstallationManager = installationManager; 69 remotePluginInstaller.PluginManager = pluginManager; 70 71 pluginEditor.StatusView = this; 72 pluginEditor.PluginManager = pluginManager; 73 74 productEditor.StatusView = this; 48 // localPluginsView.InstallationManager = installationManager; 75 49 } 76 50 … … 94 68 #endregion 95 69 96 #region installation manager event handlers97 private void installationManager_PreUpdatePlugin(object sender, PluginInfrastructureCancelEventArgs e) {98 if (e.Plugins.Count() > 0) {99 e.Cancel = (bool)Invoke((Func<IEnumerable<IPluginDescription>, bool>)ConfirmUpdateAction, e.Plugins) == false;100 }101 }102 103 private void installationManager_PreRemovePlugin(object sender, PluginInfrastructureCancelEventArgs e) {104 if (e.Plugins.Count() > 0) {105 e.Cancel = (bool)Invoke((Func<IEnumerable<IPluginDescription>, bool>)ConfirmRemoveAction, e.Plugins) == false;106 }107 }108 109 private void installationManager_PreInstallPlugin(object sender, PluginInfrastructureCancelEventArgs e) {110 if (e.Plugins.Count() > 0)111 if ((bool)Invoke((Func<IEnumerable<IPluginDescription>, bool>)ConfirmInstallAction, e.Plugins) == true) {112 SetStatusStrip("Installing " + e.Plugins.Aggregate("", (a, b) => a.ToString() + "; " + b.ToString()));113 e.Cancel = false;114 } else {115 e.Cancel = true;116 SetStatusStrip("Install canceled");117 }118 }119 120 private void installationManager_PluginUpdated(object sender, PluginInfrastructureEventArgs e) {121 SetStatusStrip("Updated " + e.Entity);122 }123 124 private void installationManager_PluginRemoved(object sender, PluginInfrastructureEventArgs e) {125 SetStatusStrip("Removed " + e.Entity);126 }127 128 private void installationManager_PluginInstalled(object sender, PluginInfrastructureEventArgs e) {129 SetStatusStrip("Installed " + e.Entity);130 }131 #endregion132 70 133 71 #region button events 134 private void connectionSettingsToolStripMenuItem_Click(object sender, EventArgs e) {135 using (var conSetupView = new ConnectionSetupView()) {136 conSetupView.ShowDialog(this);137 }138 }139 72 private void tabControl_SelectedIndexChanged(object sender, EventArgs e) { 140 73 toolStripStatusLabel.Text = string.Empty; 141 74 } 142 #endregion143 144 #region confirmation dialogs145 private bool ConfirmRemoveAction(IEnumerable<IPluginDescription> plugins) {146 StringBuilder strBuilder = new StringBuilder();147 foreach (var plugin in plugins) {148 foreach (var file in plugin.Files) {149 strBuilder.AppendLine(Path.GetFileName(file.Name));150 }151 }152 using (var confirmationDialog = new ConfirmationDialog("Confirm Delete", "Do you want to delete following files?", strBuilder.ToString())) {153 return (confirmationDialog.ShowDialog(this)) == DialogResult.OK;154 }155 }156 157 private bool ConfirmUpdateAction(IEnumerable<IPluginDescription> plugins) {158 StringBuilder strBuilder = new StringBuilder();159 foreach (var plugin in plugins) {160 strBuilder.AppendLine(plugin.ToString());161 }162 using (var confirmationDialog = new ConfirmationDialog("Confirm Update", "Do you want to update following plugins?", strBuilder.ToString())) {163 return (confirmationDialog.ShowDialog(this)) == DialogResult.OK;164 }165 }166 167 private bool ConfirmInstallAction(IEnumerable<IPluginDescription> plugins) {168 foreach (var plugin in plugins) {169 if (!string.IsNullOrEmpty(plugin.LicenseText)) {170 using (var licenseConfirmationBox = new LicenseConfirmationDialog(plugin)) {171 if (licenseConfirmationBox.ShowDialog(this) != DialogResult.OK)172 return false;173 }174 }175 }176 return true;177 }178 179 180 75 #endregion 181 76 … … 191 86 #endregion 192 87 193 194 protected override void OnClosing(CancelEventArgs e) {195 installationManager.PluginInstalled -= new EventHandler<PluginInfrastructureEventArgs>(installationManager_PluginInstalled);196 installationManager.PluginRemoved -= new EventHandler<PluginInfrastructureEventArgs>(installationManager_PluginRemoved);197 installationManager.PluginUpdated -= new EventHandler<PluginInfrastructureEventArgs>(installationManager_PluginUpdated);198 installationManager.PreInstallPlugin -= new EventHandler<PluginInfrastructureCancelEventArgs>(installationManager_PreInstallPlugin);199 installationManager.PreRemovePlugin -= new EventHandler<PluginInfrastructureCancelEventArgs>(installationManager_PreRemovePlugin);200 installationManager.PreUpdatePlugin -= new EventHandler<PluginInfrastructureCancelEventArgs>(installationManager_PreUpdatePlugin);201 base.OnClosing(e);202 }203 88 204 89 #region IStatusView Members -
branches/RefactorPluginInfrastructure-2522/HeuristicLab.PluginInfrastructure/3.3/Advanced/InstalledPluginsView.Designer.cs
r12012 r13333 54 54 this.pluginImageList = new System.Windows.Forms.ImageList(this.components); 55 55 this.toolTip = new System.Windows.Forms.ToolTip(this.components); 56 this.refreshButton = new System.Windows.Forms.Button();57 this.removeButton = new System.Windows.Forms.Button();58 this.updateSelectedButton = new System.Windows.Forms.Button();59 56 this.SuspendLayout(); 60 57 // … … 86 83 this.localPluginsListView.View = System.Windows.Forms.View.Details; 87 84 this.localPluginsListView.ItemActivate += new System.EventHandler(this.localPluginsListView_ItemActivate); 88 this.localPluginsListView.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.pluginsListView_ItemChecked);89 85 // 90 86 // nameHeader … … 109 105 this.pluginImageList.TransparentColor = System.Drawing.Color.Transparent; 110 106 // 111 // refreshButton112 //113 this.refreshButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));114 this.refreshButton.Image = global::HeuristicLab.PluginInfrastructure.Resources.Repeat;115 this.refreshButton.Location = new System.Drawing.Point(0, 483);116 this.refreshButton.Name = "refreshButton";117 this.refreshButton.Size = new System.Drawing.Size(96, 25);118 this.refreshButton.TabIndex = 14;119 this.refreshButton.Text = "Refresh List";120 this.refreshButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;121 this.toolTip.SetToolTip(this.refreshButton, "Refresh List of Installed Plugins");122 this.refreshButton.UseVisualStyleBackColor = true;123 this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);124 //125 // removeButton126 //127 this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));128 this.removeButton.Enabled = false;129 this.removeButton.Image = global::HeuristicLab.PluginInfrastructure.Resources.Remove;130 this.removeButton.Location = new System.Drawing.Point(222, 483);131 this.removeButton.Name = "removeButton";132 this.removeButton.Size = new System.Drawing.Size(110, 25);133 this.removeButton.TabIndex = 12;134 this.removeButton.Text = "Delete Selected";135 this.removeButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;136 this.toolTip.SetToolTip(this.removeButton, "Delete all selected plugins from disk");137 this.removeButton.UseVisualStyleBackColor = true;138 this.removeButton.Click += new System.EventHandler(this.removeButton_Click);139 //140 // updateSelectedButton141 //142 this.updateSelectedButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));143 this.updateSelectedButton.Enabled = false;144 this.updateSelectedButton.Image = global::HeuristicLab.PluginInfrastructure.Resources.Internet;145 this.updateSelectedButton.Location = new System.Drawing.Point(102, 483);146 this.updateSelectedButton.Name = "updateSelectedButton";147 this.updateSelectedButton.Size = new System.Drawing.Size(114, 25);148 this.updateSelectedButton.TabIndex = 6;149 this.updateSelectedButton.Text = "Update Selected";150 this.updateSelectedButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;151 this.toolTip.SetToolTip(this.updateSelectedButton, "Update all selected plugins");152 this.updateSelectedButton.UseVisualStyleBackColor = true;153 this.updateSelectedButton.Click += new System.EventHandler(this.updateSelectedButton_Click);154 //155 107 // LocalPluginsView 156 108 // 157 109 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 158 110 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; 159 this.Controls.Add(this.refreshButton);160 111 this.Controls.Add(this.localPluginsListView); 161 this.Controls.Add(this.removeButton);162 this.Controls.Add(this.updateSelectedButton);163 112 this.Name = "LocalPluginsView"; 164 113 this.Size = new System.Drawing.Size(539, 508); … … 169 118 #endregion 170 119 171 private System.Windows.Forms.Button updateSelectedButton;172 private System.Windows.Forms.Button removeButton;173 120 private MultiSelectListView localPluginsListView; 174 121 private System.Windows.Forms.ColumnHeader nameHeader; … … 177 124 private System.Windows.Forms.ToolTip toolTip; 178 125 private System.Windows.Forms.ImageList pluginImageList; 179 private System.Windows.Forms.Button refreshButton;180 126 // private LocalPluginManagerView localPluginManagerView; 181 127 } -
branches/RefactorPluginInfrastructure-2522/HeuristicLab.PluginInfrastructure/3.3/Advanced/InstalledPluginsView.cs
r12012 r13333 31 31 private const string CheckingPluginsMessage = "Checking for updated plugins..."; 32 32 private const string NoUpdatesAvailableMessage = "No updates available."; 33 private BackgroundWorker removePluginsBackgroundWorker;34 private BackgroundWorker updatePluginsBackgroundWorker;35 33 36 34 private ListViewGroup enabledPluginsGroup; … … 46 44 } 47 45 48 private InstallationManager installationManager;49 public InstallationManager InstallationManager {50 get { return installationManager; }51 set { installationManager = value; }52 }46 // private InstallationManager installationManager; 47 // public InstallationManager InstallationManager { 48 // get { return installationManager; } 49 // set { installationManager = value; } 50 // } 53 51 54 52 public InstalledPluginsView() … … 58 56 disabledPluginsGroup = localPluginsListView.Groups["disabledPluginsGroup"]; 59 57 pluginImageList.Images.Add(HeuristicLab.PluginInfrastructure.Resources.Plugin); 60 removePluginsBackgroundWorker = new BackgroundWorker();61 removePluginsBackgroundWorker.DoWork += new DoWorkEventHandler(removePluginsBackgroundWorker_DoWork);62 removePluginsBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(removePluginsBackgroundWorker_RunWorkerCompleted);63 updatePluginsBackgroundWorker = new BackgroundWorker();64 updatePluginsBackgroundWorker.DoWork += new DoWorkEventHandler(updatePluginsBackgroundWorker_DoWork);65 updatePluginsBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(updatePluginsBackgroundWorker_RunWorkerCompleted);66 67 58 UpdateControl(); 68 59 } 69 60 70 61 71 72 #region event handlers for plugin removal background worker73 void removePluginsBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {74 if (e.Error != null) {75 StatusView.ShowError("File Deletion Error", "There was problem while deleting files." + Environment.NewLine + e.Error.Message);76 }77 UpdateControl();78 StatusView.HideProgressIndicator();79 StatusView.UnlockUI();80 }81 82 void removePluginsBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) {83 IEnumerable<IPluginDescription> pluginsToRemove = (IEnumerable<IPluginDescription>)e.Argument;84 if (pluginsToRemove.Count() > 0) {85 installationManager.Remove(pluginsToRemove);86 pluginManager.DiscoverAndCheckPlugins();87 }88 }89 #endregion90 91 62 #region event handlers for update plugins backgroundworker 92 void updatePluginsBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {93 if (e.Error != null) {94 StatusView.ShowError("Connection Error",95 "There was an error while connecting to the server." + Environment.NewLine +96 "Please check your connection settings and user credentials.");97 }98 StatusView.RemoveMessage(CheckingPluginsMessage);99 StatusView.HideProgressIndicator();100 UpdateControl();101 StatusView.UnlockUI();102 }103 104 void updatePluginsBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) {105 IEnumerable<IPluginDescription> selectedPlugins = (IEnumerable<IPluginDescription>)e.Argument;106 var remotePlugins = installationManager.GetRemotePluginList();107 // if there is a local plugin with same name and same major and minor version then it's an update108 var pluginsToUpdate = from remotePlugin in remotePlugins109 let matchingLocalPlugins = from installedPlugin in selectedPlugins110 where installedPlugin.Name == remotePlugin.Name111 where installedPlugin.Version.Major == remotePlugin.Version.Major112 where installedPlugin.Version.Minor == remotePlugin.Version.Minor113 where IsNewerThan(remotePlugin, installedPlugin)114 select installedPlugin115 where matchingLocalPlugins.Count() > 0116 select remotePlugin;117 if (pluginsToUpdate.Count() > 0) {118 bool cancelled;119 installationManager.Update(pluginsToUpdate, out cancelled);120 if (!cancelled) pluginManager.DiscoverAndCheckPlugins();121 }122 }123 124 63 // compares for two plugins with same major and minor version if plugin1 is newer than plugin2 125 64 private static bool IsNewerThan(IPluginDescription plugin1, IPluginDescription plugin2) { … … 145 84 localPluginsListView.SuppressItemCheckedEvents = false; 146 85 } 147 removeButton.Enabled = localPluginsListView.CheckedItems.Count > 0;148 updateSelectedButton.Enabled = localPluginsListView.CheckedItems.Count > 0;149 86 Util.ResizeColumns(localPluginsListView.Columns.OfType<ColumnHeader>()); 150 87 } … … 162 99 } 163 100 164 private void pluginsListView_ItemChecked(object sender, ItemCheckedEventArgs e) {165 // checked items are marked for removal166 if (e.Item.Checked) {167 List<ListViewItem> modifiedItems = new List<ListViewItem>();168 foreach (ListViewItem item in localPluginsListView.SelectedItems) {169 modifiedItems.Add(item);170 int oldItemsCount = 0;171 while (oldItemsCount < modifiedItems.Count) {172 oldItemsCount = modifiedItems.Count;173 var oldModifiedItems = new List<ListViewItem>(modifiedItems);174 foreach (var modifiedItem in oldModifiedItems) {175 var plugin = (IPluginDescription)modifiedItem.Tag;176 // also check all dependent plugins177 foreach (ListViewItem dependentItem in localPluginsListView.Items) {178 var dependent = (IPluginDescription)dependentItem.Tag;179 if (!modifiedItems.Contains(dependentItem) &&180 !dependentItem.Checked && (from dep in dependent.Dependencies181 where dep.Name == plugin.Name182 where dep.Version == plugin.Version183 select dep).Any()) {184 modifiedItems.Add(dependentItem);185 }186 }187 }188 }189 }190 localPluginsListView.CheckItems(modifiedItems);191 } else {192 List<ListViewItem> modifiedItems = new List<ListViewItem>();193 foreach (ListViewItem item in localPluginsListView.SelectedItems) {194 modifiedItems.Add(item);195 }196 localPluginsListView.UncheckItems(modifiedItems);197 }198 OnItemsCheckedChanged(EventArgs.Empty);199 }200 101 201 102 private void localPluginsListView_ItemActivate(object sender, EventArgs e) { … … 206 107 } 207 108 } 208 209 private void OnItemsCheckedChanged(EventArgs eventArgs) {210 removeButton.Enabled = localPluginsListView.CheckedItems.Count > 0;211 updateSelectedButton.Enabled = localPluginsListView.CheckedItems.Count > 0;212 }213 214 private void updateSelectedButton_Click(object sender, EventArgs e) {215 StatusView.LockUI();216 StatusView.ShowProgressIndicator();217 StatusView.RemoveMessage(NoUpdatesAvailableMessage);218 StatusView.ShowMessage(CheckingPluginsMessage);219 var checkedPlugins = localPluginsListView.CheckedItems.OfType<ListViewItem>()220 .Select(item => item.Tag)221 .OfType<IPluginDescription>()222 .ToList();223 updatePluginsBackgroundWorker.RunWorkerAsync(checkedPlugins);224 }225 226 private void removeButton_Click(object sender, EventArgs e) {227 StatusView.LockUI();228 StatusView.ShowProgressIndicator();229 var checkedPlugins = localPluginsListView.CheckedItems.OfType<ListViewItem>()230 .Select(item => item.Tag)231 .OfType<IPluginDescription>()232 .ToList();233 removePluginsBackgroundWorker.RunWorkerAsync(checkedPlugins);234 }235 236 private void refreshButton_Click(object sender, EventArgs e) {237 StatusView.LockUI();238 StatusView.ShowProgressIndicator();239 // refresh = update empty list of plugins (plugins are reloaded)240 updatePluginsBackgroundWorker.RunWorkerAsync(new IPluginDescription[0]);241 }242 109 } 243 110 } -
branches/RefactorPluginInfrastructure-2522/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj
r11650 r13333 121 121 </ItemGroup> 122 122 <ItemGroup> 123 <Compile Include="Advanced\ AvailablePluginsView.cs">123 <Compile Include="Advanced\InstallationManagerControl.cs"> 124 124 <SubType>UserControl</SubType> 125 125 </Compile> 126 <Compile Include="Advanced\AvailablePluginsView.Designer.cs"> 127 <DependentUpon>AvailablePluginsView.cs</DependentUpon> 128 </Compile> 129 <Compile Include="Advanced\BasicUpdateView.cs"> 130 <SubType>UserControl</SubType> 131 </Compile> 132 <Compile Include="Advanced\BasicUpdateView.Designer.cs"> 133 <DependentUpon>BasicUpdateView.cs</DependentUpon> 134 </Compile> 135 <Compile Include="Advanced\ConfirmationDialog.cs"> 136 <SubType>Form</SubType> 137 </Compile> 138 <Compile Include="Advanced\ConfirmationDialog.Designer.cs"> 139 <DependentUpon>ConfirmationDialog.cs</DependentUpon> 140 </Compile> 141 <Compile Include="Advanced\ConnectionSetupView.cs"> 142 <SubType>Form</SubType> 143 </Compile> 144 <Compile Include="Advanced\ConnectionSetupView.Designer.cs"> 145 <DependentUpon>ConnectionSetupView.cs</DependentUpon> 146 </Compile> 147 <Compile Include="Advanced\PluginUpdaterForm.cs"> 148 <SubType>Form</SubType> 149 </Compile> 150 <Compile Include="Advanced\PluginUpdaterForm.Designer.cs"> 151 <DependentUpon>PluginUpdaterForm.cs</DependentUpon> 152 </Compile> 153 <Compile Include="Advanced\DeploymentService\AdminServiceClientFactory.cs" /> 154 <Compile Include="Advanced\DeploymentService\DeploymentServerCertificateValidator.cs" /> 155 <Compile Include="Advanced\DeploymentService\ServiceClients.cs" /> 156 <Compile Include="Advanced\DeploymentService\UpdateServiceClientFactory.cs" /> 157 <Compile Include="Advanced\EditProductsView.cs"> 158 <SubType>UserControl</SubType> 159 </Compile> 160 <Compile Include="Advanced\EditProductsView.Designer.cs"> 161 <DependentUpon>EditProductsView.cs</DependentUpon> 126 <Compile Include="Advanced\InstallationManagerControl.Designer.cs"> 127 <DependentUpon>InstallationManagerControl.cs</DependentUpon> 128 </Compile> 129 <Compile Include="Advanced\InstallationManagerForm.cs"> 130 <SubType>Form</SubType> 131 </Compile> 132 <Compile Include="Advanced\InstallationManagerForm.Designer.cs"> 133 <DependentUpon>InstallationManagerForm.cs</DependentUpon> 162 134 </Compile> 163 135 <Compile Include="Advanced\InstalledPluginsView.cs"> … … 167 139 <DependentUpon>InstalledPluginsView.cs</DependentUpon> 168 140 </Compile> 169 <Compile Include="Advanced\LicenseConfirmationDialog.cs"> 170 <SubType>Form</SubType> 171 </Compile> 172 <Compile Include="Advanced\LicenseConfirmationDialog.Designer.cs"> 173 <DependentUpon>LicenseConfirmationDialog.cs</DependentUpon> 174 </Compile> 175 <Compile Include="Advanced\UploadPluginsView.cs"> 176 <SubType>UserControl</SubType> 177 </Compile> 178 <Compile Include="Advanced\UploadPluginsView.Designer.cs"> 179 <DependentUpon>UploadPluginsView.cs</DependentUpon> 180 </Compile> 181 <Compile Include="Advanced\Util.cs" /> 182 <Compile Include="Advanced\InstallationManagerControl.cs"> 183 <SubType>UserControl</SubType> 184 </Compile> 185 <Compile Include="Advanced\InstallationManagerControl.Designer.cs"> 186 <DependentUpon>InstallationManagerControl.cs</DependentUpon> 187 </Compile> 188 <Compile Include="Advanced\InstallationManagerException.cs" /> 189 <Compile Include="Advanced\InstallationManager.cs" /> 190 <Compile Include="Advanced\InstallationManagerForm.cs"> 191 <SubType>Form</SubType> 192 </Compile> 193 <Compile Include="Advanced\InstallationManagerForm.Designer.cs"> 194 <DependentUpon>InstallationManagerForm.cs</DependentUpon> 195 </Compile> 196 <Compile Include="Advanced\DeploymentService\PluginDescription.cs"> 141 <Compile Include="Advanced\IStatusDisplay.cs"> 197 142 <SubType>Code</SubType> 198 143 </Compile> 199 <Compile Include="Advanced\DeploymentService\ProductDescription.cs">200 <SubType>Code</SubType>201 </Compile>202 <Compile Include="Advanced\IStatusDisplay.cs" />203 144 <Compile Include="Advanced\LicenseView.cs"> 204 145 <SubType>Form</SubType> … … 218 159 <Compile Include="Advanced\PluginView.Designer.cs"> 219 160 <DependentUpon>PluginView.cs</DependentUpon> 161 </Compile> 162 <Compile Include="Advanced\Util.cs"> 163 <SubType>Code</SubType> 220 164 </Compile> 221 165 <Compile Include="AssemblyHelpers.cs" /> … … 257 201 <Compile Include="Interfaces\IControlManager.cs" /> 258 202 <Compile Include="Interfaces\IPlugin.cs" /> 259 <Compile Include="ControlManager.cs" />260 203 <Compile Include="Interfaces\IPluginDescription.cs" /> 261 204 <Compile Include="InvalidPluginException.cs" /> … … 272 215 <Compile Include="Main.cs" /> 273 216 <Compile Include="Properties\AssemblyInfo.cs" /> 217 <Compile Include="Sandboxing\SandboxManager.cs"> 218 <SubType>Code</SubType> 219 </Compile> 274 220 <Compile Include="TypeExtensions.cs" /> 275 <None Include="Advanced\DeploymentService\GenerateServiceClients.cmd" />276 221 <None Include="app.config"> 277 222 <SubType>Designer</SubType> … … 293 238 <DependentUpon>Resources.resx</DependentUpon> 294 239 </Compile> 295 <Compile Include="Sandboxing\SandboxManager.cs" />296 240 <Compile Include="Starter\AboutDialog.cs"> 297 241 <SubType>Form</SubType> … … 314 258 </ItemGroup> 315 259 <ItemGroup> 316 <EmbeddedResource Include="Advanced\DeploymentService\services.heuristiclab.com.cer" />317 260 <None Include="Resources\Error.ico" /> 318 261 <Content Include="Resources\HeuristicLab.ico" /> … … 362 305 </BootstrapperPackage> 363 306 </ItemGroup> 307 <ItemGroup> 308 <Folder Include="Advanced\DeploymentService\" /> 309 </ItemGroup> 364 310 <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> 365 311 <!-- To modify your build process, add your task inside one of the targets below and uncomment it. -
branches/RefactorPluginInfrastructure-2522/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.cs
r12012 r13333 37 37 public partial class StarterForm : Form { 38 38 private const string pluginManagerItemName = "Plugin Manager"; 39 private const string updatePluginsItemName = "Updates Available";40 private const string optimizerItemName = "Optimizer"; 39 // private const string updatePluginsItemName = "Updates Available"; 40 private const string optimizerItemName = "Optimizer"; // TODO: encoding a specific name of an application here is problematic (applications are discovered dynamically) 41 41 42 42 private readonly ICommandLineArgument[] arguments; 43 43 44 44 private ListViewItem pluginManagerListViewItem; 45 private bool abortRequested; 45 private bool abortRequested; // TODO: necessary 46 46 private PluginManager pluginManager; 47 47 private SplashScreen splashScreen; 48 private bool updatesAvailable = false;49 48 50 49 /// <summary> … … 69 68 pluginManager.DiscoverAndCheckPlugins(); 70 69 UpdateApplicationsList(); 71 72 CheckUpdatesAvailableAsync();73 70 } 74 71 … … 122 119 } 123 120 } 124 } else if (selected.Text == updatePluginsItemName) {125 if (pluginManager.Plugins.Any(x => x.PluginState == PluginState.Loaded)) {126 MessageBox.Show("Updating is not possible while another HeuristicLab application is active." + Environment.NewLine +127 "Please stop all active HeuristicLab applications and try again.", "Update plugins",128 MessageBoxButtons.OK, MessageBoxIcon.Information);129 } else {130 try {131 Cursor = Cursors.AppStarting;132 using (PluginUpdaterForm form = new PluginUpdaterForm(pluginManager)) {133 form.ShowDialog(this);134 }135 updatesAvailable = false;136 CheckUpdatesAvailableAsync();137 UpdateApplicationsList();138 }139 finally {140 Cursor = Cursors.Arrow;141 }142 }143 121 } else { 144 122 ApplicationDescription app = (ApplicationDescription)applicationsListView.SelectedItems[0].Tag; … … 182 160 applicationsListView.Items.Clear(); 183 161 AddPluginManagerItem(); 184 AddUpdatePluginsItem();185 162 186 163 foreach (ApplicationDescription info in pluginManager.Applications) { … … 209 186 210 187 applicationsListView.Items.Add(pluginManagerListViewItem); 211 }212 213 private void AddUpdatePluginsItem() {214 if (updatesAvailable) {215 var updateListViewItem = new ListViewItem(updatePluginsItemName, 1);216 updateListViewItem.Group = applicationsListView.Groups["Plugin Management"];217 updateListViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(updateListViewItem, ""));218 updateListViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(updateListViewItem, "Download and install updates"));219 updateListViewItem.ToolTipText = "Download and install updates";220 221 applicationsListView.Items.Add(updateListViewItem);222 }223 }224 225 private void CheckUpdatesAvailableAsync() {226 string pluginPath = Path.GetFullPath(Application.StartupPath);227 var task = Task.Factory.StartNew<bool>(() => {228 var installationManager = new InstallationManager(pluginPath);229 IEnumerable<IPluginDescription> installedPlugins = pluginManager.Plugins.OfType<IPluginDescription>();230 var remotePlugins = installationManager.GetRemotePluginList();231 // if there is a local plugin with same name and same major and minor version then it's an update232 var pluginsToUpdate = from remotePlugin in remotePlugins233 let matchingLocalPlugins = from installedPlugin in installedPlugins234 where installedPlugin.Name == remotePlugin.Name235 where installedPlugin.Version.Major == remotePlugin.Version.Major236 where installedPlugin.Version.Minor == remotePlugin.Version.Minor237 where Util.IsNewerThan(remotePlugin, installedPlugin)238 select installedPlugin239 where matchingLocalPlugins.Count() > 0240 select remotePlugin;241 return pluginsToUpdate.Count() > 0;242 });243 task.ContinueWith(t => {244 try {245 t.Wait();246 updatesAvailable = t.Result;247 UpdateApplicationsList();248 }249 catch (AggregateException ae) {250 ae.Handle(ex => {251 if (ex is InstallationManagerException) {252 // this is expected when no internet connection is available => do nothing253 return true;254 } else {255 return false;256 }257 });258 }259 });260 188 } 261 189 -
branches/RefactorPluginInfrastructure-2522/HeuristicLab.PluginInfrastructure/3.3/app.config
r11623 r13333 7 7 </configSections> 8 8 9 <userSettings>10 <HeuristicLab.PluginInfrastructure.Properties.Settings>11 <setting name="UpdateLocationUserName" serializeAs="String">12 <value>anonymous</value>13 </setting>14 <setting name="UpdateLocationPassword" serializeAs="String">15 <value>GetTheLab!</value>16 </setting>17 <setting name="ShowPluginUploadControls" serializeAs="String">18 <value>False</value>19 </setting>20 <setting name="UpdateLocation" serializeAs="String">21 <value>http://services.heuristiclab.com/Deployment-3.3/UpdateService.svc</value>22 </setting>23 <setting name="UpdateLocationAdministrationAddress" serializeAs="String">24 <value>http://services.heuristiclab.com/Deployment-3.3/AdminService.svc</value>25 </setting>26 </HeuristicLab.PluginInfrastructure.Properties.Settings>27 </userSettings>28 29 <system.serviceModel>30 <bindings>31 <wsHttpBinding>32 <binding name="WSHttpBinding_IUpdateService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="200000000" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">33 <readerQuotas maxDepth="32" maxStringContentLength="200000000" maxArrayLength="200000000" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>34 <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>35 <security mode="Message">36 <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>37 <message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default"/>38 </security>39 </binding>40 41 <binding name="WSHttpBinding_IAdminService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="200000000" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">42 <readerQuotas maxDepth="32" maxStringContentLength="200000000" maxArrayLength="200000000" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>43 <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>44 <security mode="Message">45 <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>46 <message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default"/>47 </security>48 </binding>49 </wsHttpBinding>50 </bindings>51 52 <client>53 <endpoint address="http://services.heuristiclab.com/Deployment-3.3/UpdateService.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IUpdateService" contract="HeuristicLab.PluginInfrastructure.Advanced.DeploymentService.IUpdateService" name="WSHttpBinding_IUpdateService">54 <identity>55 <certificate encodedValue="AwAAAAEAAAAUAAAAwK1+2oAmcy/mI2P2QjyiJRh0y60gAAAAAQAAACoCAAAwggImMIIBj6ADAgECAhAIkseQ2EEhgU720qJA61gqMA0GCSqGSIb3DQEBBAUAMCQxIjAgBgNVBAMTGXNlcnZpY2VzLmhldXJpc3RpY2xhYi5jb20wHhcNMTAwNTExMTExNDAyWhcNMzkxMjMxMjM1OTU5WjAkMSIwIAYDVQQDExlzZXJ2aWNlcy5oZXVyaXN0aWNsYWIuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq26Bwmwc7k+4W30qLQ2j+FInEL5BuH6opDY6CSlrtt3xQS/anrhvpbf3QghLDVINzcHkzbPmm/SguG4F85QLB6xO+tJaOvRo0iEK5g3c307vMIru7FJwk/OhplEQ5J1hbDgL3zOJlrWlgtqRVxCtVdF3XroI9BctOt1NkeKv9ewIDAQABo1kwVzBVBgNVHQEETjBMgBCjbgdYd4j5JgUuJ1Wo/GxroSYwJDEiMCAGA1UEAxMZc2VydmljZXMuaGV1cmlzdGljbGFiLmNvbYIQCJLHkNhBIYFO9tKiQOtYKjANBgkqhkiG9w0BAQQFAAOBgQAb/2xk2uQad68shSPl/uixWgvFI8WkxOTBopOLaLtDxwCeZ3mWVHdV9VnixHtThubnEBXAhYOCQSIXWtQuXFWO+gH3YyjTRJY5kTmXyuvBRTn3/so5SrQ7Rdlm9hf6E5YVX3tCjAy7ybUyaDUkQfmH5vmvgvpMzRfsJ1qhnUpJiQ=="/>56 </identity>57 </endpoint>58 <endpoint address="http://services.heuristiclab.com/Deployment-3.3/AdminService.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IAdminService" contract="HeuristicLab.PluginInfrastructure.Advanced.DeploymentService.IAdminService" name="WSHttpBinding_IAdminService">59 <identity>60 <certificate encodedValue="AwAAAAEAAAAUAAAAwK1+2oAmcy/mI2P2QjyiJRh0y60gAAAAAQAAACoCAAAwggImMIIBj6ADAgECAhAIkseQ2EEhgU720qJA61gqMA0GCSqGSIb3DQEBBAUAMCQxIjAgBgNVBAMTGXNlcnZpY2VzLmhldXJpc3RpY2xhYi5jb20wHhcNMTAwNTExMTExNDAyWhcNMzkxMjMxMjM1OTU5WjAkMSIwIAYDVQQDExlzZXJ2aWNlcy5oZXVyaXN0aWNsYWIuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq26Bwmwc7k+4W30qLQ2j+FInEL5BuH6opDY6CSlrtt3xQS/anrhvpbf3QghLDVINzcHkzbPmm/SguG4F85QLB6xO+tJaOvRo0iEK5g3c307vMIru7FJwk/OhplEQ5J1hbDgL3zOJlrWlgtqRVxCtVdF3XroI9BctOt1NkeKv9ewIDAQABo1kwVzBVBgNVHQEETjBMgBCjbgdYd4j5JgUuJ1Wo/GxroSYwJDEiMCAGA1UEAxMZc2VydmljZXMuaGV1cmlzdGljbGFiLmNvbYIQCJLHkNhBIYFO9tKiQOtYKjANBgkqhkiG9w0BAQQFAAOBgQAb/2xk2uQad68shSPl/uixWgvFI8WkxOTBopOLaLtDxwCeZ3mWVHdV9VnixHtThubnEBXAhYOCQSIXWtQuXFWO+gH3YyjTRJY5kTmXyuvBRTn3/so5SrQ7Rdlm9hf6E5YVX3tCjAy7ybUyaDUkQfmH5vmvgvpMzRfsJ1qhnUpJiQ=="/>61 </identity>62 </endpoint>63 </client>64 </system.serviceModel>65 9 <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>
Note: See TracChangeset
for help on using the changeset viewer.