public ProjectControl(ProjectDataJson data) { InitializeComponent(); _data = data; SettingsManager settingsManager = new SettingsManager(); settingsManager.Load(); _settings = settingsManager.Settings; _projectFolder = _settings.MainProjectFolder + "\\" + _data.Name; WB_ProjectMainPage.ScriptErrorsSuppressed = true; LV_Launchables.MultiSelect = false; LV_Launchables.FullRowSelect = true; LV_Launchables.HeaderStyle = ColumnHeaderStyle.None; Init(); if (_data.WebUrl != null) { //NOTE find a way to speed up the page loading. Maybe if the web browser is async WB_ProjectMainPage.Url = _data.WebUrl; } else { ITemplate templateEngine = new WebsiteTemplate(); templateEngine.SetTemplateFile("ProjectBasic.html"); templateEngine.AddReplacement("projectname", data.Name); templateEngine.AddReplacement("imgsource", data.ImageUrl); WB_ProjectMainPage.DocumentText = templateEngine.Get(); B_OpenSite.Enabled = false; } }
/// <summary> /// Add a new project to the application /// You need to save the manager after adding an entry! /// </summary> /// <param name="Filename">A link to the file you want to load</param> public void Add(string Filename) { if (!File.Exists(Filename)) { return; } string fileData; using (StreamReader reader = new StreamReader(Filename)) { fileData = reader.ReadToEnd(); } try { ProjectDataJson loadetObject = JsonConvert.DeserializeObject <ProjectDataJson>(fileData); if (loadetObject.DisplayImage == null && loadetObject.HomeUrl == null) { return; } Add(loadetObject); } catch (Exception) { return; } }
/// <summary> /// This function will load all the availables projects and set the up in the form /// </summary> private void LoadProjects() { manager.Load(); IL_ProjectImages.Images.Clear(); LV_Projects.Items.Clear(); IL_ProjectImages.ImageSize = new Size(64, 64); LV_Projects.LargeImageList = IL_ProjectImages; for (int i = 0; i < manager.Projects.Count; i++) { ProjectDataJson currentProject = manager.Projects[i]; if (currentProject.DisplayImage != null) { IL_ProjectImages.Images.Add(currentProject.DisplayImage); } ListViewItem item = new ListViewItem(currentProject.Name) { Tag = currentProject, ImageIndex = i }; LV_Projects.Items.Add(item); } }
/// <summary> /// Create a new instance of this class for a project /// </summary> /// <param name="data">The project file to create an instance of</param> public ProjectConfigManager(ProjectDataJson data) { SettingsManager settingsManager = new SettingsManager(); settingsManager.Load(); _settings = settingsManager.Settings; _data = data; _downloadable = false; string baseURL = _data.HomeUrl; _openLauncherInfo = baseURL + "/OpenLauncher.json"; GetOpenLauncherInfo(); _localProjectConfig = _settings.MainProjectFolder + "\\" + _data.Name + "\\ProjectConfig.json"; _localLauncherFileAvailable = CheckLocalConfig(); if (_launcherSettings == null) { return; } _serverProjectConfig = baseURL + "/" + _launcherSettings.DownloadMainFolder + "/ProjectConfig.json"; _updateInfo = baseURL + "/" + _launcherSettings.DownloadMainFolder + "/UpdateInfo.json"; _downloadable = CheckProjectConfig(); if (Downloadable) { _downloadable = CheckUpdateInfo(); } }
/// <summary> /// Add a new ProjectDataJSON to the project manager /// You need to save the manager after adding an entry! /// </summary> /// <param name="newData">The new dataset to add</param> public void Add(ProjectDataJson newData) { string GUID = Guid.NewGuid().ToString(); newData.Guid = GUID; _projects.Add(newData); }
/// <summary> /// This will delete a project from the overview /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DeleteToolStripMenuItem_Click(object sender, EventArgs e) { if (LV_Projects.SelectedItems.Count > 0) { ListViewItem item = LV_Projects.SelectedItems[0]; if (item.Tag.GetType() == typeof(ProjectDataJson)) { ProjectDataJson data = (ProjectDataJson)item.Tag; manager.Remove(data.Guid); manager.Save(); P_ProjectPanel.Controls.Clear(); } LV_Projects.SelectedItems[0].Remove(); } }
/// <summary> /// This function will be triggered if you select a new project /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void LV_Projects_ItemActivate(object sender, EventArgs e) { if (sender.GetType() == typeof(ListView)) { ListView listView = (ListView)sender; ListViewItem item = listView.SelectedItems[0]; if (item.Tag.GetType() == typeof(ProjectDataJson)) { P_ProjectPanel.Controls.Clear(); ProjectDataJson projectData = (ProjectDataJson)item.Tag; ProjectControl projectController = new ProjectControl(projectData); P_ProjectPanel.Controls.Add(projectController); } } }
/// <summary> /// This will create a a new updater for a project /// </summary> /// <param name="projectData">This is the dataset for the project to create an updater for</param> public ProjectUpdateManager(ProjectDataJson projectData) { _data = projectData; SettingsManager settingsManager = new SettingsManager(); _projectManager = new ProjectConfigManager(_data); settingsManager.Load(); _settings = settingsManager.Settings; _asyncUpdateProvider = new BackgroundWorker(); _asyncUpdateProvider.DoWork += AsyncProvider_DoAsyncUpdate; _asyncUpdateProvider.WorkerReportsProgress = true; _asyncUpdateProvider.ProgressChanged += AsyncUpdateProvider_UpdateStatusChanged; _asyncUpdateProvider.RunWorkerCompleted += AsyncUpdateProvider_UpdateCompleted; SetupProject(); }
/// <summary> /// This will show up the save dialog and create the file /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void B_Save_Click(object sender, EventArgs e) { _addProject = CB_AddProject.Checked; ProjectDataJson jsonData = new ProjectDataJson { Name = TB_ProjectName.Text, ImageUrl = TB_ImageURL.Text, HomeUrl = TB_ProjectHomeURL.Text, }; if (_addProject) { _projectData = jsonData; } string saveString = JsonConvert.SerializeObject(jsonData, Formatting.Indented); SaveProject.ShowDialog(); using (StreamWriter writer = new StreamWriter(SaveProject.FileName)) { writer.Write(saveString); } this.Close(); }
private void UpdateCommandsForProject(IVsHierarchy project) { if (project == null) { throw new ArgumentNullException(nameof(project)); } Logger.Info($"Update commands for project '{project?.GetName()}'. IsVcsSupportEnabled={IsVcsSupportEnabled}. SolutionData.Count={toolWindowStateLoadedFromSolution?.ProjectArguments?.Count}."); var projectGuid = project.GetGuid(); if (projectGuid == Guid.Empty) { Logger.Info("Skipping project because guid euqals empty."); return; } var solutionData = toolWindowStateLoadedFromSolution ?? new SuoDataJson(); // joins data from solution and project // => overrides solution commands for a project if a project json file exists // => keeps all data from the suo file for projects without a json // => if we have data in our ViewModel we use this instad of the suo file // get project json data ProjectDataJson projectData = null; if (IsVcsSupportEnabled) { projectData = fileStorage.ReadDataForProject(project); } // project json overrides if it exists if (projectData != null) { Logger.Info($"Setting {projectData?.Items?.Count} commands for project '{project.GetName()}' from json-file."); var projectListViewModel = ToolWindowViewModel.TreeViewModel.Projects.GetValueOrDefault(projectGuid); var projHasSuoData = solutionData.ProjectArguments.ContainsKey(projectGuid); // update enabled state of the project json data (source prio: ViewModel > suo file) if (projectData.Items != null) { var argumentDataFromProject = projectData.AllArguments; var argumentDataFromLVM = projectListViewModel?.AllArguments.ToDictionary(arg => arg.Id, arg => arg); foreach (var dataFromProject in argumentDataFromProject) { if (argumentDataFromLVM != null && argumentDataFromLVM.TryGetValue(dataFromProject.Id, out CmdArgument argFromVM)) { dataFromProject.Enabled = argFromVM.IsChecked; } else if (projHasSuoData) { dataFromProject.Enabled = solutionData.CheckedArguments.Contains(dataFromProject.Id); } else { dataFromProject.Enabled = dataFromProject.DefaultChecked; } } var containerDataFromProject = projectData.AllContainer; var containerDataFromLVM = projectListViewModel?.AllContainer.ToDictionary(con => con.Id, con => con); foreach (var dataFromProject in containerDataFromProject) { if (containerDataFromLVM != null && containerDataFromLVM.TryGetValue(dataFromProject.Id, out CmdContainer conFromVM)) { dataFromProject.Expanded = conFromVM.IsExpanded; } else { dataFromProject.Expanded = solutionData.ExpandedContainer.Contains(dataFromProject.Id); } } var itemDataFromProject = projectData.AllItems; var itemDataFromLVM = projectListViewModel?.ToDictionary(item => item.Id, item => item); foreach (var dataFromProject in itemDataFromProject) { if (itemDataFromLVM != null && itemDataFromLVM.TryGetValue(dataFromProject.Id, out CmdBase itemFromVM)) { dataFromProject.Selected = itemFromVM.IsSelected; } else { dataFromProject.Selected = solutionData.SelectedItems.Contains(dataFromProject.Id); } } if (projectListViewModel != null) { projectData.Expanded = projectListViewModel.IsExpanded; projectData.Selected = projectListViewModel.IsSelected; } else { projectData.Expanded = solutionData.ExpandedContainer.Contains(projectData.Id); projectData.Selected = solutionData.SelectedItems.Contains(projectData.Id); } } else { projectData = new ProjectDataJson(); Logger.Info($"DataCollection for project '{project.GetName()}' is null."); } } // if we have data in the ViewModel we keep it else if (ToolWindowViewModel.TreeViewModel.Projects.ContainsKey(projectGuid)) { return; } else if (IsVcsSupportEnabled) { projectData = new ProjectDataJson(); Logger.Info("Will clear all data because of missing json file and enabled VCS support."); } // we try to read the suo file data else if (solutionData.ProjectArguments.TryGetValue(projectGuid, out projectData)) { Logger.Info($"Will use commands from suo file for project '{project.GetName()}'."); var argumentDataFromProject = projectData.AllArguments; foreach (var arg in argumentDataFromProject) { arg.Enabled = solutionData.CheckedArguments.Contains(arg.Id); } var containerDataFromProject = projectData.AllContainer; foreach (var con in containerDataFromProject) { con.Expanded = solutionData.ExpandedContainer.Contains(con.Id); } var itemDataFromProject = projectData.AllItems; foreach (var item in itemDataFromProject) { item.Selected = solutionData.SelectedItems.Contains(item.Id); } projectData.Expanded = solutionData.ExpandedContainer.Contains(projectData.Id); projectData.Selected = solutionData.SelectedItems.Contains(projectData.Id); } else { Logger.Info($"Gathering commands from configurations for project '{project.GetName()}'."); // if we don't have suo file data we read cmd args from the project configs projectData = new ProjectDataJson(); projectData.Items.AddRange(ReadCommandlineArgumentsFromProject(project)); } // push projectData to the ViewModel ToolWindowViewModel.PopulateFromProjectData(project, projectData); Logger.Info($"Updated Commands for project '{project.GetName()}'."); }
/// <summary> /// This will create a new instance of this class /// </summary> public NewProject() { InitializeComponent(); _addProject = false; _projectData = null; }