Ejemplo n.º 1
0
        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;
            }
        }