public MainWindow() { InitializeComponent(); //_grfData = new GrfHolder(@"C:\Gravity\kRO Clean\data_l.grf"); _grfData = new GrfHolder(@"data\data.grf"); Test(); }
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); } }
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); } }
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); } }
public void Init() { _grf = new GrfHolder(_grfPath, GrfLoadOptions.OpenOrNew); _grf.Close(); }
public void Init() { _grf = new GrfHolder(_grfPath, GrfLoadOptions.OpenOrNew); _grf.Close(); _backupThread.Start(); }
public DbValidationEngine(SdeDatabase database) { _database = database; Grf = new GrfHolder(); }
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); } }
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); } }
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); } }