Ejemplo n.º 1
0
 public MainWindow()
 {
     InitializeComponent();
     //_grfData = new GrfHolder(@"C:\Gravity\kRO Clean\data_l.grf");
     _grfData = new GrfHolder(@"data\data.grf");
     Test();
 }
Ejemplo n.º 2
0
 private void _openGrfs(IEnumerable <TkPath> paths, GrfHolder extraGrf)
 {
     try {
         foreach (TkPath resource in paths)
         {
             if ((!String.IsNullOrEmpty(resource.FilePath)) && File.Exists(resource.FilePath))
             {
                 if (!_openedGrfs.ContainsKey(resource.FilePath))
                 {
                     GrfHolder grf = new GrfHolder();
                     grf.Open(resource.FilePath);
                     _openedGrfs.Add(resource.FilePath, grf);
                 }
             }
             else if (resource.FilePath.StartsWith("Currently opened GRF : "))
             {
                 if (!_openedGrfs.ContainsKey(extraGrf.FileName))
                 {
                     //extraGrf.FileTable.HasBeenChanged += new FileTable.FileTableEventHandler(_fileTable_HasBeenChanged);
                     _openedGrfs.Add(extraGrf.FileName, extraGrf);
                 }
             }
         }
     }
     catch (Exception err) {
         ErrorHandler.HandleException(err);
     }
 }
Ejemplo n.º 3
0
		public void Update(List<TkPath> paths, GrfHolder extraGrf = null) {
			try {
				_resourcePaths.Clear();
				_extraGrf = extraGrf;

				string toLower;
				_openGrfs(paths, extraGrf);

				foreach (TkPath resource in paths) {
					if (File.Exists(resource.FilePath)) {
						GrfHolder grf = _openedGrfs[resource.FilePath];

						foreach (string file in grf.FileTable.Files) {
							toLower = file.ToLower();

							if (!_resourcePaths.ContainsKey(toLower)) {
								_resourcePaths.Add(toLower, grf.FileName + "?" + file);
							}
						}
					}
					else if (resource.FilePath.StartsWith("Currently opened GRF : ")) {
						foreach (string file in extraGrf.FileTable.Files) {
							toLower = file.ToLower();

							if (!_resourcePaths.ContainsKey(toLower)) {
								_resourcePaths.Add(toLower, extraGrf.FileName + "?" + file);
							}
						}
					}
					else {
						string relativePath;
						string parentFolder = Path.GetDirectoryName(resource.FilePath);

						if (parentFolder != null && Directory.Exists(parentFolder)) {
							foreach (string file in Directory.GetFiles(parentFolder, "*.*", SearchOption.AllDirectories)) {
								relativePath = file.Replace(parentFolder + "\\", "");

								toLower = relativePath.ToLower();

								if (!_resourcePaths.ContainsKey(toLower)) {
									_resourcePaths.Add(toLower, file + "?");
								}
							}
						}
					}
				}
			}
			catch (Exception err) {
				ErrorHandler.HandleException(err);
			}
		}
Ejemplo n.º 4
0
        public void _start()
        {
            try {
                while (true)
                {
                    Pause();

                    var keys = _pendingBackups.Keys.ToList();

                    foreach (var key in keys.Where(p => p > _backupId).OrderBy(p => p))
                    {
                        string grfPath = GrfPath.Combine(Settings.TempPath, "backup_" + _backupId + ".grf");

                        using (GrfHolder grf = new GrfHolder(grfPath, GrfLoadOptions.New)) {
                            foreach (var entry in _pendingBackups[key])
                            {
                                grf.Commands.AddFileAbsolute(entry.Value, entry.Key);
                            }

                            grf.Save();
                            grf.Reload();

                            // Currently saving another file, stop before breaking anything
                            if (BackupEngine.Instance.IsStarted)
                            {
                                break;
                            }

                            // Save to primary backup file
                            BackupEngine.Instance.Grf.QuickMerge(grf);
                            BackupEngine.Instance.Grf.Reload();
                        }

                        GrfPath.Delete(grfPath);

                        // Deletes unused files, it's not necessary but it can pile up quickly
                        foreach (var file in _pendingBackups[key].Keys)
                        {
                            GrfPath.Delete(file);
                        }

                        _backupId = key;
                    }

                    // Remove old backups
                    if (!BackupEngine.Instance.IsStarted)
                    {
                        List <string> paths = BackupEngine.Instance.GetBackupFiles().OrderBy(long.Parse).ToList();

                        // Only delete if it's worth it.
                        if (paths.Count > BackupEngine.MaximumNumberOfBackups + 15)
                        {
                            while (paths.Count > BackupEngine.MaximumNumberOfBackups)
                            {
                                BackupEngine.Instance.Grf.Commands.RemoveFolder(paths[0]);
                                paths.RemoveAt(0);
                            }

                            BackupEngine.Instance.Grf.QuickSave();
                        }

                        // The GRF must always be closed
                        BackupEngine.Instance.Grf.Close();
                    }
                }
            }
            catch (Exception err) {
                IsCrashed = true;
                ErrorHandler.HandleException(err);
                ErrorHandler.HandleException("The backup engine has failed to save your files. It will be disabled until you reload the application.", ErrorLevel.NotSpecified);
            }
        }
Ejemplo n.º 5
0
		public void Init() {
			_grf = new GrfHolder(_grfPath, GrfLoadOptions.OpenOrNew);
			_grf.Close();
		}
Ejemplo n.º 6
0
 public void Init()
 {
     _grf = new GrfHolder(_grfPath, GrfLoadOptions.OpenOrNew);
     _grf.Close();
     _backupThread.Start();
 }
