/// <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();
            }
        }
Beispiel #2
0
        /// <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.");
            }
        }