/// <summary> /// Saves the database. /// </summary> /// <param name="progress">The progress object.</param> /// <param name="eraseCommands">if set to <c>true</c> [erase commands].</param> public virtual void Save(IProgress progress, bool eraseCommands) { string dbPath = Path.GetDirectoryName(ProjectConfiguration.DatabasePath); string subPath = ProjectConfiguration.DatabasePath.Replace(dbPath + "\\", ""); ServerType serverType = AllLoaders.GetServerType(); try { BackupEngine.Instance.Start(SdeFiles.ServerDbPath); var dbs = _dbs.Values.ToList(); for (int i = 0; i < dbs.Count; i++) { var db = dbs[i]; db.WriteDb(dbPath, subPath, serverType); progress.Progress = AProgress.LimitProgress((i + 1f) / dbs.Count * 100f); } if (eraseCommands) { AllLoaders.UpdateStoredFiles(); Commands.ClearCommands(); _dbs.Values.ToList().ForEach(p => p.ClearCommands()); _dbs.Values.ToList().ForEach(p => p.BaseTable.ClearTupleStates()); } } catch (Exception err) { ErrorHandler.HandleException(err); } finally { BackupEngine.Instance.Stop(); } }
/// <summary> /// Saves the database. /// </summary> /// <param name="ap">The progress object.</param> /// <param name="progress"> </param> public virtual void Save(AsyncOperation ap, IProgress progress) { string dbPath = GrfPath.GetDirectoryName(ProjectConfiguration.DatabasePath); string subPath = ProjectConfiguration.DatabasePath.Replace(dbPath, "").TrimStart('\\', '/'); ServerType serverType = DbPathLocator.GetServerType(); DbDebugHelper.OnUpdate("Saving tables."); MetaGrf.Clear(); try { BackupEngine.Instance.Start(ProjectConfiguration.DatabasePath); var dbs = _dbs.Values.ToList(); IOHelper.SetupFileManager(); for (int i = 0; i < dbs.Count; i++) { var db = dbs[i]; db.WriteDb(dbPath, subPath, serverType); if (progress != null) { progress.Progress = AProgress.LimitProgress((i + 1f) / dbs.Count * 100f); } } foreach (var db in dbs) { db.SaveCommandIndex(); } Commands.SaveCommandIndex(); } catch (Exception err) { ErrorHandler.HandleException(err); } finally { if (ap != null && progress != null) { progress.Progress = ap.ProgressBar.GetIntermediateState("Backup manager"); } BackupEngine.Instance.Stop(); DbDebugHelper.OnUpdate("Finished saving tables."); } }