Ejemplo n.º 7
0
 public DbValidationEngine(SdeDatabase database)
 {
     _database = database;
     Grf       = new GrfHolder();
 }
Ejemplo n.º 8
0
        private void _menuItemMerge_Click(object sender, RoutedEventArgs e)
        {
            try {
                if (!_validateState())
                {
                    return;
                }

                string file = PathRequest.OpenFileMapcache("filter", "Grf and Dat Files (*.grf, *.dat)|*.grf;*.dat");

                if (file != null)
                {
                    if (file.IsExtension(".grf"))
                    {
                        _asyncOperation.SetAndRunOperation(new GrfThread(delegate {
                            AProgress.Init(_cache);

                            try {
                                _cache.Commands.Begin();

                                List <FileEntry> files = new List <FileEntry>();
                                int count = 0;

                                using (GrfHolder grf = new GrfHolder(file, GrfLoadOptions.Normal)) {
                                    files.AddRange(grf.FileTable.EntriesInDirectory("data\\", SearchOption.TopDirectoryOnly).Where(entry => entry.RelativePath.IsExtension(".gat")));

                                    foreach (var entry in files)
                                    {
                                        count++;
                                        AProgress.IsCancelling(_cache);
                                        FileEntry rswEntry = grf.FileTable.TryGet(entry.RelativePath.ReplaceExtension(".rsw"));

                                        if (rswEntry == null)
                                        {
                                            continue;
                                        }

                                        _cache.Progress = (float)count / files.Count * 100f;
                                        _cache.Commands.AddMap(Path.GetFileNameWithoutExtension(entry.DisplayRelativePath), entry.GetDecompressedData(), rswEntry.GetDecompressedData());
                                    }
                                }
                            }
                            catch (OperationCanceledException) {
                                _cache.IsCancelled = true;
                                _cache.Commands.CancelEdit();
                            }
                            catch (Exception err) {
                                _cache.Commands.CancelEdit();
                                ErrorHandler.HandleException(err);
                            }
                            finally {
                                _cache.Commands.End();
                                AProgress.Finalize(_cache);
                            }
                        }, _cache, 200));
                    }
                    else if (file.IsExtension(".dat"))
                    {
                        Mapcache cache = new Mapcache(file);

                        try {
                            _cache.Commands.Begin();

                            foreach (var map in cache.Maps)
                            {
                                _cache.Commands.AddMapRaw(map.MapName, map);
                            }
                        }
                        catch {
                            _cache.Commands.CancelEdit();
                            throw;
                        }
                        finally {
                            _cache.Commands.End();
                        }
                    }
                    else
                    {
                        throw new Exception("Unreognized file format.");
                    }
                }
            }
            catch (Exception err) {
                ErrorHandler.HandleException(err);
            }
        }
Ejemplo n.º 9
0
        public void Update(List <TkPath> paths, GrfHolder extraGrf = null)
        {
            try {
                _resourcePaths.Clear();
                _extraGrf = extraGrf;

                string toLower;
                _openGrfs(paths, extraGrf);

                foreach (TkPath resource in paths)
                {
                    if (File.Exists(resource.FilePath))
                    {
                        GrfHolder grf = _openedGrfs[resource.FilePath];

                        foreach (string file in grf.FileTable.Files)
                        {
                            toLower = file.ToLower();

                            if (!_resourcePaths.ContainsKey(toLower))
                            {
                                _resourcePaths.Add(toLower, grf.FileName + "?" + file);
                            }
                        }
                    }
                    else if (resource.FilePath.StartsWith("Currently opened GRF : "))
                    {
                        foreach (string file in extraGrf.FileTable.Files)
                        {
                            toLower = file.ToLower();

                            if (!_resourcePaths.ContainsKey(toLower))
                            {
                                _resourcePaths.Add(toLower, extraGrf.FileName + "?" + file);
                            }
                        }
                    }
                    else
                    {
                        string relativePath;
                        string parentFolder = Path.GetDirectoryName(resource.FilePath);

                        if (parentFolder != null && Directory.Exists(parentFolder))
                        {
                            foreach (string file in Directory.GetFiles(parentFolder, "*.*", SearchOption.AllDirectories))
                            {
                                relativePath = file.Replace(parentFolder + "\\", "");

                                toLower = relativePath.ToLower();

                                if (!_resourcePaths.ContainsKey(toLower))
                                {
                                    _resourcePaths.Add(toLower, file + "?");
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception err) {
                ErrorHandler.HandleException(err);
            }
        }
Ejemplo n.º 10
0
		private void _openGrfs(IEnumerable<TkPath> paths, GrfHolder extraGrf) {
			try {
				foreach (TkPath resource in paths) {
					if ((!String.IsNullOrEmpty(resource.FilePath)) && File.Exists(resource.FilePath)) {
						if (!_openedGrfs.ContainsKey(resource.FilePath)) {
							GrfHolder grf = new GrfHolder();
							grf.Open(resource.FilePath);
							_openedGrfs.Add(resource.FilePath, grf);
						}
					}
					else if (resource.FilePath.StartsWith("Currently opened GRF : ")) {
						if (!_openedGrfs.ContainsKey(extraGrf.FileName)) {
							//extraGrf.FileTable.HasBeenChanged += new FileTable.FileTableEventHandler(_fileTable_HasBeenChanged);
							_openedGrfs.Add(extraGrf.FileName, extraGrf);
						}
					}
				}
			}
			catch (Exception err) {
				ErrorHandler.HandleException(err);
			}
		}