private void ChangeProjectDetails() { if (IsLoading) { return; } FileBasedProject currentSelectedProject = null; var selectedItem = (ComboboxItem)comboBox_projects.SelectedItem; var projectInfo = (ProjectInfo)selectedItem.Value; var projects = ProjectsController.GetProjects().ToList(); foreach (var proj in projects) { if ( string.Compare(projectInfo.Id.ToString(), proj.GetProjectInfo().Id.ToString(), StringComparison.OrdinalIgnoreCase) != 0) { continue; } CurrentProjectInfo = proj.GetProjectInfo(); currentSelectedProject = proj; break; } SelectedProjectId = CurrentProjectInfo.Id.ToString(); #region | get settings project reference | var settingsProject = Settings.projects.FirstOrDefault(project => string.Compare(project.id, CurrentProjectInfo.Id.ToString(), StringComparison.OrdinalIgnoreCase) == 0); #endregion if (settingsProject == null) { #region | check create new project entry | CurrentProject = new Project { id = CurrentProjectInfo.Id.ToString(), name = CurrentProjectInfo.Name, description = CurrentProjectInfo.Description, createdAt = Helper.GetStringFromDateTime(CurrentProjectInfo.CreatedAt.Date), createdBy = CurrentProjectInfo.CreatedBy, location = CurrentProjectInfo.LocalProjectFolder, projectFileName = CurrentProjectInfo.Name + ".sdlproj", sourceLanguage = new Structures.LanguageProperty { id = CurrentProjectInfo.SourceLanguage.CultureInfo.Name, name = CurrentProjectInfo.SourceLanguage.DisplayName }, targetLanguages = new List <Structures.LanguageProperty>() }; #region | get source language | #endregion #region | get target langauges | foreach (var language in CurrentProjectInfo.TargetLanguages) { var targetLanguage = new Structures.LanguageProperty { id = language.CultureInfo.Name, name = language.DisplayName }; CurrentProject.targetLanguages.Add(targetLanguage); } #endregion #region | get files | CurrentProject.translatableCount = 0; CurrentProject.referenceCount = 0; CurrentProject.localizableCount = 0; CurrentProject.unKnownCount = 0; CurrentProject.files = new List <FileProperty>(); #region | get source files | ProjectFile[] sourceFiles = null; try { if (currentSelectedProject != null) { sourceFiles = currentSelectedProject.GetSourceLanguageFiles(); } } catch (Exception ex) { Console.WriteLine(ex.Message); try { if (currentSelectedProject != null) { sourceFiles = currentSelectedProject.GetTargetLanguageFiles(); } } catch (Exception exception) { Console.WriteLine(exception.Message); } } if (sourceFiles != null) { foreach (var sfile in sourceFiles) { var fileProperty = new FileProperty { name = sfile.Name, path = sfile.LocalFilePath }; switch (sfile.Role) { case FileRole.Localizable: fileProperty.fileType = FileProperty.FileType.Localizable; CurrentProject.localizableCount++; break; case FileRole.Reference: fileProperty.fileType = FileProperty.FileType.Reference; CurrentProject.referenceCount++; break; case FileRole.Translatable: fileProperty.fileType = FileProperty.FileType.Translatable; CurrentProject.translatableCount++; break; case FileRole.Unknown: fileProperty.fileType = FileProperty.FileType.Unknown; CurrentProject.unKnownCount++; break; } fileProperty.sourceId = CurrentProjectInfo.SourceLanguage.CultureInfo.Name; fileProperty.targetId = CurrentProjectInfo.SourceLanguage.CultureInfo.Name; fileProperty.isSource = true; } } #endregion #endregion #endregion } else { CurrentProject = (Project)settingsProject.Clone(); } #region | new project version | ProjectVersion = new ProjectVersion { id = Guid.NewGuid().ToString(), parentId = CurrentProjectInfo.Id.ToString() }; var existingNames = CurrentProject.projectVersions.Select(pv => pv.name).ToList(); ProjectVersion.name = Helper.GetUniqueName(CurrentProject.name, existingNames); ProjectVersion.description = CurrentProject.description; ProjectVersion.createdAt = Helper.GetStringFromDateTime(DateTime.Now); ProjectVersion.createdBy = CurrentProject.createdBy; ProjectVersion.shallowCopy = Settings.create_shallow_copy; ProjectVersion.location = Settings.versions_folder_path; ProjectVersion.projectFileName = CurrentProject.projectFileName; #region | get source language | ProjectVersion.sourceLanguage = new Structures.LanguageProperty { id = CurrentProjectInfo.SourceLanguage.CultureInfo.Name, name = CurrentProjectInfo.SourceLanguage.DisplayName }; #endregion #region | get target langauges | ProjectVersion.targetLanguages = new List <Structures.LanguageProperty>(); foreach (var language in CurrentProjectInfo.TargetLanguages) { var targetLanguage = new Structures.LanguageProperty { id = language.CultureInfo.Name, name = language.DisplayName }; ProjectVersion.targetLanguages.Add(targetLanguage); } #endregion #region | get files | ProjectVersion.translatableCount = 0; ProjectVersion.referenceCount = 0; ProjectVersion.localizableCount = 0; ProjectVersion.unKnownCount = 0; ProjectVersion.files = new List <FileProperty>(); #region | get source files | ProjectVersion.localizableCount = CurrentProject.localizableCount; ProjectVersion.referenceCount = CurrentProject.referenceCount; ProjectVersion.translatableCount = CurrentProject.translatableCount; ProjectVersion.unKnownCount = CurrentProject.unKnownCount; #endregion #endregion #endregion textBox_name.Text = ProjectVersion.name; textBox_location.Text = ProjectVersion.location; textBox_description.Text = ProjectVersion.description; textBox_createdAt.Text = ProjectVersion.createdAt; checkBox_createShallowCopy.Checked = ProjectVersion.shallowCopy; checkBox_createSubFolderProject.Checked = true; }
private void CreateProjectVersion() { try { #region | new project version | ProjectVersionNew = new ProjectVersion { id = Guid.NewGuid().ToString(), parentId = CurrentProjectInfo.Id.ToString() }; var existingNames = CurrentProject.projectVersions.Select(pv => pv.name).ToList(); ProjectVersionNew.name = Helper.GetUniqueName(CurrentProject.name, existingNames); ProjectVersionNew.description = string.Format(PluginResources.RESTORE_POINT_before_restoring_the_Project_from_the_Project_Version, "\r\n", ProjectVersion.id, "\r\n", ProjectVersion.name); ProjectVersionNew.createdAt = Helper.GetStringFromDateTime(DateTime.Now); ProjectVersionNew.createdBy = CurrentProject.createdBy; ProjectVersionNew.shallowCopy = false; ProjectVersionNew.location = Path.Combine(Settings.versions_folder_path, ProjectVersionNew.createdAt); if (!Directory.Exists(ProjectVersionNew.location)) { Directory.CreateDirectory(ProjectVersionNew.location); } ProjectVersionNew.projectFileName = CurrentProject.projectFileName; #region | get source language | ProjectVersionNew.sourceLanguage = new Structures.LanguageProperty { id = CurrentProjectInfo.SourceLanguage.CultureInfo.Name, name = CurrentProjectInfo.SourceLanguage.DisplayName }; #endregion #region | get target langauges | ProjectVersionNew.targetLanguages = new List <Structures.LanguageProperty>(); foreach (var language in CurrentProjectInfo.TargetLanguages) { var targetLanguage = new Structures.LanguageProperty { id = language.CultureInfo.Name, name = language.DisplayName }; ProjectVersionNew.targetLanguages.Add(targetLanguage); } #endregion #region | get files | ProjectVersionNew.translatableCount = 0; ProjectVersionNew.referenceCount = 0; ProjectVersionNew.localizableCount = 0; ProjectVersionNew.unKnownCount = 0; ProjectVersionNew.files = new List <FileProperty>(); #region | get source files | ProjectVersionNew.localizableCount = CurrentProject.localizableCount; ProjectVersionNew.referenceCount = CurrentProject.referenceCount; ProjectVersionNew.translatableCount = CurrentProject.translatableCount; ProjectVersionNew.unKnownCount = CurrentProject.unKnownCount; #endregion #endregion #endregion Cursor = Cursors.WaitCursor; button_wizard_continue.Enabled = false; button_wizard_cancel.Enabled = false; button_wizard_help.Enabled = false; textBox_progress_deatails.Text = string.Empty; textBox_progress_deatails.Text += string.Format(PluginResources.Start_Processing_0, DateTime.Now) + "\r\n\r\n"; textBox_progress_deatails.Text += PluginResources.Creating_new_restore_point_from_the_project__ + "\r\n\r\n"; textBox_progress_deatails.Text += string.Format(PluginResources.Project_Name_0, CurrentProject.name) + "\r\n"; textBox_progress_deatails.Text += string.Format(PluginResources.Project_Location_0, CurrentProject.location) + "\r\n"; textBox_progress_deatails.Text += string.Format(PluginResources.Project_Source_Language_0, CurrentProject.sourceLanguage.name) + "\r\n"; var targetLanguages = CurrentProject.targetLanguages.Aggregate(string.Empty, (current, language) => current + (current.Trim() != string.Empty ? ", " : string.Empty) + language.name); textBox_progress_deatails.Text += string.Format(PluginResources.Project_Target_Languages_0, targetLanguages) + "\r\n"; textBox_progress_deatails.Text += string.Format(PluginResources.Project_Source_Files_Translatable_Reference_Localizable_Unknown, CurrentProject.translatableCount, CurrentProject.referenceCount, CurrentProject.localizableCount, CurrentProject.unKnownCount) + "\r\n\r\n"; textBox_progress_deatails.Text += string.Format(PluginResources.Project_Version_Name, ProjectVersionNew.name) + "\r\n"; textBox_progress_deatails.Text += string.Format(PluginResources.Project_Version_Description_0, ProjectVersionNew.description) + "\r\n"; textBox_progress_deatails.Text += string.Format(PluginResources.Project_Version_Location_0, ProjectVersionNew.location) + "\r\n"; label_progress_process.Text = PluginResources.Initializing_restore_point_from_project_procedure__; label_progress_percentage.Text = @"0%"; label_progress_message.Text = @"..."; Application.DoEvents(); TotalFiles = 0; var hasError = false; var errorMessage = string.Empty; try { if (Directory.Exists(CurrentProject.location)) { #region | standard project | CountAll(new DirectoryInfo(CurrentProject.location), ProjectVersionNew.shallowCopy ? "*.sdlxliff" : "*.*"); progress_progressBar.Value = 0; progress_progressBar.Maximum = TotalFiles; #region | copy .sdlproj file always | if (ProjectVersionNew.shallowCopy) { var files = new DirectoryInfo(CurrentProject.location).GetFiles("*.sdlproj").ToList(); if (files.Count > 0) { var fiToCopy = files[0]; if (files.Count == 1) { File.Copy(fiToCopy.FullName, Path.Combine(ProjectVersionNew.location, fiToCopy.Name), true); } else { foreach (var fi in files) { if (fi.Name.ToLower().IndexOf(CurrentProject.name.ToLower().Trim(), StringComparison.Ordinal) <= -1) { continue; } fiToCopy = fi; break; } File.Copy(fiToCopy.FullName, Path.Combine(ProjectVersionNew.location, fiToCopy.Name), true); } TotalFiles++; progress_progressBar.Maximum++; progress_progressBar.Value++; } } #endregion ProjectVersionNew.filesCopiedCount = TotalFiles; CopyAll(new DirectoryInfo(CurrentProject.location), new DirectoryInfo(ProjectVersionNew.location), ProjectVersionNew.shallowCopy ? "*.sdlxliff" : "*.*"); #endregion } else { #region | single file project | if (CurrentProject.translatableCount == 1 && CurrentProject.location.EndsWith(".ProjectFiles")) { var locationSdlproj = CurrentProject.location.Substring(0, CurrentProject.location.LastIndexOf(".ProjectFiles", StringComparison.Ordinal)) + ".sdlproj"; var locationSource = CurrentProject.location.Substring(0, CurrentProject.location.LastIndexOf(".ProjectFiles", StringComparison.Ordinal)); var locationSdlxliff = CurrentProject.location.Substring(0, CurrentProject.location.LastIndexOf(".ProjectFiles", StringComparison.Ordinal)) + ".sdlxliff"; progress_progressBar.Maximum = 0; progress_progressBar.Value = 0; if (File.Exists(locationSdlproj)) { File.Copy(locationSdlproj, Path.Combine(ProjectVersionNew.location, Path.GetFileName(locationSdlproj)), true); TotalFiles++; progress_progressBar.Maximum++; progress_progressBar.Value++; } if (File.Exists(locationSdlxliff)) { File.Copy(locationSdlxliff, Path.Combine(ProjectVersionNew.location, Path.GetFileName(locationSdlxliff)), true); TotalFiles++; progress_progressBar.Maximum++; progress_progressBar.Value++; } try { if (!ProjectVersionNew.shallowCopy) { if (File.Exists(locationSource)) { File.Copy(locationSource, Path.Combine(ProjectVersionNew.location, Path.GetFileName(locationSource)), true); TotalFiles++; progress_progressBar.Maximum++; progress_progressBar.Value++; } } } catch { // ignored } ProjectVersionNew.filesCopiedCount = TotalFiles; } #endregion } textBox_progress_deatails.Text += string.Format(PluginResources.Total_Files_included_in_the_Project_restore_point_0, ProjectVersionNew.filesCopiedCount) + "\r\n\r\n"; if (ProjectVersionNew.filesCopiedCount == 0) { label_titlebar_note.Text = PluginResources.Warning_no_local_files_where_copied_during_the_project_version_creation_process; } label_progress_percentage.Text = @"100%"; label_progress_message.Text = string.Format(PluginResources.Copied_files_0_of_1, progress_progressBar.Value, progress_progressBar.Maximum); Saved = true; } catch (Exception ex) { hasError = true; errorMessage = ex.Message; } var message = PluginResources.Finished_creating_project_restore_point_without_errors; if (hasError) { message = PluginResources.Finished_creating_project_restore_point_with_errors; } textBox_progress_deatails.Text += message + "\r\n\r\n"; if (hasError) { textBox_progress_deatails.Text += PluginResources.Exception_Message__ + errorMessage + "\r\n\r\n"; } } catch { Cursor = Cursors.Default; Saved = false; throw; } }