public ExportClassNames(Savegame.Savegame savegame) { _runner = new HierarchyRunner(savegame, false); _classnames = new List<string>(); _report_sb = new StringBuilder(); _report_depth = 0; }
public DifferenceModel(Savegame.Savegame left, Savegame.Savegame right) { Root = new DifferenceNode(@"\", "", ""); LeftSavegame = left; RightSavegame = right; Root.IsExpanded = true; }
public static void Run(Savegame.Savegame savegame) { // Show dialog, gather data, then run method below ExportAction.Dialog dlg = new ExportAction.Dialog(); if (dlg.ShowDialog() == true) { Run(savegame, dlg.Filename, dlg.DestinationType, dlg.Filters, dlg.DeepTraversal, dlg.RecursExport); } }
private void _ReadData(string filename, long offset, long length) { _data = null; Header header = null; try { Savegame.Savegame savegame = new Savegame.Savegame(filename); header = savegame.PeekHeader(); } catch { } if (header != null) { if (header.SaveVersion < 21) { _data = CoreLib.Helpers.GetFileContents(filename, offset, length); } else { Reader.FileReader filereader = null; Reader.CloudsaveReader cloudreader = null; try { filereader = new Reader.FileReader(filename, null); int header_length = header.GetLength(); if (filereader.Seek(header_length, Reader.IReader.Positioning.Start) == header_length) { cloudreader = new Reader.CloudsaveReader(filereader, null); offset += 4; // Take leading 'size' into account if (cloudreader.Seek(offset, Reader.IReader.Positioning.Start) == offset) { _data = cloudreader.ReadBytes((int)length); } } } catch { } finally { if (cloudreader != null) { cloudreader.Close(); } if (filereader != null) { filereader.Close(); } } } } }
public static IAction Create(string name, Savegame.Savegame savegame) { IAction action = null; if (INSTANCE.IsKnown(name)) { action = INSTANCE[name, savegame]; } return(action); }
private bool _CloseGamefile() { if (CurrFile != null && CurrFile.Modified) { var ret = MessageBox.Show(Translate._("MainWindow.Gamefile.UnsavedChanges"), Translate._("MainWindow.Title"), MessageBoxButton.YesNo, MessageBoxImage.Question); if (ret == MessageBoxResult.No) { return(false); } } CurrFile = null; return(true); }
internal Savegame.Savegame _LoadSave(string filename) { Log.Info("Loading 2nd savegame '{0}' ...", filename); DateTime start_time = DateTime.Now; Savegame.Savegame savegame = new Savegame.Savegame(filename); try { savegame.Load(_callback); DateTime end_time = DateTime.Now; TimeSpan ofs = end_time - start_time; Log.Info("Loading took {0}", ofs); } catch (Exception exc) { savegame = null; Log.Error("Loading 2nd save failed", exc); } return(savegame); }
/// <summary> /// Runner constructor /// </summary> /// <param name="savegame">Savegame to run on</param> /// <param name="deep_run">Whether or not to visit child properties too</param> public HierarchyRunner(Savegame.Savegame savegame, bool deep_run) { _savegame = savegame; _deep_run = deep_run; }
private async void _LoadGamefile(string filename) { if (!_CloseGamefile()) { return; } if (!File.Exists(filename)) { Log.Info("Tried to load a file which didn't exist anymore!"); return; } // Setup savegame CurrFile = new Savegame.Savegame(filename); // Activate features as configured by user CurrFile.EnableDeepAnalysis(Config.Root.deep_analysis.enabled); // Peek header first, to ensure the savegame version is fully supported Header header = CurrFile.PeekHeader(); if (header == null) { Log.Error("Failed to peek header"); MessageBox.Show(string.Format(Translate._("MainWindow.LoadGamefile.PeekHeader.Failed"), filename), Translate._("MainWindow.Title"), MessageBoxButton.OK, MessageBoxImage.Stop); return; } if (header.GetVersionEntry() == null) { // Log this version info in case tool crashes Log.Warning("Save is newer than this tool supports: Build={0}, SaveVersion={1}, SaveType={2}", header.GetBuildVersion(), header.SaveVersion, header.Type); string save_version = string.Format("Build {0}", header.GetBuildVersion()); var ret = MessageBox.Show(string.Format(Translate._("MainWindow.LoadGamefile.PeekHeader.Warn"), save_version), Translate._("MainWindow.Title"), MessageBoxButton.YesNo, MessageBoxImage.Question); if (ret == MessageBoxResult.No) { return; } } _BlockUI(true); _SetStatusbar(string.Format(Translate._("MainWindow.LoadGamefile.Progress.Statusbar"), filename)); ProgressDialog progress = new ProgressDialog(this, Translate._("MainWindow.LoadGamefile.Progress.Title")); try { await Task.Run(() => { DateTime start_time = DateTime.Now; Log.Info("Loading file '{0}'", filename); progress.CounterFormat = Translate._("MainWindow.LoadGamefile.Progress.CounterFormat"); progress.Interval = 1024 * 1024; //1024 * 128; CurrFile.Load(progress.Events); //throw new UnknownPropertyException("Hard failure :D", "WTFProperty", 0x10001L); Log.Info("Finished loading"); Log.Info("... loaded a total of {0} elements", CurrFile.TotalElements); Log.Info("Creating trees ..."); //progress.CounterFormat = Translate._("MainWindow.LoadGamefile.Progress.CounterFormat.2"); progress.Interval = 1000; //TreeView.CreateTree(progress.Events); TreeView.CreateTrees(progress.Events); Log.Info("... finished creating trees"); DateTime end_time = DateTime.Now; TimeSpan ofs = end_time - start_time; Log.Info("Loading took {0}", ofs); }); } catch (UnknownPropertyException exc) { CurrFile = null; IncidentReportDialog.Show(filename, exc); } catch (Reader.ReadException exc) { CurrFile = null; IncidentReportDialog.Show(filename, exc); } finally { progress = null; _SetStatusbar(); _BlockUI(false); _UpdateUIState(); } }
public static void Run(Savegame.Savegame savegame, string filename, ExportAction.Writer.Destinations destination_type, List <ExportAction.FilterDefinition> filters, bool deep_traversal, bool recursive_export) { ExportAction.Impl.Run(savegame, filename, destination_type, filters, deep_traversal, recursive_export); }
public static void Run(Savegame.Savegame savegame, string filename, ExportAction.Writer.Destinations destination_type, List <FilterDefinition> filters, bool deep_traversal, bool recursive_export) { Writer.IWriter writer = Writer.CreateWriter(destination_type, filename, recursive_export); if (writer == null) { string msg = string.Format(Translate._("Unable to create writer for file\n\n{0}"), filename); MessageBox.Show(msg, Translate._("MainWindow.Title"), MessageBoxButton.OK, MessageBoxImage.Exclamation); return; } try { writer.Open(); } catch (Exception exc) { string msg = string.Format(Translate._("Unable to create writer for file\n\n{0}"), filename) + "\n\n" + exc.ToLongString(); MessageBox.Show(msg, Translate._("MainWindow.Title"), MessageBoxButton.OK, MessageBoxImage.Exclamation); return; } var defs = new F.Definitions(filters.Cast <F.Definition>()); F.CreatorCallback creator = (def) => FilterImpl.CreateFilter(def as FilterDefinition); F.FilterChain chain = F.CreateChain(defs, creator); if (chain == null) { string msg = "Internal error!\n\nUnable to create filter chain."; MessageBox.Show(msg, Translate._("MainWindow.Title"), MessageBoxButton.OK, MessageBoxImage.Exclamation); return; } HierarchyRunner.Runner action; if (chain.Count == 0) { action = (prop) => { // Empty "Export all" filter was passed writer.Write(prop); }; // Also remove deep flag deep_traversal = false; } else { action = (prop) => { // Test property against filter(s) given F.IResult result = chain.Test(prop); // If successful, pass to writer if (result.Success) { writer.Write(prop); } } }; try { HierarchyRunner runner = new HierarchyRunner(savegame, deep_traversal); runner.Run(Translate._("Action.Export.Progress.Title"), action); string msg = string.Format(Translate._("Action.Export.Done"), filename); MessageBox.Show(msg, Translate._("MainWindow.Title")); //, MessageBoxButton.OK, MessageBoxImage.Information); } catch { string msg = "Internal error!\n\nFailure within hierarchy runner."; MessageBox.Show(msg, Translate._("MainWindow.Title"), MessageBoxButton.OK, MessageBoxImage.Exclamation); } finally { writer.Close(); } } }
public ExportChildClasses(Savegame.Savegame savegame) { _savegame = savegame; _runner = new HierarchyRunner(savegame, false); _classes = new Dictionary <string, List <string> >(); }
public CompareSavegames(Savegame.Savegame savegame) { _left_save = savegame; //_InitComparators(); }