Ejemplo n.º 1
0
        public bool SaveProjectFile(out string errorMessage)
        {
            errorMessage        = "";
            WritingToUserFolder = true;
            //try
            //{
            if (string.IsNullOrEmpty(CurrentProject.ProjectFile) ||
                !Directory.Exists(Path.GetDirectoryName(CurrentProject.ProjectFile)))
            {
                throw new InvalidOperationException("Project Filename hasn't been set or the directory doesn't exist.");
                //toolStripMenuItemFileSaveAs_Click(null, null);
            }

            string tempFolder = PathHelper.GetUniqueTempDir("ArchAngel");

            if (Directory.Exists(tempFolder))
            {
                Utility.DeleteDirectoryBrute(tempFolder);
            }
            if (ArchAngel.Interfaces.SharedData.CurrentProject.TemplateProject == null)
            {
                ArchAngel.Interfaces.SharedData.CurrentProject.TemplateProject = ArchAngel.Common.UserTemplateHelper.GetDefaultTemplate();
            }

            CurrentProject.ProjectSettings.UserTemplateName = CurrentProject.TemplateProject.Name;
            string versionFile = Path.Combine(tempFolder, "version.txt");

            Directory.CreateDirectory(tempFolder);
            ExtraSaveSteps(tempFolder);
            File.WriteAllText(versionFile, FileVersionLatest.ToString());
            CurrentProject.SaveAppConfig(tempFolder);
            var providerFolders = SaveProviders(tempFolder);


            //string zipFile = Path.Combine(Path.GetDirectoryName(CurrentProject.ProjectFile), Path.GetFileNameWithoutExtension(CurrentProject.ProjectFile) + ".aaproj");
            //try
            //{
            //    //Slyce.Common.Utility.DeleteFileBrute(zipFile);
            //    Utility.ZipFile(tempFolder, zipFile);
            //}
            //catch (Exception)
            //{
            //    if (File.Exists(zipFile) && (File.GetAttributes(zipFile) & FileAttributes.ReadOnly) != 0)
            //    {
            //        // We don't need to show a message to the user here, because ZipFile() already does that.
            //        //MessageBox.Show("Cannot save because project file is readonly: " + zipFile, "Cannot Save - ReadOnly", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            //        return false;
            //    }

            //    throw;
            //}

            // Delete the temp folder
            //Slyce.Common.Utility.DeleteDirectoryBrute(tempFolder);

            // ## New Project Save Method ## //

            string outputDirectory = Path.Combine(Path.GetDirectoryName(CurrentProject.ProjectFile), ProviderHelper.GetProjectFilesDirectoryName(CurrentProject.ProjectFile));

            for (int i = 0; i < 3; i++)
            {
                try
                {
                    Utility.CopyDirectory(tempFolder, outputDirectory, true);
                }
                catch (Exception ex)
                {
                    if (i == 2)
                    {
                        errorMessage = "Save failed: " + ex.Message;
                        return(false);
                    }
                    else
                    {
                        System.Threading.Thread.Sleep(100);
                    }
                }
            }
            string newFilename = Path.ChangeExtension(CurrentProject.ProjectFile, ".wbproj");

            string projectFileText = CreateProjectDescriptorFile(newFilename, providerFolders);

            File.WriteAllText(newFilename, projectFileText);

            CurrentProject.ProjectFile = newFilename;
            OnSaveSuccess();

            // ## New Project Save Method ## //

            SharedData.RegistryUpdateValue("DefaultConfig", CurrentProject.ProjectFile);
            IsDirty = false;
            RaiseSaveEvent();
            // To show user something has happened
            //System.Threading.Thread.Sleep(500);
            return(true);
            //}
            //catch (Exception ex)
            //{
            //    ErrorReportingService.ReportUnhandledException(ex);
            //    return false;
            //}
        }