/// ------------------------------------------------------------------------------------ /// <summary> /// Return true if the backup should be canceled to allow the user to correct the /// comment or something because there are problems with the file name. May show various /// messages to the user. /// </summary> /// <remarks>Ideally, showing the message boxes should be done directly from the dialog /// box, not here in the Presenter.</remarks> /// ------------------------------------------------------------------------------------ internal bool FileNameProblems(Form messageBoxOwner) { BackupProjectSettings settings = new BackupProjectSettings(m_cache, m_backupProjectView, FwDirectoryFinder.DefaultBackupDirectory); settings.DestinationFolder = m_backupProjectView.DestinationFolder; if (settings.AdjustedComment.Trim() != settings.Comment.TrimEnd()) { string displayComment; string format = FwCoreDlgs.ksCharactersNotPossible; if (File.Exists(settings.ZipFileName)) { format = FwCoreDlgs.ksCharactersNotPossibleOverwrite; } displayComment = settings.Comment.Trim(); if (displayComment.Length > 255) { displayComment = displayComment.Substring(0, 255) + "..."; } string msg = string.Format(format, settings.AdjustedComment, displayComment); return(MessageBox.Show(messageBoxOwner, msg, FwCoreDlgs.ksCommentWillBeAltered, MessageBoxButtons.OKCancel, File.Exists(settings.ZipFileName) ? MessageBoxIcon.Warning : MessageBoxIcon.Information) == DialogResult.Cancel); } if (File.Exists(settings.ZipFileName)) { string msg = string.Format(FwCoreDlgs.ksOverwriteDetails, settings.ZipFileName); return(MessageBox.Show(messageBoxOwner, msg, FwCoreDlgs.ksOverwrite, MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel); } return(false); // no problems! }
/// ------------------------------------------------------------------------------------ /// <summary> /// Backs up the project. /// </summary> /// ------------------------------------------------------------------------------------ internal void BackupProject(IThreadedProgress progressDlg) { BackupProjectSettings settings = new BackupProjectSettings(m_cache, m_backupProjectView); settings.DestinationFolder = m_backupProjectView.DestinationFolder; settings.AppAbbrev = m_appAbbrev; ProjectBackupService backupService = new ProjectBackupService(m_cache, settings); backupService.BackupProject(progressDlg); }
/// ------------------------------------------------------------------------------------ /// <summary> /// Backs up the project. /// </summary> /// <returns>The path to the backup file, or <c>null</c></returns> /// ------------------------------------------------------------------------------------ internal string BackupProject(IThreadedProgress progressDlg) { BackupProjectSettings settings = new BackupProjectSettings(m_cache, m_backupProjectView, FwDirectoryFinder.DefaultBackupDirectory); settings.DestinationFolder = m_backupProjectView.DestinationFolder; settings.AppAbbrev = m_appAbbrev; ProjectBackupService backupService = new ProjectBackupService(m_cache, settings); string backupFile; if (!backupService.BackupProject(progressDlg, out backupFile)) { string msg = string.Format(FwCoreDlgs.ksCouldNotBackupSomeFiles, backupService.FailedFiles.ToString(", ", Path.GetFileName)); if (MessageBox.Show(msg, FwCoreDlgs.ksWarning, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes) { File.Delete(backupFile); } backupFile = null; } return(backupFile); }
/// ------------------------------------------------------------------------------------ /// <summary> /// Backs up the project. /// </summary> /// <returns>The path to the backup file, or <c>null</c></returns> /// ------------------------------------------------------------------------------------ internal string BackupProject(IThreadedProgress progressDlg) { var versionInfoProvider = new VersionInfoProvider(Assembly.GetExecutingAssembly(), false); var settings = new BackupProjectSettings(m_cache, m_backupProjectView, FwDirectoryFinder.DefaultBackupDirectory, versionInfoProvider.MajorVersion); settings.DestinationFolder = m_backupProjectView.DestinationFolder; ProjectBackupService backupService = new ProjectBackupService(m_cache, settings); string backupFile; if (!backupService.BackupProject(progressDlg, out backupFile)) { var msg = string.Format(FwCoreDlgs.ksCouldNotBackupSomeFiles, string.Join(", ", backupService.FailedFiles.Select(Path.GetFileName))); if (MessageBox.Show(msg, FwCoreDlgs.ksWarning, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes) { File.Delete(backupFile); } backupFile = null; } return(backupFile); }
public void RestoreToName_GetSuggestedNewProjectName() { // Add three project files, one being a copy of another. string proj1 = Path.Combine(Path.Combine(FwDirectoryFinder.ProjectsDirectory, "AAA"), "AAA.fwdata"); m_fileOs.AddExistingFile(proj1); string proj2 = Path.Combine(Path.Combine(FwDirectoryFinder.ProjectsDirectory, "BBB"), "BBB.fwdata"); m_fileOs.AddExistingFile(proj2); string proj3 = Path.Combine(Path.Combine(FwDirectoryFinder.ProjectsDirectory, "AAA-01"), "AAA-01.fwdata"); m_fileOs.AddExistingFile(proj3); BackupProjectSettings backupSettings = new BackupProjectSettings(Cache, null, FwDirectoryFinder.DefaultBackupDirectory); backupSettings.ProjectName = "AAA"; string backupFileName1 = backupSettings.ZipFileName; m_fileOs.AddExistingFile(backupFileName1); using (RestoreProjectDlg dlg1 = new RestoreProjectDlg("AAA", "Test", null)) { dlg1.Settings.ProjectName = "AAA"; RestoreProjectPresenter presenter1 = new RestoreProjectPresenter(dlg1, "AAA"); string suggestion1 = presenter1.GetSuggestedNewProjectName(); Assert.AreEqual("AAA-02", suggestion1); } backupSettings.ProjectName = "BBB"; string backupFileName2 = backupSettings.ZipFileName; m_fileOs.AddExistingFile(backupFileName2); using (RestoreProjectDlg dlg2 = new RestoreProjectDlg("BBB", "Test", null)) { dlg2.Settings.ProjectName = "BBB"; RestoreProjectPresenter presenter2 = new RestoreProjectPresenter(dlg2, "BBB"); string suggestion2 = presenter2.GetSuggestedNewProjectName(); Assert.AreEqual("BBB-01", suggestion2); } backupSettings.ProjectName = "CCC"; string backupFileName3 = backupSettings.ZipFileName; m_fileOs.AddExistingFile(backupFileName3); using (RestoreProjectDlg dlg3 = new RestoreProjectDlg("CCC", "Test", null)) { dlg3.Settings.ProjectName = "CCC"; RestoreProjectPresenter presenter3 = new RestoreProjectPresenter(dlg3, "CCC"); string suggestion3 = presenter3.GetSuggestedNewProjectName(); Assert.AreEqual("CCC-01", suggestion3); } }
public void DefaultBackupFile_BackupsForOtherProjectsButNotCurrent() { BackupProjectSettings backupSettings = new BackupProjectSettings(Cache, null, FwDirectoryFinder.DefaultBackupDirectory); backupSettings.ProjectName = "AAA"; string backupFileName1 = backupSettings.ZipFileName; m_fileOs.AddExistingFile(backupFileName1); backupSettings.ProjectName = "ZZZ"; string backupFileName2 = backupSettings.ZipFileName; m_fileOs.AddExistingFile(backupFileName2); // Add another backup for "AAA" that appears to be older backupSettings.ProjectName = "AAA"; backupSettings.BackupTime = backupSettings.BackupTime.AddHours(-3); string backupFileName3 = backupSettings.ZipFileName; m_fileOs.AddExistingFile(backupFileName3); RestoreProjectPresenter presenter = new RestoreProjectPresenter(null, "Current Project"); Assert.AreEqual("AAA", presenter.DefaultProjectName); }
public void DefaultBackupFile_BackupForCurrentProjectExists() { BackupProjectSettings backupSettings = new BackupProjectSettings(Cache, null, FwDirectoryFinder.DefaultBackupDirectory); string backupFileName1 = backupSettings.ZipFileName; m_fileOs.AddExistingFile(backupFileName1); // Force the second backup to appear to be older backupSettings.BackupTime = backupSettings.BackupTime.AddHours(-3); string backupFileName2 = backupSettings.ZipFileName; m_fileOs.AddExistingFile(backupFileName2); RestoreProjectPresenter presenter = new RestoreProjectPresenter(null, string.Empty); Assert.AreEqual(backupSettings.ProjectName, presenter.DefaultProjectName); }
/// ------------------------------------------------------------------------------------ /// <summary> /// Backs up the project that is about to be restored. /// </summary> /// <param name="restoreSettings">The restore settings.</param> /// <param name="existingCache">The existing cache for the project to backup, or null /// to create a new cache for the project defined in the restore settings.</param> /// <param name="dialogOwner">A form that can be used as an owner for progress dialog/ /// message box.</param> /// <returns><c>true</c> to indicate that it is okay to proceed with the restore; /// <c>false</c> to indicate that the backup failed and the user wasn't comfortable /// with just blindly going ahead with a restore that could potentially leave him in /// tears.</returns> /// ------------------------------------------------------------------------------------ private static bool BackupProjectForRestore(FwRestoreProjectSettings restoreSettings, FdoCache existingCache, Form dialogOwner) { using (var progressDlg = new ProgressDialogWithTask(dialogOwner)) { FdoCache cache = existingCache ?? FdoCache.CreateCacheFromExistingData( new ProjectId(restoreSettings.Settings.FullProjectPath, null), s_sWsUser, s_ui, FwDirectoryFinder.FdoDirectories, CreateFdoSettings(), progressDlg); try { var backupSettings = new BackupProjectSettings(cache, restoreSettings.Settings, FwDirectoryFinder.DefaultBackupDirectory); backupSettings.DestinationFolder = FwDirectoryFinder.DefaultBackupDirectory; backupSettings.AppAbbrev = restoreSettings.FwAppCommandLineAbbrev; var backupService = new ProjectBackupService(cache, backupSettings); string backupFile; if (!backupService.BackupProject(progressDlg, out backupFile)) { string msg = string.Format(FwCoreDlgs.FwCoreDlgs.ksCouldNotBackupSomeFiles, backupService.FailedFiles.ToString(", ", Path.GetFileName)); if (MessageBox.Show(msg, FwCoreDlgs.FwCoreDlgs.ksWarning, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes) File.Delete(backupFile); } } catch (FwBackupException e) { if (MessageBox.Show(dialogOwner, string.Format(FwCoreDlgs.FwCoreDlgs.ksBackupErrorCreatingZipfile, e.ProjectName, e.Message) + Environment.NewLine + Environment.NewLine + Properties.Resources.ksBackupErrorDuringRestore, FwCoreDlgs.FwCoreDlgs.ksBackupErrorCaption, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) { return false; } } finally { if (existingCache == null) // We created a new cache so we need to dispose of it cache.Dispose(); } } return true; }