Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        /// <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;
            }
        }
Esempio n. 3
0
        /// <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();
            }
        }
Esempio n. 5
0
        /// <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);
        }
Esempio n. 6
0
        /// <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();
            }
        }
Esempio n. 7
0
        /// <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();
        }
Esempio n. 9
0
        /// <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()}'.");
        }
Esempio n. 11
0
 /// <summary>
 /// This will create a new instance of this class
 /// </summary>
 public NewProject()
 {
     InitializeComponent();
     _addProject  = false;
     _projectData = null;
 }